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

基于Redis实现全局唯一id

业务需求 

全局id生成器需要满足一下特点

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

id的组成分为三部分:符号位,时间戳,序列号。 

如何将这三部分合在一起作为long返回呢?答案是使用位运算,我们可以这样想,将时间戳 左移32位,低位都补0正好空出了序列号的位置,将序列号位置与自增长count进行与运算就可。

@Component
public class RedisIdWorker {@Autowiredprivate StringRedisTemplate redisTemplate;/*** 开始时间戳*/private static final long BEGIN_TIMESTAMP = 1704067200L;/*** 序列号位数* @param prefix* @return*/private static final long COUNT_BITS = 32L;public long nextId(String prefix) {//生成时间戳LocalDateTime now = LocalDateTime.now();long nowSecond = now.toEpochSecond(ZoneOffset.UTC);long timestamp = nowSecond - BEGIN_TIMESTAMP;//生成序列数//获取当前日期,精确到天String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));//自增长Long count = redisTemplate.opsForValue().increment("icr" + prefix + ":" + date);//拼接返回return timestamp << COUNT_BITS | count;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 小试牛刀-Telebot区块链游戏机器人(TS升级)
  • 【Python】数据类型之详讲字符串(下)
  • 全球轻型汽车安全气囊面料市场规划预测:未来六年CAGR为4.3%
  • 1. 什么是操作系统
  • 24年税务师考试补报名即将开始啦
  • ComfyUI插件:ComfyUI layer style 节点(三)
  • unity中实现流光效果——世界空间下
  • python学习之旅(基础篇看这篇足够了!!!)
  • 文件解析漏洞
  • JVM—垃圾收集算法和HotSpot算法实现细节
  • Android Gradle开发与应用(一):Gradle基础
  • Mybatis面试
  • [BJDCTF2020]Easy MD51
  • SQL时间函数转换(持续更新中)
  • [图解]掉杠·above...duty -《分析模式》漫谈20
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Codepen 每日精选(2018-3-25)
  • CSS3 变换
  • Hibernate最全面试题
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • JS学习笔记——闭包
  • 从零开始学习部署
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 分布式任务队列Celery
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于webpack 的 vue 多页架构
  • 来,膜拜下android roadmap,强大的执行力
  • 聊聊flink的BlobWriter
  • 爬虫模拟登陆 SegmentFault
  • 前嗅ForeSpider中数据浏览界面介绍
  • 我这样减少了26.5M Java内存!
  • 一个完整Java Web项目背后的密码
  • raise 与 raise ... from 的区别
  • 从如何停掉 Promise 链说起
  • ​queue --- 一个同步的队列类​
  • ​第20课 在Android Native开发中加入新的C++类
  • #java学习笔记(面向对象)----(未完结)
  • #NOIP 2014# day.1 T2 联合权值
  • ${ }的特别功能
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3) cmake编译多个cpp文件
  • (3)选择元素——(17)练习(Exercises)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (第一天)包装对象、作用域、创建对象
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)EXC_BREAKPOINT僵尸错误