当前位置:网站首页>Implementation of redis unique ID generator
Implementation of redis unique ID generator
2022-07-05 20:43:00 【1024 questions】
ID Component part :
Sign bit :1bit, For ever 0
Time stamp :31bit, In seconds , have access to 69 year
Serial number :32bit, Seconds counter , Support generation per second 2^32 Different ID
The generated code :
public class RedisIdWorker { /** * Start timestamp */ private static final long BEGIN_TIMESTAMP = 1640995200L; /** * Number of digits of serial number */ private static final int COUNT_BITS = 32; private StringRedisTemplate stringRedisTemplate; // Construction method form injection public RedisIdWorker(StringRedisTemplate stringRedisTemplate) { this.stringRedisTemplate = stringRedisTemplate; } public long nextId(String keyPrefix){ //1. Generate timestamps LocalDateTime now = LocalDateTime.now(); long nowSecond = now.toEpochSecond(ZoneOffset.UTC); long timestamp = nowSecond - BEGIN_TIMESTAMP; //2. Generate serial number // 2.1 Get current date , Accurate to the sky String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd")); long count = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + ":" + date); //3. Splice and return return timestamp << COUNT_BITS | count; }}PS:Redis Achieve global uniqueness id Generate
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Component;import org.springframework.util.Assert;import java.time.LocalDate;import java.time.format.DateTimeFormatter;import java.util.Calendar;import java.util.concurrent.TimeUnit;/** * describe : * only ID generator * @author jimmy * @create 2020-11-06 16:06 */@Componentpublic class GenerateIDUtil { @Autowired private RedisTemplate redisTemplate; /** * Generate daily initial Id * @param key * @return */ public String initPrimaryId(String key) { Assert.hasLength(key, "hashName Can't be empty "); String hashCol = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); // Custom numbering sequence String hashColVal = hashCol + "00001";// redisTemplate.opsForHash().putIfAbsent(hashName, hashCol, hashColVal); Long expiresTime = getSecondsNextEarlyMorning(); redisTemplate.opsForValue().set(key, Long.valueOf(hashColVal), expiresTime, TimeUnit.SECONDS); return hashColVal; } /** * Get distributed Id * @param key * @return */ public String getPrimaryId(String key) { String id = ""; if(redisTemplate.hasKey(key)){ // redisTemplate.opsForValue().get(key); // redisTemplate.delete(key); id = String.valueOf(redisTemplate.opsForValue().increment(key, 1)); } else { id = initPrimaryId(key); } return id; } /** * Judge the number of seconds from the current time to the early morning of the next day * @return The unit of return value is [s: second ] */ public Long getSecondsNextEarlyMorning() { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.MILLISECOND, 0); return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000; }}This is about Redis only ID This is the end of the article on the implementation of the generator , More about Redis only ID Please search the previous articles of SDN or continue to browse the related articles below. I hope you will support SDN more in the future !
边栏推荐
- Prosci LAG-3 recombinant protein specification
- Is it safe to open an account online? Where can I get a low commission?
- Make Jar, Not War
- 物联网智能家居基本方法实现之经典
- [record of question brushing] 1 Sum of two numbers
- Material Design组件 - 使用BottomSheet展现扩展内容(二)
- Hongmeng OS' fourth learning
- Kubernetes resource object introduction and common commands (V) - (configmap & Secret)
- phpstudy小皮的mysql点击启动后迅速闪退,已解决
- Composition of applet code
猜你喜欢

如何形成规范的接口文档

Norgen AAV extractant box instructions (including features)

CVPR 2022 | 常见3D损坏和数据增强

Return to blowing marshland -- travel notes of zhailidong, founder of duanzhitang

phpstudy小皮的mysql点击启动后迅速闪退,已解决

ProSci LAG3抗体的化学性质和应用说明

Practical demonstration: how can the production research team efficiently build the requirements workflow?

鸿蒙系统控制LED的实现方法之经典

Fundamentals - configuration file analysis

Applet page navigation
随机推荐
How to open an account online for futures? Is it safe?
Where is a good stock account? Is online account manager safe to open an account
Prosci LAG-3 recombinant protein specification
E. Singhal and numbers (prime factor decomposition)
14、Transformer--VIT TNT BETR
鸿蒙os第四次学习
小程序项目结构
Norgen AAV提取剂盒说明书(含特色)
Duchefa丨低熔点琼脂糖 PPC中英文说明书
Duchefa p1001 plant agar Chinese and English instructions
Leetcode (347) - top k high frequency elements
信息学奥赛一本通 1339:【例3-4】求后序遍历 | 洛谷 P1827 [USACO3.4] 美国血统 American Heritage
Graph embedding learning notes
Duchefa丨D5124 MD5A 培养基中英文说明书
CTF逆向基础
Practical demonstration: how can the production research team efficiently build the requirements workflow?
王老吉药业“关爱烈日下最可爱的人”公益活动在南京启动
Hongmeng OS' fourth learning
Relationship between mongodb documents
Is the securities account given by the school of Finance and business safe? Can I open an account?