网站开发要加班吗,潍坊网站制作工具,广州注册公司新政策,中国常州网官网一、全局唯一ID
#xff08;一#xff09;在用户抢购时#xff0c;就会生成订单并保存到数据库中#xff0c;而订单表如果使用自增ID就会存在以下几种情况#xff1a;
自增ID规律性太强受单表数据量的限制
#xff08;二#xff09;全局ID生成器#xff0c;是一种在…一、全局唯一ID
一在用户抢购时就会生成订单并保存到数据库中而订单表如果使用自增ID就会存在以下几种情况
自增ID规律性太强受单表数据量的限制
二全局ID生成器是一种在分布式系统下用来生成全局唯一ID的工具一般要满足下列特性
唯一性高可用高性能递增性安全性
三全局唯一ID生成策略
UUIDRedis自增snowflake算法数据库自增
四Redis自增ID策略
每天一个key方便统计订单量ID构造是 时间戳 计数器
五使用Redis进行全局唯一ID生成采用HyperLog类型进行组合 64 位的全局ID
第一位为符号位表示永远为正数添加 31 bit 的时间戳添加 32 bit 的序列号
六使用Reids创建全局ID生成器
Component
public class RedisIdBuilder {private static final long BEGIN_TIMESTAMP 1687910400L;private static final int SERIAL_BITS 32;private StringRedisTemplate stringRedisTemplate;public RedisIdBuilder(StringRedisTemplate stringRedisTemplate){this.stringRedisTemplate stringRedisTemplate;}public long nextId(String keyPrefix){//1、生成时间戳LocalDateTime now LocalDateTime.now();long nowSecond now.toEpochSecond(ZoneOffset.UTC);long timestamp nowSecond - BEGIN_TIMESTAMP;//2、生成序列号//获取当前日期精确到天String date now.format(DateTimeFormatter.ofPattern(yyyy:MM:dd));//自增长序列号Long serial stringRedisTemplate.opsForValue().increment(icr: keyPrefix : date);//3、拼接并返回return timestamp SERIAL_BITS | serial;}
}