1、uuid
优点:代码简单 迁移容易
缺点: 无法保证递增。字符串存储,查询效率慢。存储空间大
2、mysql主键自增
优点:数字化id递增;查询效率高;
缺点:存在单点问题。数据库压力大
3、mysql多实例主键自增
![](https://img.haomeiwen.com/i2605231/6136ebaac3e1c698.png)
优点:解决单点问题;
缺点:扩容不好扩;
4、雪花算法
雪花算法生成64位二进制正整数,然后转为整数
![](https://img.haomeiwen.com/i2605231/7eaf26a98345986b.png)
1位标识符:始终是0
41位时间戳:41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截 )得到的值,这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的
10位机器标识码:可以部署在1024个节点,如果机器分机房(IDC)部署,这10位可以由 5位机房ID + 5位机器ID 组成
12位序列:毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
优点:自增;灵活度高;性能好;
缺点:依赖服务器时间,时间回调会导致重复生成id
5、redis生成
利用redis原子自增,一般算法:年+天+小时+redis自增
有点:可读;自增;
缺点:占用redis带宽
网友评论