号基于Redis构建生成序列号服务(基于redis获取序列)
Snowflake算法是Twitter开发的,是一个用来生成递增的ID的算法。Snowflake算法的特点是,它可以根据当前时间戳来保证ID的唯一性,可以有效的避免ID重复的问题。
在现在越来越多的应用都需要生成唯一ID时,Snowflake算法可以派上用场。比如,在基于Redis构建序列号服务时,Redis可以自增序列号,但会存在不可预测性,产生重复ID的可能性。而使用Snowflake算法可以彻底解决此类问题,基于Redis构建生成序列号服务才会更加完美。
基于Snowflake算法构建的唯一序列号服务,由几个参数组成,使用者可以根据自己的需求来自定义这些参数。
Snomake算法的使用,需要写一段代码:
“`javascript
/ Snowflake ID snowflake算法
const snowflake = {
workerId: 1, // 开始使用者指定
dataCenterId: 2, // 开始使用者指定
sequence: 0 // 毫秒内计数清0
get timestamp() { return Date.now(); }
get nextId() {
const timestamp = this.timestamp; private
// 防止毫秒内产生重复ID
if( timestamp
// 毫秒内计数清0
if( this.lastTimestamp === timestamp) {
this.sequence = ( this.sequence + 1 ) & 0x3FF;
if(this.sequence === 0 ) {
// 当前毫秒内计数已经增加到最大
timestamp += 1;
}
} else {
// timestamp变化, 毫秒内计数清0
this.sequence = 0;
}
// 记录最后一次使用的timestamp
this.lastTimestamp = timestamp;
const dataCenterId = this.dataCenterId
const workerId = this.workerId
const sequence = this.sequence;
// 一个64位bit的数字,第一位为未使用,接下来41位和剩余22位分别是timestamp, dataCenterId, workerId 和 sequence
return ((timestamp – 1420041600000) >> 0;
}
};
无论是对性能还是思考深度上而言,Snowflake算法都是个比较优秀的选择。在构建序列号服务时,基于Snowflake算法的唯一序列号可以满足使用者的需求,使得序列号服务更加完美。