Redis秒杀实现方案讲解

发布时间:2025-05-17 02:47:48 作者:益华网络 来源:undefined 浏览量(1) 点赞(1)
摘要:一、全局唯一ID (1)定义 全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一半满足下列特性: 唯一性 高可用 高性能 递增性 安全性 为了增加ID的安全性,我们

一、全局唯一ID

(1)定义

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

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

为了增加ID的安全性,我们不直接使用Redis自增的数值,而是拼接一些其他的信息。

ID的组成部分:

符号位: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; } }

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!