SpringBoot+Redis全局唯一ID生成器


📦 優雅版 Redis ID 生成器工具類

支持:

  • 項目啟動時自動初始化起始值
  • 獲取自增 ID 方法
  • yml 配置化起始值
  • 可靈活擴展多業務線 ID

📌 application.yml 配置

id-generator:member-start-value: 1000000000

📌 配置類:IdGeneratorProperties.java

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** Redis ID生成器相關配置*/
@Data
@Component
@ConfigurationProperties(prefix = "id-generator")
public class IdGeneratorProperties {/*** 會員ID生成器初始值*/private Long memberStartValue;
}

📌 工具類:RedisIdInitializer.java

import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;/*** Redis ID生成器初始化 & 獲取工具類** 功能:* 1. 項目啟動時,自動初始化自增ID起始值* 2. 提供獲取下一個會員ID的方法** 優勢:* - 保證全局唯一、線程安全、自增遞增* - 配置化管理,靈活可控* - 起始值高位,避免與老數據沖突*/
@Component
@RequiredArgsConstructor
public class RedisIdInitializer {private final StringRedisTemplate stringRedisTemplate;private final IdGeneratorProperties idGeneratorProperties;/*** Redis中會員ID生成器的key*/private static final String MEMBER_ID_KEY = "member:id:generator";/*** 項目啟動時自動執行,初始化會員ID起始值*/@PostConstructpublic void initMemberIdStartValue() {// 檢查 key 是否已存在,防止覆蓋已用值Boolean hasKey = stringRedisTemplate.hasKey(MEMBER_ID_KEY);if (Boolean.FALSE.equals(hasKey)) {stringRedisTemplate.opsForValue().set(MEMBER_ID_KEY, String.valueOf(idGeneratorProperties.getMemberStartValue()));System.out.println("會員ID初始值已設置為:" + idGeneratorProperties.getMemberStartValue());}}/*** 獲取下一個會員ID** @return 下一個遞增會員ID*/public Long getNextMemberId() {return stringRedisTemplate.opsForValue().increment(MEMBER_ID_KEY);}
}

📌 使用方式

@Autowired
private RedisIdInitializer redisIdInitializer;// 獲取下一個會員ID
Long newMemberId = redisIdInitializer.getNextMemberId();
System.out.println("新生成會員ID:" + newMemberId);

📊 總結

優勢說明
全局唯一Redis INCR 原子性保障
并發安全多線程/多服務節點同時操作也無沖突
起始值高位避免與已有數據庫自增ID沖突
配置化yml配置,隨時靈活調整
易擴展支持多業務線ID(如 order:id:generatorcard:id:generator
性能高Redis內存操作,單次耗時微秒級

📦 后續擴展建議

? 支持多類型 ID(會員ID、訂單ID、卡號ID)
? ID帶日期前綴(2025043000001)
? 超過int最大值時,自動預警 or 換成Bigint


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77921.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77921.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入掌握CSS背景圖片:從基礎到實戰

背景圖片: 本文將通過系統化的講解實戰案例,幫助讀者徹底掌握CSS背景圖片的六大核心知識點。每個知識點都包含對比演示和記憶技巧,建議結合代碼實操學習。 一、背景圖片基礎設置 使用background-image(路徑)屬性設置…

WPF之XAML基礎

文章目錄 XAML基礎:深入理解WPF和UWP應用開發的核心語言1. XAML簡介XAML與XML的關系 2. XAML語法基礎元素語法屬性語法集合語法附加屬性 3. XAML命名空間命名空間映射關系 4. XAML標記擴展靜態資源引用數據綁定相對資源引用常見標記擴展對比 5. XAML與代碼的關系XAM…

驅動車輛診斷測試創新 | 支持診斷測試的模擬器及數據文件轉換生成

一 背景和挑戰 | 背景: 隨著汽車功能的日益豐富,ECU和域控制器的復雜性大大增加,導致測試需求大幅上升,尤其是在ECU的故障診斷和性能驗證方面。然而,傳統的實車測試方法難以滿足高頻率迭代和驗證需求,不僅…

免疫細胞靶點“破局戰”:從抗體到CAR-T,自免疾病治療的3大技術突破

引言 人體免疫系統組成了一個嚴密調控的“網絡”,時刻檢測著外來病原體,并將其與自身抗原區分開來。但免疫系統也可能會被“策反”,錯誤的攻擊我們自身,從而導致自身免疫性疾病的發生。 目前已知的自免疾病超過100種&#xff0c…

計算機網絡應用層(5)-- P2P文件分發視頻流和內容分發網

💓個人主頁:mooridy 💓專欄地址:《計算機網絡:自頂向下方法》 大綱式閱讀筆記_mooridy的博客-CSDN博客 💓本博客內容為《計算機網絡:自頂向下方法》第二章應用層第五、六節知識梳理 關注我&…

十二種存儲器綜合對比——《器件手冊--存儲器》

存儲器 名稱 特點 用途 EEPROM 可電擦除可編程只讀存儲器,支持按字節擦除和寫入操作,具有非易失性,斷電后數據不丟失。 常用于存儲少量需要頻繁更新的數據,如設備配置參數、用戶設置等。 NOR FLASH 支持按字節隨機訪問&…

第十六屆藍橋杯 2025 C/C++組 旗幟

目錄 題目: 題目描述: 題目鏈接: 思路: 思路詳解: 代碼: 代碼詳解: 題目: 題目描述: 題目鏈接: P12340 [藍橋杯 2025 省 AB/Python B 第二場] 旗幟 -…

比亞迪再獲國際雙獎 以“技術為王”書寫中國汽車出海新篇章

近日,全球汽車行業權威獎項“2025世界汽車大獎”(World Car Awards)在紐約國際車展舉行頒獎典禮,比亞迪海鷗(BYD SEAGULL/BYD DOLPHIN MINI)摘得“2025世界城市車(World Urban Car)”…

人工智能數學基礎(五):概率論

概率論是人工智能中處理不確定性的核心工具,它為機器學習、數據科學和統計分析提供了理論基礎。本文將深入淺出地介紹概率論的重要概念,并結合 Python 實例,幫助讀者更好地理解和應用這些知識。資源綁定附上完整資源供讀者參考學習&#xff0…

MCP協議:自然語言與結構化數據的雙向橋梁 ——基于JSON-RPC 2.0的標準化實踐

MCP協議:自然語言與結構化數據的雙向橋梁 ——基于JSON-RPC 2.0的標準化實踐 一、MCP的本質:標準化共識的協議框架 MCP(Model Context Protocol)是Anthropic于2024年提出的開放通信協議,其核心價值在于建立自然語言…

vue+django農產品價格預測和推薦可視化系統[帶知識圖譜]

文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站,有好處! ?編號:D010 vue django 前后端分離架構搭建的系統帶有推薦算法、價格預測、可視化、知識圖譜數據從爬蟲獲取可以更新到最…

verilog_testbench技巧

forever語句 forever begin state; end 一直執行state repeat(n) begin state; end 執行state,n次 force語句對雙向端口進行輸入賦值。 與wait 是邊沿觸發,wait是電平觸發 仿真控制語句與系統任務描述 $stop停止仿真…

實時時鐘(RTC)從原理到實戰

1. RTC技術深度解析 1.1 RTC核心概念 實時時鐘(Real-Time Clock,RTC)是嵌入式系統中獨立于主處理器的特殊計時電路,其核心功能在于提供持續可靠的時間基準。與CPU時鐘不同,RTC具有以下關鍵特性: 獨立供電…

pyspark將hive數據寫入Excel文件中

不多解釋直接上代碼,少python包的自己直接下載 #!/usr/bin/env python # -*- encoding: utf-8 -*- from pyspark.sql import SparkSession import pandas as pd import os# 初始化 SparkSession 并啟用 Hive 支持 spark SparkSession.builder \.appName("sel…

Stack--Queue 棧和隊列

一、Stack--棧 1.1 什么是棧? 堆棧是一種容器適配器,專門設計用于在 LIFO 上下文(后進先出)中運行,其中元素僅從容器的一端插入和提取。 第一個模版參數T:元素的類型;第二個模版參數Container…

用Python做有趣的AI項目1:用 TensorFlow 實現圖像分類(識別貓、狗、汽車等)

項目目標 通過構建卷積神經網絡(CNN),讓模型學會識別圖片中是什么物體。我們將使用 CIFAR-10 數據集,它包含 10 類:飛機、汽車、鳥、貓、鹿、狗、青蛙、馬、船和卡車。 🛠? 開發環境與依賴 安裝依賴&…

3D可視化編輯器模版

體驗地址:http://mute.turntip.cn 整個搭建平臺核心模塊包含如下幾個部分: 3D場景渲染 組件拖拽系統 元素編輯功能 狀態管理 歷史記錄與撤銷/重做 技術棧 前端框架與庫 React 18 用于構建用戶界面的JavaScript庫 Next.js 14 React框架,提供服…

“連接世界的橋梁:深入理解計算機網絡應用層”

一、引言 當你瀏覽網頁、發送郵件、聊天或觀看視頻時,這一切都離不開計算機網絡中的應用層(Application Layer)。 應用層是網絡協議棧的最頂層,直接為用戶的各種應用程序提供服務。它為用戶進程之間建立通信橋梁,屏蔽了…

JavaScript 代碼搜索框

1. 概述與需求分析 功能&#xff1a;在網頁中實時搜索用戶代碼、關鍵字&#xff1b;展示匹配行、文件名&#xff1b;支持高亮、正則、模糊匹配。非功能&#xff1a;大文件集&#xff08;幾十萬行&#xff09;、高并發、響應 <100ms&#xff1b;支持增量索引和熱更新。 2. …

【運維】Ubuntu apt 更新失敗?Temporary failure resolving ‘cn.archive.ubuntu.com‘ 問題

Ubuntu apt 更新失敗&#xff1f;Temporary failure resolving ‘cn.archive.ubuntu.com’ 問題 在使用 Ubuntu 時&#xff0c;你是否遇到過這樣一個煩人的錯誤&#xff1a; Temporary failure resolving ‘cn.archive.ubuntu.com’ 如果你也踩坑了&#xff0c;別慌&#xff0…