分布式主键生成策略

1、中心化的

  1. select ··· for update 悲观锁。可以锁定一个变量,每次查询它后让它+1,这样,所有的服务都查这个表。
  2. 搞一个全局的表让id自增,利用insert的id回显来拿到一个全局唯一的id。
  3. 在redis上使用一个变量,利用分布式锁,让这个变量每一次使用都自增1,来获得全局唯一id。

上述办法并发性太差。

2、去中心化的

  1. 生成一个uuid,但是uuid跨硬件有可能重复。使用机房id+机器id+uuid,就可以保证全局唯一了。不过uuid占用的空间大,也不能确保递增,创建索引时会影响性能。
  2. 雪花算法:用一个long类型来表示这个id,64位
    1. 第一部分:一个0,仅表达雪花算法为正数
    2. 第二部分:一个41位的时间戳。(精度是毫秒)
    3. 第三部分:5位的机房id
    4. 第四部分:5位的机器id
    5. 第五部分:一个12位的序列号
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值