当前位置: 首页 > news >正文

redis:全局ID生成器实现

问题:订单id不能设置为自增长的原因

id的规律性太明显,

受订单的数据量限制:若数据量过大,需要多张表存储,若自增会导致id重复

全局ID生成器:在分布式系统中用来生成全局唯一ID的工具

ID的组成:

符号位:1bit ,默认为0

时间戳: 31bit 以秒为单位,可以使用约69年

序列号:32bit,秒内的计数量,

@Component
public class RedisIdWorker {@Resourceprivate StringRedisTemplate stringRedisTemplate;//redis全局ID生成器策略/**开始时间戳*/private static final long BEGIN_TIMESTAMP=1704067200L;/**序列号位数*/private static final int COUNT_BITS=32;public long nextId(String keyPrefix) {//1.生成时间戳LocalDateTime now = LocalDateTime.now();long nowSecond = now.toEpochSecond(ZoneOffset.UTC);long timestamp = nowSecond - BEGIN_TIMESTAMP;//2.生成序列号,使用redis的自增//2.1.获取当天日期,redis的key中使用“:”,分层级String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));long count = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + ":" + date);//3.组装返回,使用位运算return (timestamp << COUNT_BITS) | count;}
}

            

相关文章:

redis:全局ID生成器实现

问题&#xff1a;订单id不能设置为自增长的原因 id的规律性太明显&#xff0c; 受订单的数据量限制:若数据量过大&#xff0c;需要多张表存储&#xff0c;若自增会导致id重复 全局ID生成器&#xff1a;在分布式系统中用来生成全局唯一ID的工具 ID的组成&#xff1a; 符号位…...

jenkins工具的介绍和gitlab安装

使用方式 替代手动&#xff0c;自动化拉取、集成、构建、测试&#xff1b;是CI/CD持续集成、持续部署主流开发模式中重要工具&#xff1b;必须组件 jenkins-gitlab&#xff0c;代码公共仓库服务器&#xff08;至少6G内存&#xff09;&#xff1b;jenkins-server&#xff0c;需…...

【从0开始在CentOS 9中安装Tomcat】

从0开始在CentOS 9中安装Tomcat 1. 安装 Java&#xff08;Tomcat 需要 Java 环境&#xff09;2. 下载并安装 Tomcat3. 配置 Tomcat4. 启动 Tomcat5. 配置 Tomcat 为开机自启动6. 验证 Tomcat 运行状态7. 允许防火墙开放 8080 端口&#xff08;可选&#xff09; 要在 Linux 上安…...

学习Vue3的第五天

目录 API对比 shallowRef 与 shallowReactive 对比总结 使用场景 总结 readonly 与 shallowReadonly 对比总结 使用场景 总结 toRaw 与 markRaw 对比总结 使用场景 总结 customRef 应用场景 总结 示例&#xff1a;异步数据获取 Vue3新组件 Teleport Suspen…...

Python 类中使用 cursor.execute() 时语法错误的解决方法

在 Python 类中使用 cursor.execute() 时&#xff0c;出现语法错误&#xff08;如 SyntaxError 或 SQL 语法相关错误&#xff09;通常是因为 SQL 语句格式不正确、占位符使用不当&#xff0c;或参数传递方式不符合预期。以下是解决此类问题的常见方法和建议。 问题背景 在 Pyt…...

怎么选择靠谱AI论文生成工具?看完我的试用都会明白!

2024年上半年开始AI论文写作工具开始火了&#xff0c;层出不穷&#xff01;作为一个经常需要写论文的懒人&#xff0c;我非常好奇这些AI工具的实际效果到底怎么样&#xff1f;为了测试不同工具的实力&#xff0c;我对他们都进行了试用&#xff0c;发现了一些意想不到的结果....…...

Java 每日一刊(第3期):Hello World

文章目录 前言Hello World程序是如何执行的Hello World 里有什么本期小知识 阳光洒进窗台&#xff0c;花香伴着书香&#xff0c;静谧而温暖&#xff0c;仿佛时光停驻。 前言 这里是分享 Java 相关内容的专刊&#xff0c;每日一更。 本期将为大家带来以下内容&#xff1a; “…...

git一个项目关联多个远程仓库

一行代码就行&#xff1a; git remote set-url origin [想要关联的远程仓库地址]想要关联哪个就切换哪个 或者不用每次切换&#xff0c;集中管理&#xff1a; Git->Manage Remotes 点击“”&#xff0c;填入Name和想要关联的远程库地址 每次push时执行命令 git push [为…...

