广告
返回顶部
首页 > 资讯 > 数据库 >Redis唯一ID生成器的实现
  • 444
分享到

Redis唯一ID生成器的实现

Redis唯一ID生成器Redis生成唯一ID 2022-07-05 18:07:43 444人浏览 独家记忆
摘要

ID的组成部分: 符号位:1bit,永远为0时间戳:31bit,以秒为单位,可以使用69年序列号:32bit,秒内的计数器,支持每秒产生2^32个不同ID 生成代码: public class RedisIdWorker

ID的组成部分:

  • 符号位:1bit,永远为0
  • 时间戳:31bit,以秒为单位,可以使用69年
  • 序列号:32bit,秒内的计数器,支持每秒产生2^32个不同ID

生成代码:

public class RedisIdWorker {

  
  private static final long BEGIN_TIMESTAMP = 1640995200L;
  
  private static final int COUNT_BITS = 32;

  private StringRedisTemplate stringRedisTemplate;
  //构造方法形式注入
  public RedisIdWorker(StringRedisTemplate stringRedisTemplate) {
    this.stringRedisTemplate = stringRedisTemplate;
  }

  public long nextId(String keyPrefix){
    //1. 生成时间戳
    LocalDateTime now = LocalDateTime.now();
    long nowSecond = now.toEpochSecond(ZoneOffset.UTC);
    long timestamp = nowSecond - BEGIN_TIMESTAMP;
    //2.生成序列号
    // 2.1 获取当前日期,精确到天
    String date = now.fORMat(DateTimeFormatter.ofPattern("yyyy:MM:dd"));
    long count = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + ":" + date);
    //3.拼接并返回

    return timestamp << COUNT_BITS | count;
  }
}

PS:Redis实现全局唯一id生成

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;


@Component
public class GenerateIDUtil {

  @Autowired
  private RedisTemplate redisTemplate;

   public String initPrimaryId(String key) {
    Assert.hasLength(key, "hashName不能为空");
    String hashCol = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
    //自定义编号规则
    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;
  }


  
  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;
  }


  
  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;
  }
}

到此这篇关于Redis唯一ID生成器的实现的文章就介绍到这了,更多相关Redis唯一ID生成器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: Redis唯一ID生成器的实现

