我想在我的应用程序中生成一个唯一的id。使用redis auto increment id可以吗?即使在集群中,它也是唯一的id吗?
z18hc3ub1#
redis可以基于incr命令生成id,但可能不是一个好的解决方案。由于redis不保证acid for update(incr),当redis重新启动故障转移时,它可能会失去一致性。rdb和aof都以异步方式进行持久化,数据可能会丢失。对于id生成器,它可能在重启(或在集群/sentinel中进行故障转移)后生成重复的id。在您的情况下,如果您不关心这个场景,或者您认为手动恢复是可以接受的,那么您可以使用redis作为生成器,因为它对于大多数情况来说足够快(与mysql或其他数据库相比)。或者还有一些有用的身份生成算法,如snowflake算法,可以保证全局增量,不存在重复。
q0qdq0h22#
是的,正如incr文件所述,这是一种原子操作,因此提供了这种保证
2条答案
按热度按时间z18hc3ub1#
redis可以基于incr命令生成id,但可能不是一个好的解决方案。
由于redis不保证acid for update(incr),当redis重新启动故障转移时,它可能会失去一致性。rdb和aof都以异步方式进行持久化,数据可能会丢失。对于id生成器,它可能在重启(或在集群/sentinel中进行故障转移)后生成重复的id。
在您的情况下,如果您不关心这个场景,或者您认为手动恢复是可以接受的,那么您可以使用redis作为生成器,因为它对于大多数情况来说足够快(与mysql或其他数据库相比)。
或者还有一些有用的身份生成算法,如snowflake算法,可以保证全局增量,不存在重复。
q0qdq0h22#
是的,正如incr文件所述,这是一种原子操作,因此提供了这种保证