IT科技类资讯

Redis秒杀实现方案讲解

时间:2010-12-5 17:23:32  作者:IT科技   来源:IT科技类资讯  查看:  评论:0
内容摘要:一、全局唯一ID1)定义全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一半满足下列特性:唯一性 高可用 高性能 递增性 安全性

一、杀实全局唯一ID

(1)定义

全局ID生成器,现方是案讲一种在分布式系统下用来生成全局唯一ID的工具,一半满足下列特性:

Redis秒杀实现方案讲解

唯一性 高可用 高性能 递增性 安全性

为了增加ID的杀实安全性,我们不直接使用Redis自增的云南idc服务商现方数值,而是案讲拼接一些其他的信息。

Redis秒杀实现方案讲解

ID的杀实组成部分:

Redis秒杀实现方案讲解

符号位:1bit,永远为0 时间戳:31bit,高防服务器现方以秒为单位,案讲可以使用69年 序列号:32bit,杀实秒内计数器,现方支持每秒产生2ⁿ32个不同的案讲ID

(2)代码实现

@Component public class RedisIdWorker { /** * 开始时间戳 */ private static final long BEGIN_TIMESTAMP = 1640995200L; /** * 序列号的位数 */ private static final int COUNT_BITS = 32; @Autowired private 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; } }

源码下载
copyright © 2025 powered by 益强资讯全景  滇ICP备2023006006号-31sitemap