snowflake
2026/7/28 17:20:36 网站建设 项目流程

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是个好类库。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询