欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis生成全局唯一ID的實現方法

 更新時間:2022年06月09日 15:58:19   作者:SLC神奇的阿杜跟  
全局唯一ID生成器是一種在分布式系統(tǒng)下用來生成全局唯一ID的工具,本文主要介紹了Redis生成全局唯一ID的實現方法,具有一定的參考價值,感興趣的可以了解一下

簡介:

全局唯一ID生成器是一種在分布式系統(tǒng)下用來生成全局唯一ID的工具

特性:

  • 唯一性
  • 高性能
  • 安全性
  • 高可用
  • 遞增性

生成規(guī)則:

有時為了增加ID的安全性,我們可以不直接使用Redis自增的數值,而是拼接一些其他信息

ID組成部分:

  • 符號位:1bit,永遠為0
  • 時間戳:31bit,以秒為單位,可以使用69年
  • 序列號:32bit,秒內的計數器,支持每秒產生2^32個不同ID

 ID生成類:

package com.example.util;

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;

/**
?* @Author DaBai
?* @Date 2022/3/17 下午 09:25
?* @Version 1.0
?*/

@Component
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 nowScond = now.toEpochSecond(ZoneOffset.UTC);
? ? ? ? long timestamp = nowScond - BEGIN_TIMESTAMP;
? ? ? ? //2、生成序列號
? ? ? ? // 2.1 獲取當前日期,精確到天
? ? ? ? String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));
? ? ? ? long count = stringRedisTemplate.opsForValue().increment("icr" + keyPrefix + ":" + date);

? ? ? ? //3、拼接字符串
? ? ? ? // 時間戳左移32位,然后 或 序列號,有1為1
? ? ? ? long ids = timestamp << COUNT_BITS | count;
? ? ? ? return ids;
? ? }

測試類:

@Resource
? ? RedisIDWorker redisIDWorker;

? ? private ExecutorService es = Executors.newFixedThreadPool(500);

? ? @Test
? ? public void ShowID() throws InterruptedException {
? ? ? ? CountDownLatch countDownLatch = new CountDownLatch(300);
? ? ? ? Runnable task = () -> {
? ? ? ? ? ? for (int i = 0; i < 100; i++) {
? ? ? ? ? ? ? ? long id = redisIDWorker.nextID("order");
? ? ? ? ? ? ? ? System.out.println("id = " + id);
? ? ? ? ? ? }
? ? ? ? ? ? countDownLatch.countDown();
? ? ? ? };
? ? ? ? long startTime = System.currentTimeMillis();
? ? ? ? for (int i = 0; i < 300; i++) {
? ? ? ? ? ? es.submit(task);
? ? ? ? }
? ? ? ? countDownLatch.await();
? ? ? ? long end = System.currentTimeMillis();
? ? ? ? System.out.println("time = " + (end - startTime));
? ? }

到此這篇關于Redis生成全局唯一ID的實現方法的文章就介紹到這了,更多相關Redis生成全局唯一ID內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Redis慢查詢的具體使用

    Redis慢查詢的具體使用

    慢查詢顧名思義就是比較慢的查詢,但是究竟是哪里慢呢?本文詳細的介紹了Redis慢查詢的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-06-06
  • redis分布式鎖與zk分布式鎖的對比分析

    redis分布式鎖與zk分布式鎖的對比分析

    這篇文章主要介紹了redis分布式鎖與zk分布式鎖的對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Redis3.2.11在centos9安裝與卸載過程詳解

    Redis3.2.11在centos9安裝與卸載過程詳解

    這篇文章主要介紹了Redis3.2.11在centos9安裝與卸載過程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 淺析Redis中String數據類型及其底層編碼

    淺析Redis中String數據類型及其底層編碼

    這篇文章主要介紹?Redis?中?String?數據類型及其底層編碼,文中有詳細的代碼示例,對大家的工作及學習有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • redis遠程連接不上的解決辦法

    redis遠程連接不上的解決辦法

    本文主要介紹了redis遠程連接不上的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • 在Centos?8.0中安裝Redis服務器的教程詳解

    在Centos?8.0中安裝Redis服務器的教程詳解

    由于考慮到linux服務器的性能,所以經常需要把一些中間件安裝在linux服務上,今天通過本文給大家介紹下在Centos?8.0中安裝Redis服務器的詳細過程,感興趣的朋友一起看看吧
    2022-03-03
  • Redis性能大幅提升之Batch批量讀寫詳解

    Redis性能大幅提升之Batch批量讀寫詳解

    這篇文章主要給大家介紹了關于Redis性能大幅提升之Batch批量讀寫的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來跟著小編一起來學習學習吧。
    2017-06-06
  • 64位Windows下安裝Redis教程

    64位Windows下安裝Redis教程

    這篇文章主要介紹了64位Windows下安裝Redis教程,本文使用Microsoft Open Tech group 在 GitHub上開發(fā)的一個Win64版本的Redis,需要的朋友可以參考下
    2014-09-09
  • Redis筆記點贊排行榜的實現示例

    Redis筆記點贊排行榜的實現示例

    探店筆記類似點評網站的評價,本文主要介紹了Redis筆記點贊排行榜的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Linux安裝Redis、后臺運行、系統(tǒng)自啟動的設置方法

    Linux安裝Redis、后臺運行、系統(tǒng)自啟動的設置方法

    Redis是用C語言編寫的開源免費的高性能的分布式內存數據庫,基于內存運行并支持持久化的NoSQL數據庫。這篇文章主要介紹了Linux安裝Redis、后臺運行、系統(tǒng)自啟動,需要的朋友可以參考下
    2020-01-01

最新評論