snowflake

id生成的方法有很多:

      1、微软的uuid,uuid使用机器网卡和时间戳,数据过长,不利于保存和操作。

      2、twitter 的snowflake。

      3、数据库自增id,也可以保证唯一性,但是并发太大扛不住。

      4、通数据库差不多的redis,自增命令,天然支持高并发。

 

snowflake的格式为:1位保留位置,41位时间戳,10位机器序列号,12位序列号。

1、问:机器偶尔会有时间小于当前时间的情况,此时需要回拨,如果要保证id递增的情况,该怎么设计?比如调后了x s。

     曰:1、禁用生成id的接口。不行,这个要改代码。

            2、停服务。先停服务,再调时间,等待x s之后重启服务。这个代价太大。

            3、时间使用第三方,如zk时间。这个可以,不可能所有的机器都时间滞后。如果真有发生,那就凉凉了。

            4、使用一个字段记录上一次的时间。如果新的时间小于上一次时间,就不生成id。

            5、项目启动的时候,查询一次数据库,获得已有的最大id,写入4的字段。防止机器重启缓存为null。

 

2、布隆过滤器

      guava中就有现成的可以拿来用。不得不说,guava是个好类库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值