https://blog.csdn.net/wind_2307154495/article/details/78739498
1.ID生成中心每次从Redis(使用incr命令)中获取一定范围的递增ID区间(该区间范围相对大一些,eg:10000),并同步缓存至L1、L2(避免大量ID区间丢失)。
2.当该应用的该IDKey的ID区间使用率超过一定阈值(eg:>50%)时,ID生成中心自动从Redis(使用incr命令)中获取下一个递增ID区间,缓存至L1、L2,减少消费耗时。
3.当ID生成中心宕机,再次启动时,会优先同步L2中的ID区间至L1中,如果没有再从Redis中通过incr获取,已达到节约ID的目的。
4.这里L1、L2的ID数据同步是异步进行的。
5.ID生成客户端的基本设计思路也是差不多一样的。只不过这是获取的ID区间相对ID生成中心从Redis获取的ID区间会小很多,这里尽量保证俩者区间段有一个相当大的比例区间。对于获取的ID区间具体大小,可以根据个人的需求取舍。
扩展:生成全局唯一ID/数据库主键ID的方法
a)数据库自增长:性能较差
b)取到毫秒+随机数:还有会存在高并发问题
c)UUID:
d)批量ID生成服务:使用vip+keepalived可增加性能可用性。redis方案属于这样,中小型项目可以使用些方案。
e)类snowflake算法,分布式项目中常用方法