本文链接: https://www.lsjlt.com/news/33212.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis唯一ID生成器的实现
    ID的组成部分: 符号位:1bit,永远为0时间戳:31bit,以秒为单位,可以使用69年序列号:32bit,秒内的计数器,支持每秒产生2^32个不同ID 生成代码: public class RedisIdWorker...
    99+
    2022-07-05
    Redis唯一ID生成器 Redis生成唯一ID
  • Redis唯一ID生成器如何实现
    这篇“Redis唯一ID生成器如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Redis唯一ID生成器如何实现”文章吧...
    99+
    2023-07-02
  • Redis生成全局唯一ID的实现方法
    目录简介:特性:生成规则: ID生成类:测试类:简介: 全局唯一ID生成器是一种在分布式系统下用来生成全局唯一ID的工具 特性: 唯一性高性能安全性高可用递增性 生成规则:...
    99+
    2022-11-13
  • 详解如何利用Redis实现生成唯一ID
    目录一、摘要二、方案实践2.1、引入 Redis 组件2.2、添加 redis 环境配置2.3、编写服务验证逻辑,通过 aop 代理方式实现2.4、在相关的业务接口上,增加SubmitLimit注解即可三、小结一、摘要 ...
    99+
    2022-11-19
    Redis生成唯一ID Redis 唯一ID
  • Redis生成分布式系统全局唯一ID的实现
    目录分布式系统全局唯一ID基于Redis INCR 命令生成分布式全局唯一ID采用Redis生成商品全局唯一ID分布式系统全局唯一ID 在互联网系统中,并发越大的系统,数据就越大,数...
    99+
    2022-11-12
  • springboot集成redis并使用redis生成全局唯一索引ID
    部署redis Windows下搭建Reids本地集群,可参考https://www.jb51.net/article/242520.htm springboot集成 redis p...
    99+
    2022-11-13
  • springboot集成redis并生成全局唯一索引ID的方法
    本篇内容主要讲解“springboot集成redis并生成全局唯一索引ID的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot集成redis并生成全局唯一索引ID的方法”吧!...
    99+
    2023-06-29
  • MySQL怎么生成唯一的server-id
    这篇文章给大家分享的是有关MySQL怎么生成唯一的server-id的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言我们都知道MySQL用server-id来一的标识某个数据库...
    99+
    2022-10-18
  • python 生成唯一id的四种方式
    目录1.使用UUID2.mongodb的ObjectId3.雪花算法 Snowflake4.时间戳id4.1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳4.2 获取当前日期时间4.3...
    99+
    2023-02-28
    python 生成唯一id python 唯一id
  • Redis全局ID生成器的实现
    全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般满足下列特性: 唯一性:确保ID是唯一的,不可重复递增性:确保是整体逐渐增大的,这样有利于数据库创建索引安全性:I...
    99+
    2022-11-13
  • python生成唯一id的方式有哪些
    本篇内容主要讲解“python生成唯一id的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python生成唯一id的方式有哪些”吧!1.使用UUIDUUID应该是大家耳熟能详的一个东西...
    99+
    2023-07-05
  • Go实现分布式唯一ID的生成之雪花算法
    目录背景:特性:雪花算法:分布式唯一ID的生成 背景: 在分布式架构下,唯一序列号生成是我们在设计一个尤其是数据库使用分库分表的时候会常见的一个问题 特性: 全局唯一,这是基本要求,...
    99+
    2022-11-13
  • js动态生成唯一id的三种方法
    目录一. 引入时间戳,生成可控长度的随机数二. JS 生成随机三、ID生成器NanoID下面是一些补充一. 引入时间戳,生成可控长度的随机数 随机数长度控制,定义一个长度变量(len...
    99+
    2023-05-18
    js动态生成唯一id js唯一id
  • Redis全局ID生成器如何实现
    今天小编给大家分享一下Redis全局ID生成器如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。全局ID生成器,是一种在...
    99+
    2023-06-30
  • Python用UUID库生成唯一ID的方法示例
    UUID介绍 UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,也称为GUID,全称为:UUID —— Universally Unique IDentifie...
    99+
    2022-06-04
    示例 方法 Python
  • vue点击项目唯一id生成器nanoid的使用方式
    目录点击项目唯一id生成器nanoid使用nanoid的安装nanoid的使用前端常用库——nanoid1.在项目目录下打开终端,下载安装nanoid库2.引...
    99+
    2022-11-13
  • GoLang中生成UUID唯一标识的实现
    1、什么是UUID UUID简介 通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式...
    99+
    2022-11-12
  • mysql主键id的生成方式(自增、唯一不规则)
    目录1、利用uuid函数生成唯一且不规则的主键id2、id实现自动增长1、利用uuid函数生成唯一且不规则的主键id sql: CREATE TABLE `test` ( `...
    99+
    2022-11-12
  • JS生成唯一id方式之UUID和NanoID的示例分析
    这篇文章给大家分享的是有关JS生成唯一id方式之UUID和NanoID的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、为什么 NanoID 正在取代 UUID.更安全 在大多数随机生成器中,它们使用不...
    99+
    2023-06-22
  • 利用Redis实现分布式全局ID生成
    利用Redis实现分布式全局ID生成随着互联网的发展,分布式系统的应用场景越来越多,如何生成全局唯一的ID成为了一个非常重要的问题。传统的自增ID,由于单点数据源的限制,无法满足分布式系统的需要。利用Redis作为分布式系统的全局ID生成器...
    99+
    2023-11-08
    分布式 redis ID生成
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作