商交易系统高并发分布式订单号生成策略redis
1、要求:算法
1.全局惟一性,不能重复数据库
2.信息安全加密防止用户根据id规则获取数据安全
3.数据递增,保证下一个id必定大于上一个id网络
二,策略并发
1.UUID 惟一识别码,16个字节 (128位)分布式
组成部分:当前日期+时间+时钟的序列+mac地址 高并发
uuid 有几个实现版本,好比jdk 自带的uuid性能
优势:生成简单,不占用宽带,本地生成,数据迁移不影响。优化
缺点:字母存储,无序,没法保证趋势递增,查询慢,不可读
2.snowflake(雪花twitter开源 分布式id算法)
41字节毫秒+10字节的机器id+10版本号,国内有不少平台有将其实现和优化
优势:本地生成,不占宽带,毫秒在高位,低位是趋势递增。
缺点:依赖时钟 若是时间回拨可能会重复,效率比uuid慢
3. 数据库
优势:代码实现简单,性能ok,数字排序,可读性强
缺点:受限于数据库,单点故障,扩容麻烦,须要插入后才能获取id增长查询数据库主从延迟master才能查到
4.redis 集群
格式:12位=年2位+当年第几天3+小时2+自增5
优势:不依赖数据库,灵活,没有单点故障,性能优于数据库
缺点:网络资源,须要增长额外服务插件
总结:
uuid | Token ,图片id等 | ※※ |
snowflake | Elk,mq,业务系统 | ※※※※ |
数据库 | 并发不大,业务增加不快 | ※※※ |
redis | 业务系统 | ※※※※※ |