主键生成策略:uuid.自增id.雪花算法.redis.zookeeper
uuid
使用程序生成
优:
简单,方便
id生成性能好
缺:
无序,不能保证趋势递增
uuid往往使用字符串,查询效率较低
存储空间较大
自增
优:
简单,有序,可分页
缺:
数据库不同,在数据迁移的时候坑你出现问题
容易造成单点故障的风险
雪花算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0.可以保证几乎全球唯一
redis
当使用数据库来生成ID性能不够要求时,可以尝试使用Redis来生成ID,这主要依赖于Redis是单线程的,所以也可以使用生成全局唯一的ID。也可以使用Redis的INCR与INCRBY来实现 。
如果有3台Redis,可以把每台Redis的初始值设为1、2、3,步长设置为3