写在前面的话
一提到分布式ID自动生成方案,大家肯定都非常熟悉,并且立即能说出自家拿手的几种方案,确实,ID作为系统数据的重要标识,重要性不言而喻,而各种方案也是历经多代优化,请允许我用这个视角对分布式ID自动生成方案进行分类:
实现方式
- 完全依赖数据源方式
ID的生成规则,读取控制完全由数据源控制,常见的如数据库的自增长ID,序列号等,或Redis的INCR/INCRBY原子操作产生顺序号等。
2025年04月25日
一提到分布式ID自动生成方案,大家肯定都非常熟悉,并且立即能说出自家拿手的几种方案,确实,ID作为系统数据的重要标识,重要性不言而喻,而各种方案也是历经多代优化,请允许我用这个视角对分布式ID自动生成方案进行分类:
ID的生成规则,读取控制完全由数据源控制,常见的如数据库的自增长ID,序列号等,或Redis的INCR/INCRBY原子操作产生顺序号等。
2025年04月25日
公司最近开发了一个新项目,设计表时由于有些字段需要对外展示,所以使用了雪花算法生成的id做主键。
不过有位同事对此提出了异议,认为雪花算法生成的id不是顺序递增的,会对MySQL的性能造成影响。
经过交流,发现持有这种认知的还有好几位同事,估摸着对此有疑问的朋友也不少,所以今天我们来分析一下,
2025年04月25日
在 SpringBoot 中设计一个订单号生成系统,原理,架构与实战
首先,我得考虑订单号的基本要求。通常订单号需要唯一性,不能重复,否则会出大问题。然后可能还要有一定的可读性,比如包含日期、时间或者业务相关的信息。长度也不能太长,大概在15到20位之间比较合适吧。
2025年04月25日
但凡说起分布式系统,我们肯定会对一些海量级的业务进行分拆,比如:用户表,订单表。因为数据量巨大一张表完全无法支撑,就会对其进行分库分表。但是一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题,当我们使用mysql的自增长主键(auto_increment)时,充分感受到了它的好处:整个系统ID唯一,ID是数字类型,而且是趋势递增的,ID简短,查询效率快,在分布式系统中显然由于单点问题无法使用mysql自增长了,此时需要别的解决方案来支撑分布式业务。
2025年04月25日
分布式ID,在我们日常的开发中,其实使用的挺多的。
有很多业务场景在用,比如:
2025年04月25日
一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给予太多的关注。
2025年04月25日
"又双叒叕是缓存击穿?" "Redis不就是个缓存吗?" "为啥这个功能还要用Redis实现?"
如果你的团队里还有人这么想,那这篇文章就是为他们准备的!Redis不仅仅是一个缓存工具,它简直就是一把瑞士军刀,能解决你想象不到的各种问题。
2025年04月25日
生成唯一订单号是在设计系统时候经常会遇到的一个问题,生成唯一订单号的方法有很多,为了适应不同的场景和性能,选择的方法也会不一样,有些复杂的系统会有多套这种唯一编码生成方式。
利用数据库自增序列,比如新建一张表,专门插入数据,获取新增记录的主键值,为了订单号的可读性,可以由