当前位置:网站首页>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 !
边栏推荐
- go 文件路径操作
- Applet project structure
- Abnova blood total nucleic acid purification kit pre installed relevant instructions
- Y57. Chapter III kubernetes from entry to proficiency -- business image version upgrade and rollback (30)
- Duchefa d5124 md5a medium Chinese and English instructions
- CCPC 2021 Weihai - G. shinyruo and KFC (combination number, tips)
- CVPR 2022 | 常见3D损坏和数据增强
- Document method
- Duchefa low melting point agarose PPC Chinese and English instructions
- How to form standard interface documents
猜你喜欢
随机推荐
Specification of protein quantitative kit for abbkine BCA method
Duchefa p1001 plant agar Chinese and English instructions
2020 CCPC Weihai - A. golden spirit (thinking), D. ABC project (big number decomposition / thinking)
Minimum commission for stock trading account opening, where to open an account with low commission? Is it safe to open an account on your mobile phone
The Chinese Academy of Management Sciences gathered industry experts, and Fu Qiang won the title of "top ten youth" of think tank experts
【刷题记录】1. 两数之和
14、Transformer--VIT TNT BETR
Material Design组件 - 使用BottomSheet展现扩展内容(二)
Leetcode (695) - the largest area of an island
14、Transformer--VIT TNT BETR
Mongodb basic exercises
Abnova maxpab mouse derived polyclonal antibody solution
CTF逆向基础
19 Mongoose模块化
2022 Beijing eye health products exhibition, eye care products exhibition, China eye Expo held in November
Return to blowing marshland -- travel notes of zhailidong, founder of duanzhitang
插值查找的简单理解
Frequent MySQL operations cause table locking problems
2022北京眼睛健康用品展,护眼产品展,中国眼博会11月举办
Kubernetes resource object introduction and common commands (V) - (configmap & Secret)