#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 не может этого сделать сам по себе. Здесь есть два варианта решения проблемы:
- Сценарий Lua.
- Генератор на вашем прикладном уровне.