Можно ли использовать идентификатор автоматического увеличения Redis в качестве уникального ключа?

#redis

#redis

Вопрос:

Я хочу сгенерировать уникальный идентификатор в своем приложении . Можно ли использовать идентификатор автоматического увеличения redis для этой цели ? Будет ли это уникальный идентификатор, даже если он находится в кластере?

Ответ №1:

да, как указано в документации INCR, это атомарная операция и, таким образом, обеспечивает эту гарантию

Ответ №2:

Redis может генерировать идентификатор на основе команды INCR, но это может быть не очень хорошим решением.

Поскольку Redis не гарантирует ACID для обновления (INCR), он может потерять его согласованность при повторном запуске Redis при отказоустойчивости. Как RDB, так и AOF выполняют сохранение асинхронным способом, и данные могут быть потеряны. Для генератора идентификаторов он может генерировать дубликаты идентификаторов после перезапуска (или отработки отказа в кластере / Sentinel.

В вашем случае, если вам не нравится этот сценарий или вы считаете, что ручное восстановление приемлемо, вы можете использовать Redis в качестве генератора, поскольку это достаточно быстро для большинства случаев (сравните с MySQL или другой базой данных).

Или есть еще какой-то полезный алгоритм генерации идентификатора, такой как SnowFlake, который гарантирует глобальное увеличение и отсутствие дубликатов.