Я начинаю использовать Redis и столкнулся со следующей проблемой.
У меня есть группа объектов, скажем, Messages
в моей системе.Каждый раз, когда подключается новый User
, я делаю следующее:
INCR
некоторую глобальную переменную, скажем g_message_id
, и сохраняю возвращаемое значение INCR (текущее значение g_message_id
).
LPUSH
новое сообщение (включая id
и фактическое сообщение) в список.
Другие клиенты используют значениеиз g_message_id
, чтобы проверить, есть ли новые сообщения для получения.
Проблема в том, что один клиент может INCR
g_message_id
, но не успеть LPUSH
сообщение, прежде чем другой клиент попытается его прочитать, предполагая, что есть новое сообщение.
Другими словами, я ищу способ сделать эквивалент добавления строк в SQL и иметь автоматически увеличиваемый индекс для работы.
Примечания :
Я не могу использовать индексы списка, так как мне часто приходится удалять части списка, делая его недействительным.
Моя ситуация в действительности немного сложнее, это более простая версия.
Текущее решение :
Лучшее решение, которое я придумал, и что я планирую сделать, это использовать WATCH
и Transactions
, чтобы попытаться выполнитьСам "autoincrement".
Но это такой распространенный вариант использования в Redis, что я удивлен, что не существует ответа на него, поэтому я волнуюсь, что делаю что-то не так.