最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis生成全局唯一ID的實(shí)現(xiàn)方法

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

簡(jiǎn)介:

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

特性:

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

生成規(guī)則:

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

ID組成部分:

  • 符號(hào)位:1bit,永遠(yuǎn)為0
  • 時(shí)間戳:31bit,以秒為單位,可以使用69年
  • 序列號(hào):32bit,秒內(nèi)的計(jì)數(shù)器,支持每秒產(chǎn)生2^32個(gè)不同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;

? ? /**
? ? ?* 序列號(hào)位數(shù)
? ? ?*/
? ? private static final int COUNT_BITS = 32;

? ? private StringRedisTemplate stringRedisTemplate;

? ? public RedisIDWorker(StringRedisTemplate stringRedisTemplate) {
? ? ? ? this.stringRedisTemplate = stringRedisTemplate;
? ? }


? ? public long nextID(String keyPrefix) {
? ? ? ? //1、生成時(shí)間戳
? ? ? ? LocalDateTime now = LocalDateTime.now();
? ? ? ? long nowScond = now.toEpochSecond(ZoneOffset.UTC);
? ? ? ? long timestamp = nowScond - BEGIN_TIMESTAMP;
? ? ? ? //2、生成序列號(hào)
? ? ? ? // 2.1 獲取當(dāng)前日期,精確到天
? ? ? ? String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));
? ? ? ? long count = stringRedisTemplate.opsForValue().increment("icr" + keyPrefix + ":" + date);

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

測(cè)試類:

@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));
? ? }

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

相關(guān)文章

  • 一篇吃透Redis緩存穿透、雪崩、擊穿問(wèn)題

    一篇吃透Redis緩存穿透、雪崩、擊穿問(wèn)題

    這篇文主要介紹了Redis緩存穿透,緩存雪崩,緩存擊穿的問(wèn)題解決方法,文中有詳細(xì)的圖文介紹,對(duì)大家了解Redis有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Deepin UOS編譯安裝Redis的實(shí)現(xiàn)步驟

    Deepin UOS編譯安裝Redis的實(shí)現(xiàn)步驟

    本文主要介紹了Deepin UOS編譯安裝Redis的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Redis?Lua同步鎖實(shí)現(xiàn)源碼解析

    Redis?Lua同步鎖實(shí)現(xiàn)源碼解析

    這篇文章主要為大家介紹了Redis?Lua同步鎖實(shí)現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • redis部署及各種數(shù)據(jù)類型使用命令詳解

    redis部署及各種數(shù)據(jù)類型使用命令詳解

    這篇文章主要介紹了redis部署及各種數(shù)據(jù)類型使用命令,編譯安裝redis及部署過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • redis通過(guò)redis-dump鏡像實(shí)現(xiàn)數(shù)據(jù)遷移

    redis通過(guò)redis-dump鏡像實(shí)現(xiàn)數(shù)據(jù)遷移

    本文主要介紹了redis通過(guò)redis-dump鏡像實(shí)現(xiàn)數(shù)據(jù)遷移,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 關(guān)于Redis單線程的正確理解

    關(guān)于Redis單線程的正確理解

    很多同學(xué)對(duì)Redis的單線程和I/O多路復(fù)用技術(shù)并不是很了解,所以我用簡(jiǎn)單易懂的語(yǔ)言讓大家了解下Redis單線程和I/O多路復(fù)用技術(shù)的原理,對(duì)學(xué)好和運(yùn)用好Redis打下基礎(chǔ),感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • redis加鎖的幾種方式匯總

    redis加鎖的幾種方式匯總

    這篇文章主要介紹了redis加鎖的幾種方式匯總,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 啟動(dòng)redis出現(xiàn)閃退情況的解決辦法

    啟動(dòng)redis出現(xiàn)閃退情況的解決辦法

    最近使用Redis遇到啟動(dòng)閃退的問(wèn)題,查閱資料后在一位大神的文章中找到了答案,這篇文章主要給大家介紹了關(guān)于啟動(dòng)redis出現(xiàn)閃退情況的解決辦法,需要的朋友可以參考下
    2023-11-11
  • Redis存取序列化與反序列化性能問(wèn)題詳解

    Redis存取序列化與反序列化性能問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于Redis存取序列化與反序列化性能問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • redis事務(wù)如何解決超賣問(wèn)題

    redis事務(wù)如何解決超賣問(wèn)題

    使用Redis事務(wù)可以有效避免超賣問(wèn)題,首先,通過(guò)MULTI命令開啟事務(wù),將需要執(zhí)行的多個(gè)命令加入到事務(wù)中,然后通過(guò)EXEC命令提交事務(wù),確保這些命令可以一次性、順序地執(zhí)行,在事務(wù)執(zhí)行期間,Redis服務(wù)器不會(huì)執(zhí)行其他客戶端的命令
    2024-11-11

最新評(píng)論

通城县| 乡宁县| 留坝县| 疏勒县| 富民县| 图们市| 方山县| 洛南县| 高唐县| 昆山市| 阳东县| 峡江县| 神池县| 石泉县| 楚雄市| 宣城市| 雷州市| 兰州市| 新巴尔虎右旗| 遂溪县| 彩票| 贵州省| 远安县| 漳浦县| 江城| 前郭尔| 崇仁县| 桂东县| 皮山县| 阿城市| 万载县| 息烽县| 温州市| 德安县| 深水埗区| 乌海市| 澎湖县| 馆陶县| 稷山县| 濉溪县| 临汾市|