关于分布式下如何保证ID全局唯一性的读书笔记

本文介绍了三种分布式ID生成方案:UUID、Snowflake雪花算法及Redis自增。每种方案都有其独特之处,例如UUID保证了全局唯一性但无序且查询效率低;Snowflake算法虽依赖时间同步但仍能提供趋势递增的ID;Redis则通过自增实现了高性能的ID生成。

分布式ID的全局唯一性

要求:

1.全局唯一性:不能出现重复的id号(基本的要求)

2.信息安全:防止恶意的用户规矩id的规则来获取数据

3.数据递增:保证下一个id一定大于上一个id

 

解决方案:

1.UUID:通用唯一识别码 16个字节128位的长数字

组成部分:当前日期和时间序列+全局唯一性网卡mac地址

代码:

UUID.randomUUID()

如:35dd3497-dfe0-40fb-9cb2-b9624bad15a0

总结:

优点:代码实现简单、不占用宽带、数据迁移不受影响

缺点:无序、无法保证趋势递增、字符存储、传输、查询慢、不可读

 

2.Snowflake雪花算法:国外的twitter分布式id生成算法

组成部分:高位随机+毫秒数+机器码(数据中心+机器id)+10位的流水号

1+41+10+10=62

代码:百度or google

总结:

优点:代码实现简单、不占用宽带、数据迁移不受影响、地位趋势递增

缺点:强依赖时钟(多台服务器时间一定要一样,可统一用数据库时间)、无序无法保证趋势递增

 

3.redis:

组成部分:年份+当前这天属于这一年的第几天+小时+redis自增

2+3+2+5=12

代码:使用redis的incr步长方法实现自增

总结:

优点:不依赖数据、灵活方便、性能优于数据库的、无单点故障

缺点:占用网络资源、性能比本地生成慢

转载于:https://my.oschina.net/u/2460728/blog/1548113

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值