UidGenerator由百度基于Snowflake算法的唯一ID生成器的Java实现。但是和Snowflake算法又有所区别:
Snowflake算法是固定的。
Tips: 每次启动都会往WORKER_NODE表中插入数据
在百度UidGenerator的实现细节原理可以查看文档:https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md。
Tips: 在这个实现里面降到了一个FalseSharing问题(为共享),这个有兴趣的可以去网上查询相关的资料。后续有时间补上这一块的知识,我也是第一次遇到这个知识点。
clone代码:
执行脚本:
从代码中scripts/WORKER_NODE.sql 获取脚本
上述脚本增加 CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
配置mysql.properties文件:
mysql.properties在test的目录下面,只需要配置和数据库相关的即可
运行UnitTest:
执行CachedUidGeneratorTest测试类:
数据库里面的数据:
Tips: 每次启动都往数据库插入数据,这里个人觉得可以优化。
百度UidGenerator是雪花算法另外一种实现,相比雪花算法固定了每个段的长度。这里设计成可调整的给使用者提供更加灵活。同时接入数据库的自增来实现Worker Id的设置(这里也可以自行拓展)。但是这个也有一个不足就是你不停的重启服务数据库表WORKER_NODE中的数据会越来越多。UidGenerator做成一个jar包集成到本地服务。
我是蚂蚁背大象,文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢
参考资料: