使用 Redis 來生成分布式 ID,其實(shí)和利用 Mysql 自增 ID 類似,可以利用 Redis 中的 incr 命令來實(shí)現(xiàn)原子性的自增與返回,比如:
127.0.0.1:6379> set id 1 // 初始化自增 ID 為1
OK
127.0.0.1:6379> incr id // 增加1,并返回
(integer) 2
127.0.0.1:6379> incr id // 增加1,并返回
(integer) 3
使用 redis 的效率是非常高的,但是要考慮持久化的問題。Redis 支持 RDB 和 AOF 兩種持久化的方式。
RDB 持久化相當(dāng)于定時(shí)打一個(gè)快照進(jìn)行持久化,如果打完快照后,連續(xù)自增了幾次,還沒來得及做下一次快照持久化,這個(gè)時(shí)候 Redis 掛掉了,重啟 Redis 后會(huì)出現(xiàn) ID 重復(fù)。
AOF 持久化相當(dāng)于對(duì)每條寫命令進(jìn)行持久化,如果 Redis 掛掉了,不會(huì)出現(xiàn) ID 重復(fù)的現(xiàn)象,但是會(huì)由于 incr 命令過多,導(dǎo)致重啟恢復(fù)數(shù)據(jù)時(shí)間過長(zhǎng)。