seregazolotaryow64
@seregazolotaryow64
IT Специалист и самоучка

Как выполнить Redis-команду lrem, удаляя запрашиваемое значение из определённого списка без индекса и цикла for?

Доброго дня!

Недавно я столкнулся с проблемой выполнения команды executeCommand библиотеки yii2-redis в моём проекте.

Суть вопроса:
VDvttyE.png

Ошибка была выявлена при тестировании определённого решения из серверной части в клиентской части проекта!

Проблема заключается в выполнении Redis-команды lrem, чтобы удалить запрашиваемое клиентской частью значение из готового мной списка. Насколько я знаю, lrem удаляет значение вместе с индексом из списка.

Пример проблемного кода:
$al = Yii::$app->redis->executeCommand('lrange', [$key, -100, 100]);
												
for($i = 0; $i < $al; $i++){
	if($attributeId == $al[$i]){ 
		$delR = Yii::$app->redis->executeCommand('lrem', [$key, $i, $attributeId]);
								
		$hive[0]->name = $attributeId;

		if($delR && $hive[0]->save()){ $serviceResponse[] = 'New attribute table created!'; }
		else{
			\Yii::$app->response->statusCode = 502;
			$serviceResponse[] = 'Services gateway!';
		}
	}
}


Примечания к примеру кода:

  • $attributeId - это запрос со значением для его удаления из Redis-списка. Готовый аттрибут данных без фильтров;
  • $key - это ключ, на котором работает сам Redis-список;
  • $hive[0] - здесь распологается объект модели данных Yii, отвечающий за хранение только аттрибутов. Методы объекта выполняются после добавления первого фильтра и до добавления нового пустого поля для ввода нового фильтра в Realtime.



Как исправить данную ошибку выполнения запроса? А можно ли к lrem в Redis обращаться также, как к DELETE в SQL, не учитывая числовой индекс и не используя цикл for? Заранее вам спасибо!
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы