1)数据库自动增长 auto increment

  优点:

    简单方便

    数字id天然排序,对分页或结果需要排序很有帮助

  缺点:

    不同数据库语法和实现不同,数据库迁移的时候或多版本支持的时候需要处理

    在单个数据库或读写分离或一主多从的情况下,只有一个主库可以生成,有单点故障的风险

    比较难于扩展

    分库分表比较麻烦

 

2) UUID  每次生成随机的唯一的值

  优点:

    简单方便

    生成ID性能非常好,基本不会有性能问题

    全球唯一,在数据迁移,系统数据合并或者数据库变更情况下,容易应对

  缺点:

    没有排序,无法保证递增趋势

    使用字符串存储,查询的效率比较低

    传输数据量大

 

3)redis实现

  主要依赖redis是单线程的,所以也可以用于生成全局唯一的ID。INCR 和 INCRBY

  优点:

    不依赖数据库,灵活方便,且性能优于数据库

    数据id天然排序

  缺点:

    如果系统中没有redis,还需要引入新的组件

    需要编码和配置的工作量比较大

 

4) 雪花算法 snowflake (mybatis-plus默认策略)

  一个long型的ID

  优点:

    不依赖于数据库,灵活方便,性能优于数据库

    ID按照时间在单机上是递增的

  缺点:

    如果设计分布式环境,每台集器上的时钟不可能完全同步,有时候不能保证全局递增