衡石分析平台使用手册-部署前准备

部署前准备​ 1.根据版本获取 k8s 部署配置文件。 安装版本部署文件组件依赖3.xk8s-yamlmetadb、engine、hengshi zookeeper4.0.xk8s-yamlmetadb、engine、hengshi、minio、zookeeper4.1.xk8s-yamlmetadb、engine、hengshi、minio、redis、flink、zookeeper4.2.xk8s-yamlmeta…...

AI大模型全栈工程师课程笔记 - RAG 检索增强生成

文章目录 \1. RAG\2. 构建流程 2.1 文档加载与切分2.2 传统检索引擎2.3 LLM接口封装2.4 构建prompt \3. 向量检索\4. 向量数据库\5. 基于向量检索的RAG\6. 进阶知识 6.1 文本分割粒度6.2 检索后再排序6.3 测试 1. RAG RAG&#xff08;Retrieval Augmented Generation&#…...

【时时三省】c语言例题----华为机试题<进制转换>

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 1&#xff0c;题目 HJ5 进制转换 描述 写出一个程序&#xff0c;接受一个十六进制的数&#xff0c;输出该数值的十进制表示。 数据范围&#xff1a;保证结果在 1≤n≤231−1 1≤n≤231−1…...

根据NVeloDocx Word模板引擎生成Word(四)

前面介绍了《E6低代码开发平台》的Word模版引擎NVeloDocx&#xff0c;实现了表单的基本字段、子表、单张图片、二维码、条形码怎么基于NVelocity脚本输出到Word文件&#xff0c;都是些比较简单且常用的需求。 本篇介绍怎么基于NVeloDocx在Word中插入图表&#xff0c;目前只支持…...

C++笔记---stack和queue

1. stack的介绍及重要接口 stack---栈&#xff0c;是一种“先进后出&#xff0c;后进先出”的数据结构。 此处的stack是STL库中定义的一个类模板&#xff0c;用于实例化出存储各种类型数据的栈。 bool empty() const;判断栈是否为空(空true/非空false)size_t size() const;返…...

springboot Rabbit MQ topic 配置文件绑定队列和交换机

Spring Boot 中如何将队列和交换机绑定&#xff08;含实例讲解&#xff09; 在使用 Spring Boot 开发高并发的秒杀系统或者其他场景时&#xff0c;RabbitMQ 是常用的消息队列中间件之一。本文将详细讲解如何在配置类中通过代码将队列与交换机绑定&#xff0c;并指定路由键来实…...

Visual Studio 2019密钥

Visual Studio 2019 Enterprise&#xff08;企业版&#xff09;&#xff1a;BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Professional&#xff08;专业版&#xff09;&#xff1a;NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y...

【三元组枚举中点】【树状数组】个人练习-Leetcode-1395. Count Number of Teams

题目链接&#xff1a;https://leetcode.cn/problems/count-number-of-teams/description/ 题目大意&#xff1a;给一个数组rating[]&#xff0c;求符合以下任一条件的三元组i, j, k的个数 rating[i] < rating[j] < rating[k]rating[i] > rating[j] > rating[k] …...

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题&#xff0c;查了很多资料都大&#xff08;抄&#xff09;同&#xff08;来&#xff09;小&#xff08;抄&#xff09;异&#xff08;去&#xff09;的&#xff0c;解决不了根本问题&#xff0c;费了很大的劲终于得以解决&#xff0c;记录如…...

数据库系统 第51节 数据库事务管理

数据库事务管理是数据库管理系统&#xff08;DBMS&#xff09;中用于确保数据完整性和一致性的一组机制。事务是一组不可分割的操作序列&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。以下是数据库事务管理的关键组成部分的详细叙述&#xff1a; 1. 事务隔离级别…...

分解+优化+组合+对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测

分解优化组合对比&#xff01;核心无忧&#xff01;VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测 目录 分解优化组合对比&#xff01;核心无忧&#xff01;VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.…...

二十三种设计模式之建造者模式(类比汽车制造厂好理解一些)

目录 1. 设计模式的分类 2. 定义 3. 建造者模式通常包含以下几个角色 4. 示例代码 5. 建造者模式的主要优点 1. 设计模式的分类 创建型模式(五种)&#xff1a;工厂方法模式、单例模式、抽象工厂模式、原型模式、建造者模式。 结构型模式(七种)&#xff1a;适配器模式、代…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...