该资源内容由用户上传如若侵權请选择举报
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗
谢谢参与!您的真实评价是我们改进的动力~
UUID是一个字符串而且没有顺序所鉯不适合做主键,可以 做 token 使用
利用全球唯一UUID生成订单号 UUID基本概念: UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的
UUID组成部分:当前日期和时间+时钟序列+随机数+全局唯一的IEEE机器识别号 全局唯一的IEEE机器识别号:如果有网卡,从网卡MAC地址获得没有网卡鉯其他方式获得。
优点: 简单代码方便 生成ID性能非常好,基本不会有性能问题 全球唯一在遇见数据迁移,系统数据合并或者数据库变哽等情况下,可以从容应对
缺点: 没有排序无法保证趋势递增 UUID往往是使用字符串存储,查询的效率比较低 存储空间比较大如果是海量数據库,就需要考虑存储量的问题 传输数据量大
一般UUID在生成Token领域使用比较多
如果使用数据库id自增生成订單号的话,如果数据库是集群的话 则有可能生成相同的订单号
所以如果我们使用数据库id 自增做为全局 id 的话我们需要设置步长,步长表示烸次自动增长的数量
设置mysql1数据库id初始值为0,mysql数据库id初始值为1mysql3数据库id初始值为2。我们这时候需要设置步长为3
这就是最后产生自增的结果,但是这种方法还有一个缺点就是如果后期增加数据库服务器集群数量的话,mysql 步长无法扩展所以使用这种方法生成全局id,需要前期確定好mysql数据库集群的数量不然那到后期扩展集群数量会导致生成步长规则发生改变,可能会产生重复的id
在数据库集群环境下,默认自增方式存在问题因为都是从1开始自增,可能会存在重复应该设置每台节点自增步长不同。
因为Redis是单线的天生保证原子性,可以使用Redis嘚原子操作 INCR和INCRBY来实现
优点: 不依赖于数据库灵活方便,且性能优于数据库 数字ID天然排序,对分页或者需要排序的结果很有帮助
缺点: 如果系统中没有Redis,还需要引入新的组件增加系统复杂度。 需要编码和配置的工作量比较大
注意:在Redis集群情况下,同样和Redis一样需要设置不同嘚增长步长同时key一定要设置有效期 可以使用Redis集群来获取更高的吞吐量。
假如一个集群中有5台Redis可以初始化每台Redis的值分别是1,2,3,4,5,然后步长都昰5
比较适合使用Redis来生成每天从0开始的流水号。
比如订单号=日期+当日自增长号可以每天在Redis中生成一个Key,使用INCR进行累加 如果生成的订单號超过自增增长的话,可以采用前缀+自增+并且设置有效期
使用 redis 实现全局id生成,使用自动填充的方法实现
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。