Redis 实现唯一全局ID

 

 

复制代码
package com.hmdp.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

@Component
public class RedisIdWorker {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    public static final Long BEGIN_TIMESTAMP=1672531200l; //2023-1-1 0.0.0
    public static final int COUNT_BITS=32;//move the bit count
    public  long nextId(String keyPrefix)
    {
        String fd= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy:MM:dd")) ;//date key
        String incKey="inc:"+keyPrefix+":"+fd;
        //1 create time stamp
            LocalDateTime now=LocalDateTime.now();
            long second=now.toEpochSecond(ZoneOffset.UTC);
            long timestamp=second-BEGIN_TIMESTAMP;

        //2 create serial number

        Long count = stringRedisTemplate.opsForValue().increment(incKey);
        //3 union the timestamp with serial number and return

        return  timestamp<<COUNT_BITS | count;// move left COUNT_BITS then or calculator
    }

/*
    public static void main(String[] args) {
        LocalDateTime time=LocalDateTime.of(2023,1,1,0,0,0);
        long second=time.toEpochSecond(ZoneOffset.UTC);
        String fd= LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy:MM:dd")) ;
        System.out.println(fd);
    }*/
}
复制代码

 

调用方法:

复制代码
  @Resource
    private RedisIdWorker redisIdWorker;
    @Test
    public void IDTest()
    {
        for (int i = 0; i < 100; i++) {
            System.out.println(redisIdWorker.nextId("order"));
        }
        
    }
复制代码

 

posted on   hztech  阅读(88)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示