实施网站推广的最终目的,广东卫视新闻联播,大连自己的网站,dedecms的网站如何添加个引导页全局唯一ID
如果使用数据库自增ID就存在一些问题#xff1a;
id的规律性太明显受表数据量的限制
全局ID生成器#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具#xff0c;一般要满足下列特性#xff1a;
唯一性高可用递增性安全性高性能
为了增加ID的安全性…全局唯一ID
如果使用数据库自增ID就存在一些问题
id的规律性太明显受表数据量的限制
全局ID生成器是一种在分布式系统下用来生成全局唯一ID的工具一般要满足下列特性
唯一性高可用递增性安全性高性能
为了增加ID的安全性我们可以不直接使用Redis自增的数值而是拼接一些其它信息 ID的组成部分
符号位1bit永远为0
时间戳31bit以秒为单位可以使用69年
序列号32bit秒内的计数器支持每秒产生2^32个不同ID
Redis实现全局唯一ID
Component
public class RedisIdWorker {/*** 开始时间戳*/private static final long BEGIN_TIMESTAMP 1640995200L;/*** 序列号的位数*/private static final int COUNT_BITS 32;private StringRedisTemplate stringRedisTemplate;public RedisIdWorker(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.生成序列号// 2.1.获取当前日期精确到天方便统计每天的数据量String date now.format(DateTimeFormatter.ofPattern(yyyy:MM:dd));// 2.2.自增长long count stringRedisTemplate.opsForValue().increment(icr: keyPrefix : date);// 3.拼接并返回return timestamp COUNT_BITS | count;}
}