[發(fā)明專利]基于Redis的分布式ID生成方法、裝置及介質(zhì)在審
| 申請(qǐng)?zhí)枺?/td> | 202111287700.X | 申請(qǐng)日: | 2021-11-02 |
| 公開(kāi)(公告)號(hào): | CN114153893A | 公開(kāi)(公告)日: | 2022-03-08 |
| 發(fā)明(設(shè)計(jì))人: | 尚永強(qiáng) | 申請(qǐng)(專利權(quán))人: | 浪潮軟件股份有限公司 |
| 主分類號(hào): | G06F16/2458 | 分類號(hào): | G06F16/2458;G06F16/23 |
| 代理公司: | 濟(jì)南信達(dá)專利事務(wù)所有限公司 37100 | 代理人: | 潘悅梅 |
| 地址: | 271000 山東省*** | 國(guó)省代碼: | 山東;37 |
| 權(quán)利要求書: | 查看更多 | 說(shuō)明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 redis 分布式 id 生成 方法 裝置 介質(zhì) | ||
本發(fā)明公開(kāi)了基于Redis的分布式ID生成方法、裝置及介質(zhì),屬于分布式ID生成技術(shù)領(lǐng)域,要解決的技術(shù)問(wèn)題為如何在不依賴數(shù)據(jù)庫(kù)的情形下快速穩(wěn)定的生成分布式ID,并實(shí)現(xiàn)workID的自動(dòng)靈活配置。包括:應(yīng)用節(jié)點(diǎn)定時(shí)啟動(dòng)時(shí),執(zhí)行workID分配步驟為所述應(yīng)用節(jié)點(diǎn)分配workID;如果所述應(yīng)用節(jié)點(diǎn)已被分配workID,判斷Redis中存儲(chǔ)的value值是否與所述應(yīng)用節(jié)點(diǎn)的value值一致,如果一致,根據(jù)需要選擇性地更新所述應(yīng)用節(jié)點(diǎn)的過(guò)期時(shí)間,如果不一致,執(zhí)行workID分配步驟重新為所述應(yīng)用節(jié)點(diǎn)分配workID;對(duì)于超過(guò)過(guò)期時(shí)間的應(yīng)用節(jié)點(diǎn),將所述應(yīng)用節(jié)點(diǎn)的workID釋放并回收,重新生成空閑列表并存儲(chǔ)至Redis。
技術(shù)領(lǐng)域
本發(fā)明涉及分布式ID生成技術(shù)領(lǐng)域,具體地說(shuō)是基于Redis的分布式ID 生成方法、裝置及介質(zhì)。
背景技術(shù)
現(xiàn)有的分布式ID生成方案包括數(shù)據(jù)庫(kù)自增長(zhǎng)序列、UUID以及 UID-Generator等。
數(shù)據(jù)庫(kù)自增長(zhǎng)序列是最常見(jiàn)的方式之一,利用數(shù)據(jù)庫(kù)生成,全數(shù)據(jù)庫(kù)唯一。其具有如下缺點(diǎn):
(1)不同數(shù)據(jù)庫(kù)語(yǔ)法和實(shí)現(xiàn)不同,數(shù)據(jù)庫(kù)遷移的時(shí)候或多數(shù)據(jù)庫(kù)版本支持的時(shí)候需要進(jìn)行處理;
(2)在單個(gè)數(shù)控或讀寫分離或一主多從的情況下,只有一個(gè)主庫(kù)可以生成,有單點(diǎn)故障的風(fēng)險(xiǎn);
(3)在性能達(dá)不到要求的情況下,比較難以擴(kuò)展;
(4)如果遇見(jiàn)多個(gè)系統(tǒng)需要合并或涉及到數(shù)據(jù)遷移會(huì)相當(dāng)痛苦;
(5)分表分庫(kù)的時(shí)候會(huì)有麻煩。
UUID是常見(jiàn)方式,可以利用數(shù)據(jù)庫(kù)生成,可以利用程序生成,一般來(lái)說(shuō)全球唯一。其具有如下缺點(diǎn):
(1)沒(méi)有排序,無(wú)法保證趨勢(shì)遞增;
(2)UUID往往是使用字符串存儲(chǔ),查詢的效率比較低;
(3)存儲(chǔ)空間比較大,如果是海量數(shù)據(jù)庫(kù),就需要考慮存儲(chǔ)量的問(wèn)題;
(4)傳輸數(shù)據(jù)量大。
UidGenerator項(xiàng)目基于snowflake原理實(shí)現(xiàn),只是修改了機(jī)器ID部分的定義(實(shí)例重啟的次數(shù)),并且64位bit的分配支持配置,官方提供的默認(rèn)分配方式如圖1所示。Snowflake算法描述:指定機(jī)器同一時(shí)刻某一并發(fā)序列,是唯一的。據(jù)此可生成一個(gè)64bits的唯一ID(long)。
sign(1bit),固定1bit符號(hào)標(biāo)識(shí),即生成的UID為正數(shù);
delta seconds(28bits),當(dāng)前時(shí)間,相對(duì)于時(shí)間基點(diǎn)2016-05-20的增量值,單位:秒,最多可支持約8.7年;
worker id(22bits),機(jī)器id,最多可支持約420w次機(jī)器啟動(dòng)。內(nèi)置實(shí)現(xiàn)為在啟動(dòng)時(shí)由數(shù)據(jù)庫(kù)分配,默認(rèn)分配策略為用后即棄,后續(xù)可提供復(fù)用策略;
sequence(13bits),每秒下的并發(fā)序列,13bits可支持每秒8192個(gè)并發(fā)。
該UidGenerator只能用8.7年,機(jī)器ID總共有420萬(wàn)個(gè),應(yīng)用重啟一次減少一個(gè)。
在復(fù)雜分布式系統(tǒng)中,需要對(duì)大量的數(shù)據(jù)和消息進(jìn)行唯一標(biāo)識(shí)。傳統(tǒng)的數(shù)據(jù)庫(kù)自增主鍵,或者單體的自增主鍵,已經(jīng)不能滿足需求。
傳統(tǒng)的基于雪花算法實(shí)現(xiàn)的分布式ID生成器,由于應(yīng)用較少可以手動(dòng)配置workId。目前大多數(shù)公司的系統(tǒng)使用的都是微服務(wù)架構(gòu),微服務(wù)架構(gòu)將應(yīng)用程序構(gòu)造為一組松散耦合的服務(wù),服務(wù)是細(xì)粒度的,應(yīng)用數(shù)量比較多,并且使用容器化部署,軟件系統(tǒng)會(huì)根據(jù)負(fù)載情況自動(dòng)擴(kuò)容和縮容,應(yīng)用沒(méi)有固定的IP,不能像傳統(tǒng)應(yīng)用那樣進(jìn)行手動(dòng)設(shè)置雪花算法中的workId。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于浪潮軟件股份有限公司,未經(jīng)浪潮軟件股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購(gòu)買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請(qǐng)聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202111287700.X/2.html,轉(zhuǎn)載請(qǐng)聲明來(lái)源鉆瓜專利網(wǎng)。
- Redis的主從切換方法、裝置及redis系統(tǒng)
- 一種redis管理虛擬IP地址的方法、裝置及redis系統(tǒng)
- 一種Redis集群容量調(diào)整的方法、裝置及存儲(chǔ)介質(zhì)
- 一種保障redis集群可用性的方法
- 一種Redis集群的高可用方法及裝置
- 一種redis節(jié)點(diǎn)主從切換方法及裝置
- 一種大數(shù)據(jù)場(chǎng)景下消息處理的方法及終端
- Redis集群處理方法、裝置、電子設(shè)備及計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)
- 一種應(yīng)用于Redis客戶端的查詢請(qǐng)求過(guò)濾方法及Redis客戶端
- Redis緩存刷新方法及裝置





