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

Redis实现全局ID生成器

全局ID生成器

为什么要用全局ID生成器

1.当我们使用数据库自增来实现id的生成时,规律过于明显,会给用户暴露很多信息

2.当我们订单量过大时无法用数据库的一张表来存放订单,如果两张表的id都是自增的话,id就会出现重复

什么是全局ID生成器

全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般满足以下条件:

在这里插入图片描述

利用Redis来实现全局ID生成器

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

在这里插入图片描述

ID的组成部分:

符号位:1bit,永远为0

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

序号位:32bit,秒内的计数器,支持每秒产生2^32个不同的ID

public class RedisIdWorker {//开始时间戳private static final long BEGIN_TIMESTAMP = 1640995200L;//时间戳左移的位数private static final int COUNT_BITS = 32;private StringRedisTemplate stringRedisTemplate;public RedisIdWorker(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate = stringRedisTemplate;}public long nextId(String keyPrefix){//1.生成时间戳LocalDateTime now = LocalDateTime.now();long nowTime = now.toEpochSecond(ZoneOffset.UTC);long timestamp = nowTime - BEGIN_TIMESTAMP;//2.生成序列号//2.1.获取当前的日期String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));//2.2.自增长//当key不存在时会自动创建,并返回1stringRedisTemplate.opsForValue().setIfAbsent("icr"+keyPrefix+":"+date,"0");long count = stringRedisTemplate.opsForValue().increment("icr"+keyPrefix+":"+date);//3.将两部分拼接return timestamp << COUNT_BITS | count;}}

相关文章:

Redis实现全局ID生成器

全局ID生成器 为什么要用全局ID生成器 1.当我们使用数据库自增来实现id的生成时,规律过于明显,会给用户暴露很多信息 2.当我们订单量过大时无法用数据库的一张表来存放订单,如果两张表的id都是自增的话,id就会出现重复 什么是全局ID生成器 全局ID生成器,是一种在分布式系统…...

Xshell远程连接工具详解

Xshell是一款在Windows平台上运行的远程连接工具&#xff0c;它支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议。Xshell通过互联网实现对远程主机的安全连接&#xff0c;帮助用户在复杂的网络环境中享受他们的工作。本文将详细介绍Xshell的溯源、最新版本以及它的优势。…...

如何在verilog设计的磁盘阵列控制器中实现不同RAID级别(如RAID 0、RAID 1等)的切换?

以下是一种在Verilog设计的磁盘阵列控制器中实现不同RAID级别(以RAID 0和RAID 1为例)切换的方法: 添加控制信号 在磁盘阵列控制器模块中添加一个输入信号,例如raid_mode,用于选择RAID模式。假设raid_mode = 0表示RAID 0模式,raid_mode = 1表示RAID 1模式。module raid_co…...

基于元神操作系统实现NTFS文件操作(十)

1. 背景 本文补充介绍文件遍历操作的部分附加内容&#xff0c;譬如&#xff0c;过滤掉系统元文件、过滤掉重复的文件项、过滤掉隐藏文件等&#xff0c;并提供了基于元神操作系统的部分实现代码。 2. 方法 &#xff08;1&#xff09;过滤掉系统元文件 NTFS文件系统的前16个元…...

Qt的几个函数方法

void receiveInfo1() {// 假设这是从串口接收到的字符串QString receivedString "23.5C,45%,1012hPa";// 使用逗号分隔符分割字符串QStringList parts receivedString.split(,);// 检查分割后的列表是否有足够的部分if (parts.size() > 3) {QString part1 part…...

openpnp - bug - 散料飞达至少定义2个物料

文章目录 openpnp - bug - 散料飞达至少定义2个物料笔记END openpnp - bug - 散料飞达至少定义2个物料 笔记 散料飞达上定义的物料个数用完了&#xff0c;现在只需要一个料就可以。 用顶部相机去找编带上是否还有一个单独的料&#xff0c;找到了。 定义散料飞达的料为1个&…...

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException

HDFS异常org.apache.hadoop.hdfs.protocol.NSQuotaExceededException 异常信息&#xff1a; Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /xxxdir is exceeded: quota10000 file count15001N…...

数据库的构成与手写简单数据库的探索

一、引言 在当今数字化的时代&#xff0c;数据库扮演着至关重要的角色。无论是企业管理系统、电子商务平台还是各种移动应用&#xff0c;都离不开数据库的支持。数据库是存储和管理数据的核心工具&#xff0c;它的高效性、可靠性和安全性对于数据的处理和应用至关重要。本文将…...

基于STM32的智能晾衣架设计

引言 随着智能家居的普及&#xff0c;智能晾衣架成为了提升生活便利性的重要设备。智能晾衣架通过集成多个传感器&#xff0c;能够自动感知天气变化、湿度、光照等环境因素&#xff0c;实现自动升降、风干和报警功能&#xff0c;帮助用户更加高效地晾晒衣物。本项目基于STM32设…...

【MAUI】模糊控件(毛玻璃高斯模糊亚克力模糊)

文章目录 XAML.CSToBytes方法使用效果 常试过AcrylicView.MAUI和Sharpnado.MaterialFrame&#xff0c;对于二者教程很少&#xff0c;使用直接写控件然后调属性&#xff0c;没有报错但也并没有效果所幸就自己写一个 XAML <?xml version"1.0" encoding"utf-…...

深度学习:pandas篇

1. Pandas 基础 Pandas 是一个帮助你处理和分析数据的工具 安装 Pandas pip install pandas 导入 Pandas&#xff0c;我们用 pd 来代替 Pandas 的全称&#xff0c;这样以后写代码的时候更简洁 import pandas as pd 建 Series 和 DataFrame Pandas 最基本的两个数据结构是…...

Redis学习文档(Redis基本数据类型【Hash、Set】)

Hash&#xff08;哈希&#xff09; 介绍 Redis 中的 Hash 是一个 String 类型的 field-value&#xff08;键值对&#xff09; 的映射表&#xff0c;特别适合用于存储对象&#xff0c;后续操作的时候&#xff0c;你可以直接修改这个对象中的某些字段的值。 Hash 类似于 JDK1.…...

15分钟学Go 第9天:函数的定义与调用

第9天&#xff1a;函数的定义与调用 欢迎来到第9天的Go语言学习模块&#xff01;今天我们将深入探讨函数的定义与调用&#xff0c;帮助你掌握如何编写和使用函数。学习函数不仅是Go语言的基础&#xff0c;也是程序设计的核心概念之一。这一节将详细介绍函数的结构、参数传递、…...

Java虚拟机:JVM介绍

1024 程序员节日快乐&#xff01;愿您我的代码永远没有 bug &#xff0c;人生永远没有 bug &#xff01; JVM 概述JVM 架构 概述 JVM&#xff08; Java Virtual Machine &#xff0c;Java 虚拟机&#xff09;&#xff0c;是 Java 语言的运行环境&#xff0c;是运行所有 Java 程…...

R数据科学 16.5.3练习题

(1) 编写代码以使用一种映射函数完成以下任务。 a. 计算 mtcars 数据集中每列的均值。 b. 确定 nycflights13::flights 数据集中每列的类型。 c. 计算 iris 数据集中每列唯一值的数量。 d. 分别使用 μ -10、0、10 和 100 的正态分布生成 10 个随机数。 library(purrr) # 计算…...

通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0

问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…...

简易CPU设计入门:验证取指令模块

项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&#xff…...

【MySQL数据库】MySQL主从复制

文章目录 MySQL主从复制MySQL主从复制的分类MySQL主从复制原理MySQL主从复制的配置步骤MySQL主从复制的同步模式 MySQL主从复制实验环境准备关闭防火墙和 SELinux时间同步主服务器设置从服务器设置 MySQL 主从复制配置主服务器配置从服务器配置&#xff08;以 Slave1 为例&…...

CDC变更数据捕捉技术是什么?和ETL有什么不同?

一、什么是CDC技术? 变更数据捕获&#xff08;Change Data Capture&#xff0c;简称 CDC&#xff09;是一种用于识别和跟踪数据源中发生变化的数据的技术。 工作原理&#xff1a; 1.监测数据源&#xff1a;CDC 工具会持续监测指定的数据源&#xff0c;如数据库表、文件系统…...

一种用于推进欧洲临床中心中风管理的联邦学习平台即服务

论文标题&#xff1a;A Federated Learning Platform as a Service for Advancing Stroke Management in European Clinical Centers 作者信息&#xff1a; Diogo Reis Santos, Albert Sund Aillet, Antonio Boiano, Usevalad Milasheuski, Lorenzo Giusti, Marco Di Gennaro…...

智能产品系统架构分析 - 智能办公系统架构分层

方向&#xff1a;方案分析、架构设计、模块分解 智能产品系统架构分析&#xff1a;智能办公系统架构分层。 对智能办公系统进行架构分层分析&#xff0c;给出实例、UML建模、项目结构等。 “智能产品系统架构分析&#xff1a;智能办公系统架构分层”。 包含设备控制、预约管…...

MagiskBoot:Android启动镜像解构与重构引擎深度解析

MagiskBoot&#xff1a;Android启动镜像解构与重构引擎深度解析 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk MagiskBoot作为Magisk生态系统的核心组件&#xff0c;专门负责Android启动镜像的多格式解…...

602 游戏平台 — 做玩家喜爱、信任的游戏平台!

602 游戏是2013 年上线的老牌正规页游平台&#xff0c;十年稳定运营&#xff0c;始终以 “玩家喜爱、信任”为核心&#xff0c;主打传奇类精品页游 &#xff0c;三端互通✅ 平台核心优势&#xff08;为什么玩家信任&#xff09;正规合规&#xff0c;账号安全&#xff1a;文网文…...

百度文库文档免费下载终极指南:3步快速获取纯净PDF

百度文库文档免费下载终极指南&#xff1a;3步快速获取纯净PDF 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 你是否曾在百度文库找到心仪的文档&#xff0c;却被烦人的广告、付费提示和杂乱页面…...

GPT-Image-2提示词工程实战:从原理到应用,解锁高质量AI图像生成

1. 项目概述&#xff1a;一份高质量的GPT-Image-2提示词工程指南如果你正在使用OpenAI的GPT-Image-2模型&#xff0c;并且厌倦了反复尝试却只能得到平庸、不符合预期的图片&#xff0c;那么你找对地方了。我最近深度研究并实践了Anil-matcha维护的“Awesome GPT-Image-2 API Pr…...

从SPI模式0到Quad I/O:手把手带你玩转W25Q128JV的性能压榨与接口升级

从SPI模式0到Quad I/O&#xff1a;W25Q128JV性能优化实战指南 在嵌入式系统设计中&#xff0c;存储器的性能往往成为整个系统响应速度的瓶颈。W25Q128JV这颗128Mbit容量的串行Flash芯片&#xff0c;凭借其灵活的接口配置和出色的性价比&#xff0c;已成为众多物联网设备、消费电…...

BMS工程师必看:实测案例解析50-108MHz频段超标如何整改(滤波/接地/屏蔽实战)

BMS工程师实战指南&#xff1a;50-108MHz频段EMC超标问题深度解析与整改方案 当你在实验室看到传导骚扰测试曲线在50-108MHz频段持续突破GB/T18655-2010三级限值时&#xff0c;那种焦虑感每个BMS工程师都深有体会。这不是简单的测试失败&#xff0c;而是产品设计中隐藏的高频噪…...

互联网大厂 Java 求职面试:音视频场景中的 Spring Boot 与 Kafka

互联网大厂 Java 求职面试&#xff1a;音视频场景中的 Spring Boot 与 Kafka 在一次互联网大厂的面试中&#xff0c;面试官与燕双非展开了一场关于音视频处理的技术探讨。第一轮提问 面试官&#xff1a;燕双非&#xff0c;你能告诉我在音视频场景下&#xff0c;使用 Spring Boo…...

AgentLimb:基于肌肉记忆的AI浏览器自动化,降低85% Token消耗

1. 项目概述&#xff1a;当AI学会“肌肉记忆”&#xff0c;浏览器自动化迎来新范式如果你和我一样&#xff0c;每天都在和AI助手打交道&#xff0c;让它们帮你写代码、分析数据&#xff0c;甚至尝试控制浏览器完成一些重复性任务&#xff0c;那你一定遇到过这个痛点&#xff1a…...

打造高效命令行天气查询工具:基于KMI/IRM的比利时天气CLI实践

1. 项目概述&#xff1a;一个为终端而生的比利时天气查询工具 如果你和我一样&#xff0c;是个重度命令行用户&#xff0c;同时又对窗外天气是晴是雨有点在意&#xff0c;那你肯定也烦透了为了看个天气预报还得打开浏览器、点开某个天气网站或者解锁手机。这种打断工作流的感觉…...