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

Redis学习路线(5)—— Redis生成唯一ID

一、全局唯一ID

(一)在用户抢购时,就会生成订单并保存到数据库中,而订单表如果使用自增ID就会存在以下几种情况:

  • 自增ID规律性太强
  • 受单表数据量的限制

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

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

(三)全局唯一ID生成策略

  • UUID
  • Redis自增
  • snowflake算法
  • 数据库自增

(四)Redis自增ID策略

  • 每天一个key,方便统计订单量
  • ID构造是 时间戳 + 计数器

(五)使用Redis进行全局唯一ID生成,采用HyperLog类型进行组合 64 位的全局ID

  • 第一位为符号位,表示永远为正数
  • 添加 31 bit 的时间戳
  • 添加 32 bit 的序列号

(六)使用Reids创建全局ID生成器

@Component
public class RedisIdBuilder {private static final long BEGIN_TIMESTAMP = 1687910400L;private static final int SERIAL_BITS = 32;private StringRedisTemplate stringRedisTemplate;public RedisIdBuilder(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、生成序列号//获取当前日期,精确到天String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));//自增长序列号Long serial = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + ":" + date);//3、拼接并返回return timestamp << SERIAL_BITS | serial;}
}
http://www.lryc.cn/news/103043.html

相关文章:

  • django后台系统Tyadmin
  • 设计模式适合用于解决特定的软件设计问题呢
  • 测试|测试分类
  • 矩阵中的路径(JS)
  • Linux时间体系与LinuxPTP
  • 最优除法(力扣)数学 JAVA
  • Git代码管理
  • 使用vscode进行远程开发服务器配置
  • 北斗gps卫星授时服务器(NTP)应用于防火墙场景
  • Quartz中Misfire机制源码级解析
  • 每日一题——重建二叉树
  • Python - json与字典dict
  • 性能测试必备监控技能linux篇
  • 【如何训练一个中英翻译模型】LSTM机器翻译模型部署之ncnn(python)(五)
  • C++ 面向对象三大特征
  • 【Github】自动监测 SSL 证书过期的轻量级监控方案 - Domain Admin
  • Echarts常见图表展示
  • PySpark机器学习实战案例
  • 微软操作系统中,windows server 系列和windows 的区别
  • 本地部署 Stable Diffusion XL 1.0 Gradio Demo WebUI
  • 模型法在初中物理中的实例与应用
  • el-table 设置行背景颜色 鼠标移入高亮问题处理
  • 嵌入式面试常见题目收藏(超总结)
  • error in file(out, “wt“): cannot open the connection
  • Redis (一)消息订阅和发送测试
  • 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归多输入单输出区间预测
  • Debian 12.1 “书虫 “发布,包含 89 个错误修复和 26 个安全更新
  • hadoop部署配置
  • 文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题
  • uniapp:手写签名,多张图合成一张图