1)数据库自动增长 auto increment
优点:
简单方便
数字id天然排序,对分页或结果需要排序很有帮助
缺点:
不同数据库语法和实现不同,数据库迁移的时候或多版本支持的时候需要处理
在单个数据库或读写分离或一主多从的情况下,只有一个主库可以生成,有单点故障的风险
比较难于扩展
分库分表比较麻烦
2) UUID 每次生成随机的唯一的值
优点:
简单方便
生成ID性能非常好,基本不会有性能问题
全球唯一,在数据迁移,系统数据合并或者数据库变更情况下,容易应对
缺点:
没有排序,无法保证递增趋势
使用字符串存储,查询的效率比较低
传输数据量大
3)redis实现
主要依赖redis是单线程的,所以也可以用于生成全局唯一的ID。INCR 和 INCRBY
优点:
不依赖数据库,灵活方便,且性能优于数据库
数据id天然排序
缺点:
如果系统中没有redis,还需要引入新的组件
需要编码和配置的工作量比较大
4) 雪花算法 snowflake (mybatis-plus默认策略)
一个long型的ID
优点:
不依赖于数据库,灵活方便,性能优于数据库
ID按照时间在单机上是递增的
缺点:
如果设计分布式环境,每台集器上的时钟不可能完全同步,有时候不能保证全局递增