使用Redis生成全局唯一ID/分布式唯一ID

news/2025/2/19 13:40:58/

        全局唯一ID在开发中的应用很多,特别是在生成一些诸如订单编号,对ID的唯一性,安全性,高可用性,生成的高效性有严格的要求。

        通常我们习惯使用数据库的自增字段来作为ID,但是,这种方式生成的ID规律性强,安全性较低,容易被人猜测出来。并且在数据很多的时候,往往需要对数据库进行分库分表操作,这种ID生成方式加大了分库分表的复杂度,因此生成一些要求安全性高,唯一性高的ID时,不采用数据库自动生成的方式。

        这里使用Redis来生成一个全局的唯一ID,这种生成方式也可以用于分布式系统。

代码:

@Component
public class RedisIDWorker {@Autowiredprivate StringRedisTemplate stringRedisTemplate;//序列号位数private static final int COUNT_BITS = 32;//开始时间戳private static final long BEGIN_TIMESTAMP = 1640995200L;public long nextId(String keyPrefix) {//1.生成时间戳[时间]LocalDateTime now = LocalDateTime.now();long nowSecond = now.toEpochSecond(ZoneOffset.UTC);long timestamp = nowSecond - BEGIN_TIMESTAMP;//2.生成序列号 [icr:前缀:年份:月:日]//2.1 获取当前日期 yyyy:MM:ddString day = now.format(DateTimeFormatter.ofPattern("yyy:MM:dd"));long count = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + ":" + day);//3.拼接返回[时间:icr:前缀:年份:月:日]return timestamp << COUNT_BITS | count;}
}


http://www.ppmy.cn/news/1572400.html

相关文章

C++学习 mac上VScode运行C++

一 运行hello world 1 安装C/CRunner包 2 写代码 这个命令用于将 C 源代码文件 main.cpp 编译成一个可执行文件&#xff0c;文件名为 main。具体说明如下&#xff1a; g&#xff1a;这是 GNU C 编译器。 main.cpp&#xff1a;这是包含 C 代码的源文件。 -o main&#xff1a…

Oracle 随机数0-100000

Oracle 随机数0-100000 在Oracle数据库中生成一个随机数&#xff08;例如&#xff0c;0到100000之间的随机数&#xff09;&#xff0c;你可以使用DBMS_RANDOM包中的VALUE函数。DBMS_RANDOM.VALUE函数允许你指定随机数的范围。 方法1&#xff1a;使用DBMS_RANDOM.VALUE SELEC…

wps配置deepseek

wps 配置deepseek https://e6jy62bip4.feishu.cn/docx/R09IdpU5HoADyDxcgfQcjpR8nnb

STM32F407通过FSMC扩展外部SRAM和NAND FLASH

1 扩展外部SRAM 1.1 地址情况 FSMC控制器的存储区分为4个区(Bank)&#xff0c;每个区256MB。其中&#xff0c;Bank1可以用于连接SRAM、NOR FLASH、PSRAM&#xff0c;还可以连接TFT LCD。Bank1的地址范围是0x60000000&#xff5e;0x6FFFFFFF。Bank1又分为4个子区&#xff0c;每…

本地事务简介

本地事务简介 1 事务基本性质 数据库事务的几个特性&#xff1a;原子性(Automicity)、一致性(Consistency)、隔离性或独立性(islation)和持久性(Durability)&#xff0c;简称ACID。 原子性&#xff1a;一系列的操作&#xff0c;其整体不可拆分&#xff0c;要么同时成功&#…

【一文读懂】HTTP与Websocket协议

HTTP协议 概述 HTTP (Hypertext Transfer Protocol)&#xff0c;即超文本传输协议&#xff0c;是一种用于在客户端和服务器之间传输超文本&#xff08;例如网页、图片、音频、视频等&#xff09;的通信协议。它是万维网&#xff08;WWW&#xff09;的基础&#xff0c;负责在浏…

DeepSeek官方发布R1模型推荐设置

今年以来&#xff0c;DeepSeek便在AI领域独占鳌头&#xff0c;热度一骑绝尘。其官方App更是创造了惊人纪录&#xff0c;成为史上最快突破3000万日活的应用&#xff0c;这一成绩无疑彰显了它在大众中的超高人气与强大吸引力。一时间&#xff0c;各大AI及云服务厂商纷纷投身其中&…

Node.js 中的 Event 模块详解

Node.js 中的 Event 模块是实现事件驱动编程的核心模块。它基于观察者模式&#xff0c;允许对象&#xff08;称为“事件发射器”&#xff09;发布事件&#xff0c;而其他对象&#xff08;称为“事件监听器”&#xff09;可以订阅并响应这些事件。这种模式非常适合处理异步操作和…