当前位置: 首页 > 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;适配器模式、代…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...