首页 > 数据库 >Redis 实现唯一全局ID

Redis 实现唯一全局ID

时间:2023-03-03 11:12:00浏览次数:30  
标签:timestamp time Redis public LocalDateTime import 全局 now 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"));
        }
        
    }

 

标签:timestamp,time,Redis,public,LocalDateTime,import,全局,now,ID
From: https://www.cnblogs.com/hztech/p/17174838.html

相关文章

  • delphi 自定义cxGrid的导航面板
    效果图  面板设置:1.把导航面板显示出来:Navigator.visible:=true 2.在Navigator-Buttons下设置自己需要显示或者隐藏的按钮  3.添加自定义按钮  双......
  • redis sentinel 部署
    redissentinel部署服务器说明192.168.2.200masterredis-serverredis-sentinel192.168.2.201slave1redis-serverredis-sentinel192.168.2.202slave2r......
  • 一个强大的作图工具Mermaid入门
    一个强大的作图工具Mermaid入门参考网站:https://mermaid.live/edit在线编辑器https://mermaid.js.org/intro/官网使用方法在typora中选择```mermaid即可,复杂......
  • 【android】Android SharedPreferences使用详解
    【参考连接】AndroidSharedPreferences使用详解androidSharedPreferences实现用户的注册和保存账号密码......
  • Docker环境下安装Redis 集群
    Redis三种解决方案哈希取余分区   优点:简单粗暴,直接有效缺点:不好扩缩容,某个节点宕机,会导致hash取余全部数据重新洗牌一致性哈希环优点:加入或......
  • Android线上包
    Android线上包抓包教程由于当前主流手机系统都是稳定版,无法进行root,目前该方法只支持模拟器。准备工具:模拟器,linux或git,抓包工具1、模拟器连接抓包工具并下载证书2、找......
  • 全局视角看技术-Java多线程演进史
    作者:京东科技文涛全文较长共6468字,语言通俗易懂,是一篇具有大纲性质的关于多线程的梳理,作者从历史演进的角度讲了多线程相关知识体系,让你知其然知其所以然。前言2022......
  • 生成19位long型唯一数字id
    /***生成19位long型唯一数字id*@return*/publicstaticlongGetLong19UUID(){//StringnanoRandom=System.nanoTime()+""+......
  • redis性能测试及瓶颈分析调优
    一、简介Redis(RemoteDictionaryServer),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API......
  • Android Studio 之连接mysql实现添加功能
    昨天经过几个小时的奋斗,终于是连接上了mysql说实话过程十分艰辛,包括查ip换网络改权限改数据库的表改网络等等之后也尝试过在自己电脑上下另一个版本的mysql但是都以......