用Redis实现实现全局唯一ID

全局唯一ID

如果使用数据库自增ID就存在一些问题:

  • id的规律性太明显
  • 受表数据量的限制

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

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

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

image-20240102173648497

ID的组成部分:

符号位:1bit,永远为0

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

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

Redis实现全局唯一ID

@Component
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 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;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django 后台与便签

1. 什么是后台管理 后台管理是网页管理员利用网页的后台程序管理和更新网站上网页的内容。各网站里网页内容更新就是通过网站管理员通过后台管理更新的。 2. 创建超级用户 1. python .\manage.py createsuperuser 2. 输入账号密码等信息 Username (leave blank to use syl…

在Android设备上设置和使用隧道代理HTTP

随着互联网的深入发展&#xff0c;网络信息的传递已经成为人们日常生活中不可或缺的一部分。对于我们中国人来说&#xff0c;由于某些特殊的原因&#xff0c;访问国外网站时常常会遇到限制。为了解决这个问题&#xff0c;使用代理服务器成为了许多人的选择。而在Android设备上设…

微服务智慧工地信息化解决方案(IOT云平台源码)

智慧工地是指应用智能技术和互联网手段对施工现场进行管理和监控的一种工地管理模式。它利用传感器、监控摄像头、人工智能、大数据等技术&#xff0c;实现对施工现场的实时监测、数据分析和智能决策&#xff0c;以提高工地的安全性、效率和质量。 智慧工地平台是一种智慧型、系…

opencv期末练习题(7)附带解析

打印图像各个点的颜色 import cv2 import numpy as np""" 分别获得左上角、右上角、左下角、右下角各自的颜色&#xff0c;并打印相关颜色的值 """ img cv2.imread(test.png)(x, y, z) img.shape print("当前图像的尺寸:", x, y, z…

Redis双写一致性

文章目录 Redis双写一致性1. 延迟双删&#xff08;有脏数据风险&#xff09;2. 异步通知&#xff08;保证数据最终一致性&#xff09;3. 分布式锁&#xff08;数据的强一致&#xff0c;性能低&#xff09; Redis双写一致性 当修改了数据库的数据也要同时更新缓存的数据&#xf…

Linux 系统拉取 Github项目

一、安装Git 在Linux上拉取GitHub项目可以使用Git命令。首先确保已经安装了Git。如果没有安装&#xff0c;可以通过包管理器&#xff08;比如apt、yum&#xff09;来进行安装。 sudo yum install git #查看安装版本 git -version二、关联GitHub 配置本地账户和邮箱 >>…

ThreeJS创建关键帧动画

之前有说过两种创建动画的形式&#xff0c;一个是很粗的方式&#xff0c;直接在requestAnimationFrame中修改模型的属性&#xff0c;因为threejs本身就会不断刷新画面&#xff0c;利用不断刷新的时候修改模型属性就实现了每次刷新后修改模型的一些属性&#xff0c;另一种方式是…

iOS实时查看App运行日志

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 &#x1f4dd; 摘要&#xff1a; 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具&#xff0c;我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

鸟瞰uml(下)

36.组件是系统中遵从一组接口且提供实现的一个物理部件&#xff0c;通常指开发和运行时类的物理实现 37.部件图用于对系统的静态实现视图建模&#xff0c;这种视图主要支持系统部件的配置管理&#xff0c;通常可以分为以下4种方式来完成&#xff1a; 对源代码进行建模&#x…

Rust 圣经 阅读 引用与借用

Rust 通过 借用&#xff08;Borrowing&#xff09; 在使用某个变量的指针或引用。 获取变量的引用&#xff0c;称之为 借用&#xff08;borrowing&#xff09; 。 引用与解引用 引用是为了解决在使用函数时&#xff0c;频繁地传递所有权。 引用只是获取了引用权&#xff0c;而…

魔改Stable Diffusion,开源创新“单目深度估计”模型

单目深度估计一直是计算机视觉领域的难点。仅凭一张 RGB 图像,想要还原出场景的三维结构,在几何结构上非常不确定,必须依赖复杂的场景理解能力。 即便使用更强大的深度学习模型来实现&#xff0c;也面临算力需求高、图像数据注释量大、泛化能力弱等缺点。 为了解决这些难题&a…

线性代数第一课+第二课总结

第一课 第一课是简单的行列式计算&#xff0c;主要就是要把左下角的数字全部转换为0&#xff0c;通过减去其他行的式子即可实现&#xff0c;最后把对角线的所有数字相乘&#xff0c;得到的结果是最后行列式的答案 第二课 例题1 硬算理论上其实也是可行的&#xff0c;但是使…

R语言——reshape2包、tidyr包、dplyr包(五)

目录 一、数据转换之reshape2包&#xff1a;melt与dcast函数 二、数据转换之tidyr包&#xff1a;gather与spread函数&#xff0c;separate与unite函数 三、据转换之dplyr包 四、参考 一、数据转换之reshape2包&#xff1a;melt与dcast函数 merge 函数 使用merge函数 x &l…

听GPT 讲Rust源代码--library/proc_macro

File: rust/library/proc_macro/src/bridge/rpc.rs 在Rust源代码中&#xff0c;rust/library/proc_macro/src/bridge/rpc.rs文件的作用是实现了Rust编程语言的编译过程中的远程过程调用&#xff08;RPC&#xff09;机制。 这个文件定义了与编译器的交互过程中使用的各种数据结构…

阿里云2核2G3M服务器能放几个网站?有限制吗?

阿里云2核2g3m服务器可以放几个网站&#xff1f;12个网站&#xff0c;阿里云服务器网的2核2G服务器上安装了12个网站&#xff0c;甚至还可以更多&#xff0c;具体放几个网站取决于网站的访客数量&#xff0c;像阿里云服务器网aliyunfuwuqi.com小编的网站日访问量都很少&#xf…

LeetCode 1758. 生成交替二进制字符串的最少操作数【字符串,模拟】1353

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

【数值分析】三次样条插值

三次样条插值 2023年11月5日 #analysis 文章目录 三次样条插值1. 样条函数1.1 截断多项式 2. 三次样条插值2.1 B样条为基底的三次样条插值函数2.1.1 第一种边界条件2.1.2 第二种边界条件2.1.3 第三种边界条件 2.2 三弯矩法求三次样条插值函数2.2.1 第一种边界条件2.2.2 第二种…

万界星空科技低代码平台基本模块与优势

低代码平台&#xff08;Low-Code Development Platform&#xff0c;LCDP&#xff09;就是使用低代码的方式进行开发&#xff0c;能快速设置和部署的平台。低代码平台旨在简化应用开发过程&#xff0c;降低开发难度&#xff0c;缩短开发周期&#xff0c;并使非专业程序员&#x…

线性代数笔记3 1.1

学习视频&#xff1a; 2.2 矩阵运算&#xff08;二&#xff09;_哔哩哔哩_bilibili 包括内容&#xff1a; p10矩阵运算&#xff08;二&#xff09; p11特殊矩阵 p12逆矩阵&#xff08;一&#xff09; p13逆矩阵&#xff08;二&#xff09;

JSON与XML的比较:优缺点分析与应用场景选择

JSON&#xff08;JavaScript Object Notation&#xff09;和XML&#xff08;eXtensible Markup Language&#xff09;都是用于存储和传输数据的格式&#xff0c;它们各自具有一些优点和缺点&#xff0c;适用于不同的应用场景。 JSON的优点&#xff1a; 易读性&#xff1a;JSO…