Доброго дня!
Недавно я столкнулся с проблемой выполнения команды executeCommand библиотеки
yii2-redis в моём проекте.
Суть вопроса:
Ошибка была выявлена при тестировании определённого решения из серверной части в клиентской части проекта!
Проблема заключается в выполнении
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? Заранее вам спасибо!