Java分布式ID实现
文章平均质量分 64
本专栏主要介绍互联网常用的实现分布式ID的方法,希望你读完这个,对这个不在有困惑。也欢迎大家多多交流
m0_37577103
这个作者很懒,什么都没留下…
展开
-
Java分布式ID-UUID
4.2. 既然分布式id是主键,然后主键是包含索引的,然后mysql的索引是B+树实现,每次插入UUID都得进行索引的优化,对B+树非常不友好。2.1当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。4.1. 首先分布式id一般都会是主键,但是安装mysql官方推荐越短越好,UUID每一个都很长,所以不推荐。2.3全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。优点:简单,代码方便;原创 2023-04-04 11:56:33 · 205 阅读 · 0 评论 -
Java分布式ID-Redis实现ID
首先我们需要明确的结论:Redis实现ID可以用,这也是很多公司的选择。但是在redis服务器宕机的情况下,他也可能会出现重复生成ID的情况。缺点:数据库作为一个缓存,很有可能出现宕机的情况,即使redis有持久化机制,但是可能存在丢失1s的情况,那么这种极端场景下可能出现重复生成ID的情况。1、那么按照我们的思路来说:很简单,对应的key和value, key:业务类型 value:自增加数值。1.1 缺点:订单的value会随着订单的增多一直网上增加,迟早有一天会突破redis数值的极限。原创 2023-04-06 20:33:52 · 168 阅读 · 0 评论 -
Java分布式ID-主键自增ID
此时单库满足不了,分表也不能满足你的用户并发量操作(单库数据库连接会成为并发的瓶颈,此时可以进行分库,也可以实现读写分离,咱们这讨论分库的情况),那么此时你需要进行分库。针对2.2其实应用并发量比较大的情况,如果多台服务器都是用的同一个库调用的主键(order_primary_key)表生成的id生成。可以这样说,对于我们来做的绝大部分系统都达不到需要分库分表的程度,基本上用的都是单表。主键表专门存储主键。orderId的主键为 1,3,5,7,9。orderId的主键为 2,4,6,8,10。原创 2023-04-04 17:04:51 · 1036 阅读 · 0 评论 -
Java分布式ID-雪花算法
还是那句话,没有完美的解决方案,我们不能因噎废食。2、那么通过上面结构的介绍,我们可以用代码实现,主要看getNextId方法,一定要先看上面的思路,搞懂整个分布式ID串的结构,然后再看代码,这一样更容易理解。5.3 如果直接大约10毫秒了,或者很大,那怎么办,按照我的意思是直接抛出异常,直接报警发送邮件,然后运维手动处理服务器时间,然后重新启动服务就行了。5.2 如果大于1秒小于10毫秒了,那么我们可以把最最近的10毫秒,存储在内存的map存最近10毫秒的最大值,然后这个上面直接增加。原创 2023-04-07 11:09:47 · 291 阅读 · 0 评论