昆山网站设计公司,线上网络平台推广,在线设计平台推荐,广西南宁网站策划问题#xff1a;订单id不能设置为自增长的原因
id的规律性太明显#xff0c;
受订单的数据量限制:若数据量过大#xff0c;需要多张表存储#xff0c;若自增会导致id重复
全局ID生成器#xff1a;在分布式系统中用来生成全局唯一ID的工具
ID的组成#xff1a;
符号位…问题订单id不能设置为自增长的原因
id的规律性太明显
受订单的数据量限制:若数据量过大需要多张表存储若自增会导致id重复
全局ID生成器在分布式系统中用来生成全局唯一ID的工具
ID的组成
符号位1bit 默认为0
时间戳 31bit 以秒为单位可以使用约69年
序列号32bit秒内的计数量
Component
public class RedisIdWorker {Resourceprivate StringRedisTemplate stringRedisTemplate;//redis全局ID生成器策略/**开始时间戳*/private static final long BEGIN_TIMESTAMP1704067200L;/**序列号位数*/private static final int COUNT_BITS32;public long nextId(String keyPrefix) {//1.生成时间戳LocalDateTime now LocalDateTime.now();long nowSecond now.toEpochSecond(ZoneOffset.UTC);long timestamp nowSecond - BEGIN_TIMESTAMP;//2.生成序列号,使用redis的自增//2.1.获取当天日期,redis的key中使用“:”,分层级String date now.format(DateTimeFormatter.ofPattern(yyyy:MM:dd));long count stringRedisTemplate.opsForValue().increment(icr: keyPrefix : date);//3.组装返回使用位运算return (timestamp COUNT_BITS) | count;}
}