Как сгенерировать порядковый номер в Redis?

#redis

#redis

Вопрос:

Мне нужна последовательность чисел, сгенерированная сервером Redis. Что-то вроде abc:20160912185342000000000123 Здесь цифры, выделенные жирным шрифтом, обозначают текущую дату, а остальные цифры — порядковый номер, предоставленный redis.

Комментарии:

1. Вы можете перенести логику объединения даты и числа в сценарий lua

Ответ №1:

Сценарий Lua для достижения этого может выглядеть следующим образом:

 eval "local count = redis.call('incr','sequence_number')n return ARGV[1] .. ':' .. ARGV[2] .. count" 0 abc 20160912
  

Это предполагает, что порядковый номер будет сохранен в ключе с именем sequence_number и будет увеличиваться на единицу каждый раз, когда вы оцениваете этот скрипт. Если sequence_number не существует, он будет создан, и его начальное значение будет равно 1.

Вы должны указать текущую дату и строку префикса при вызове EVAL. Кажется, вы не можете вызвать os.дата в скрипте Redis Lua.

Как обычно в сценариях Redis Lua, вы можете избежать систематической оценки сценария, используя EVALSHA для отправки SHA1 строки, представляющей сценарий Lua. Вы отправляете весь скрипт с использованием EVAL только при сбое EVALSHA (это означает, что скрипт не кэшируется в Redis).

Ответ №2:

Redis не может этого сделать сам по себе. Здесь есть два варианта решения проблемы:

  1. Сценарий Lua.
  2. Генератор на вашем прикладном уровне.