Что такое лучшая практика для списка и установить обработку в Redis?

StackOverflow https://stackoverflow.com/questions/4040574

  •  27-09-2019
  •  | 
  •  

Вопрос

Мы используем Redis в качестве сервера кэширования и часто должны иметь дело с кэшированием. Когда мы кэшируем простые объекты, мы делаем GET и Redis, вернут NULL, если объект не будет существовать, и мы узнаем, что объект не кэшируется и должен быть загружен из базы данных.

Но как мы лучше всего справляемся о том же списках - пустой список может быть допустимым значением. Нужно ли позвонить, существует, чтобы проверить, существует ли список (но делает операцию 2 вызовы вместо одного) или у кого-то есть лучшая идея, как справиться с этим сценарием?

/Спасибо

Это было полезно?

Решение

Если вы абсолютно должны сделать это, когда список создан, вы можете нажать на «Sentinel» в качестве первого элемента, который никогда не удаляется. Чтобы сделать это атомное значение, вы можете использовать Multi / Exec / Watch, но часы доступны только в Redis 2.2, который в настоящее время является предварительным просмотром (даже если она довольно стабильна, вы можете схватить его из главной ветки GitHub).

Я думаю, что в вашем случае вы можете также захотеть rpushx и lpushx, который будет атомно нажать против списка только если он уже существует.

Обратите внимание, что поскольку redis 2.2 существует означает иметь как минимум 1 элемент для списка, в качестве списков, которые будут достичь нулевых элементов, автоматически удаляются, для многих веских причин;)

Другие советы

К сожалению, списка / заданные команды поиска, такие как LRANGE и SMEMBERS, не различают пустой список / набор и несуществующий список / набор.

Поэтому, если вам абсолютно необходимо различать двумя случаями, я думаю, вам нужно будет сделать в первую очередь. Попробуйте кондиционировать ваши команды для лучшей производительности. Большинство библиотек клиентских библиотек Redis поддерживают трубопровод.

Или вы можете пересмотреть вашу стратегию кэширования, чтобы вам не нужно их отличить.

Если вы используете PHP, я бы назначил возвращаемое значение переменной, а затем проверить, является ли это массивом. (Это как это работает с использованием библиотеки предис)

$res = $redis->get('Key');
if(is_array($res))
    do code here
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top