当前位置:网站首页>Redis based distributed ID generator
Redis based distributed ID generator
2022-07-06 12:13:00 【A pole】
be based on Redis Distributed ID generator
ID Self increasing strategy
- One a day key, It is convenient to count the order quantity
- ID The structure is Time stamp + Counter
ID Component part

- Sign bit :1bit, For ever 0
- Time stamp :31bit, In seconds , from 2022 year 1 The month begins to count , have access to 68 year , Can also be based on demand , Change to every minute 、 Hourly or daily counter , Available time can be increased .
- Serial number :32bit, Daily counter , Support daily production 2^32 Different ID, Can also be based on demand , Change to hourly 、 Counter per minute or per second , But it needs to match with the timestamp , Can increase ID Number .
Here is a timestamp in seconds and a serialization counter in days ID generator .
package cn.sticki.common.redis.utils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
/** * @author A pole * @version 1.0 * @date 2022/6/20 20:29 */
@Component
public class RedisIdGenerator {
/** * Start timestamp */
private static final long BEGIN_TIMESTAMP = 1640995200L;
/** * Number of digits of serial number */
private static final int COUNT_BITS = 32;
private final RedisTemplate<String, Long> redisTemplate;
public RedisIdGenerator(RedisTemplate<String, Long> redisTemplate) {
this.redisTemplate = redisTemplate;
}
@SuppressWarnings("ConstantConditions")
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"));
// 2.2 obtain redis Self growth value
long increment = redisTemplate.opsForValue().increment("id:" + keyPrefix + ":" + date);
// 3. Splice and return
return increment << COUNT_BITS | timestamp;
}
}
Other globally unique ID Generation strategy
- UUID
- Redis Self increasing
- snowflake Algorithm
- Database autoincrement
边栏推荐
猜你喜欢
![Several declarations about pointers [C language]](/img/9b/ace0abbd1956123a945a98680b1e86.png)
Several declarations about pointers [C language]

Arm pc=pc+8 is the most understandable explanation

The dolphin scheduler remotely executes shell scripts through the expect command

I2C bus timing explanation

JS變量類型以及常用類型轉換

Amba, ahb, APB, Axi Understanding

JS variable types and common type conversions

ES6 grammar summary -- Part 2 (advanced part es6~es11)

荣耀Magic 3Pro 充电架构分析

Kaggle competition two Sigma connect: rental listing inquiries
随机推荐
Gallery's image browsing and component learning
C语言,log打印文件名、函数名、行号、日期时间
STM32 how to locate the code segment that causes hard fault
Machine learning -- linear regression (sklearn)
Imgcat usage experience
ES6 grammar summary -- Part 2 (advanced part es6~es11)
arduino获取随机数
Fashion-Gen: The Generative Fashion Dataset and Challenge 论文解读&数据集介绍
sklearn之feature_extraction.text.CountVectorizer / TfidVectorizer
锂电池基础知识
Kaggle竞赛-Two Sigma Connect: Rental Listing Inquiries
Machine learning -- decision tree (sklearn)
MySQL占用内存过大解决方案
C语言回调函数【C语言】
JS object and event learning notes
ES6语法总结--上篇(基础篇)
选择法排序与冒泡法排序【C语言】
Pytorch-温度预测
嵌入式启动流程
Page performance optimization of video scene