redis key 命名規(guī)范的設(shè)計

Redis key 命名需具有可讀性以及可管理性鸠窗,不該使用含義不清的 key 以及特別長的 key 名妓羊;

一、實現(xiàn)目標(biāo)

簡潔稍计,高效躁绸,可維護(hù)

二、鍵值設(shè)計規(guī)約

1 臣嚣、 Redis key 命名風(fēng)格

【推薦】Redis key 命名需具有可讀性以及可管理性净刮,不該使用含義不清的 key 以及特別長的 key 名;

強(qiáng)制】以英文字母開頭硅则,命名中只能出現(xiàn)小寫字母淹父、數(shù)字、英文點(diǎn)號 (.) 和英文半角冒號(:)怎虫;

強(qiáng)制】不要包含特殊字符暑认,如下劃線、空格大审、換行蘸际、單雙引號以及其他轉(zhuǎn)義字符;

2 徒扶、命名規(guī)范

強(qiáng)制】命名規(guī)范:業(yè)務(wù)模塊名: 業(yè)務(wù)邏輯含義: 其他: value 類型

1 )業(yè)務(wù)模塊名:具體的功能模塊

2)邏輯含義段:

強(qiáng)制】不同業(yè)務(wù)邏輯含義使用英文半角冒號 (:) 分割粮彤,

【強(qiáng)制】同一業(yè)務(wù)邏輯含義段的單詞之間使用英文半角點(diǎn)號 (.) 分割,用來表示一個完整的語義

3)value 類型:

【強(qiáng)制】Redis key 命名以 key 所代表的 value 類型結(jié)尾姜骡,以提高可讀性导坟;

示例:user:basic.info:{userid}:string

3 value 設(shè)計

強(qiáng)制】:拒絕 bigkey(防止網(wǎng)卡流量圈澈、慢查詢)乍迄。

String 類型控制在 10KB 以內(nèi),Hash士败、List闯两、Set、ZSet 元素個數(shù)不要超過 5000谅将。

三漾狼、業(yè)務(wù)規(guī)范

1、【強(qiáng)制】使用 Redis 進(jìn)行緩存時饥臂,必須進(jìn)行申請逊躁。申請之前,需要拿出使用的合理方案隅熙,然后進(jìn)行評估稽煤,避免隨意使用核芽。

2、【強(qiáng)制】Redis 應(yīng)用場景應(yīng)該是純緩存服務(wù)酵熙,功能主要是緩存數(shù)據(jù)轧简,緩存數(shù)據(jù)可丟失,除特殊需求外匾二,需提供可行性哮独、可實施的方案。

3察藐、【強(qiáng)制】 關(guān)于過期時間

Redis key 一定要設(shè)置過期時間皮璧。要跟自己的業(yè)務(wù)場景,需要對 key 設(shè)置合理的過期時間分飞°参瘢可以在寫入 key 時,就要追加過期時間譬猫;也可以在需要寫入另一個 key 時讯檐,刪除上一個 key。

說明:

(1) 若不設(shè)置的話删窒,這些 key 會一直占用內(nèi)存不釋放裂垦,隨著時間的推移會越來越大,直到達(dá)到服務(wù)器的內(nèi)存上限肌索,導(dǎo)致服務(wù)器宕機(jī)等重大事故蕉拢;

(2) 對于 key 的超時時長設(shè)置,可根據(jù)業(yè)務(wù)場景進(jìn)行評估诚亚,設(shè)置合理有效期晕换;

(3) 某些業(yè)務(wù)的確需要長期有效,可以判斷即將到期時站宗,重新設(shè)置有效期闸准,避免引起熱點(diǎn) key 問題。

4梢灭、【推薦】Redis 的使用夷家,應(yīng)該考慮冷熱數(shù)據(jù)分離,不該將所有數(shù)據(jù)全部放到 Redis 中敏释,對于使用不頻繁库快,且無關(guān)緊要的信息存入 MySQL,或日志文件中钥顽,Redis 的數(shù)據(jù)存儲全部都是在內(nèi)存中的义屏,成本昂貴。

5、【推薦】Redis 有數(shù)據(jù)丟失風(fēng)險闽铐,程序處理數(shù)據(jù)時蝶怔,應(yīng)該考慮丟失后的重新加載過程。

6兄墅、【強(qiáng)制】禁止大 key

大 key 數(shù)據(jù)存? Redis踢星,除了帶來極大的內(nèi)存占用外,在并發(fā)高時察迟,很容易就會將網(wǎng)卡流量占滿斩狱,進(jìn)而造成整個服務(wù)器上的所有服務(wù)不可用耳高。雖然 Redis 支持 512MB 大小的 string扎瓶,但是假設(shè) 1mb 的 string 大 key,每秒重復(fù)寫入 10 次泌枪,就會導(dǎo)致寫入網(wǎng)絡(luò) IO 達(dá) 10MB;

(1) 讀寫大 key 會導(dǎo)致超時嚴(yán)重概荷,網(wǎng)卡流量占滿, 甚至阻塞服務(wù), 更甚者導(dǎo)致宕機(jī)風(fēng)險。

(2) 如果刪除大 key碌燕,DEL 命令可能阻塞 Redis 進(jìn)程數(shù)十秒误证,使得其他請求阻塞,對應(yīng)用程序和 Redis 集群可用性造成嚴(yán)重的影響修壕。

(3) 每個 key 不要超過 10Kb愈捅。

7、【強(qiáng)制】Redis 一定不可使用 Keys 正則匹配操作慈鸠。

8蓝谨、【推薦】選擇合適的數(shù)據(jù)類型。

目前 Redis 支持的數(shù)據(jù)庫結(jié)構(gòu)類型較多:字符串(String)青团,哈希(Hash)譬巫,列表(List),集合(Set)督笆,有序集合(Sorted Set), Bitmap, HyperLogLog 和地理空間索引(geospatial)等, 需要根據(jù)業(yè)務(wù)場景選擇合適的類型芦昔。

在不能確定其它復(fù)雜數(shù)據(jù)結(jié)構(gòu)?定優(yōu)于 String 類型時,避免使用 Redis 的復(fù)雜數(shù)據(jù)結(jié)構(gòu)娃肿。 每種數(shù)據(jù)結(jié)構(gòu)都有相應(yīng)的使?場景咕缎,String 類型是 Redis 中最簡單的數(shù)據(jù)類型,建議使用 String 類型料扰。 但是考慮到具體的業(yè)務(wù)場景凭豪,綜合評估性能、存儲網(wǎng)絡(luò)等方面之后使用適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)记罚。 需要根據(jù)業(yè)務(wù)場景選擇合適的類型墅诡,常見的如:String 可以用作普通的 K-V、簡單數(shù)據(jù)類類型等;Hash 可以用作對象如居民末早、醫(yī)生等烟馅,包含較多屬性的信息;List 可以用作息隊列然磷、醫(yī)生同行 / 關(guān)注列表等郑趁;Set 可以用于推薦;Sorted Set 可以用于排行等姿搜。

9寡润、【推薦】關(guān)于集合類操作

出現(xiàn)問題最多的就是超時問題,因為使用了 O(N) 的操作舅柜,導(dǎo)致服務(wù)超時梭纹,甚至服務(wù)不可用。

使用 Set致份,Zset变抽,List,Hash 等集合類的 O(N) 操作時要評估當(dāng)前元素個數(shù)的規(guī)模以及將來的增長規(guī)模氮块,對于短期就可能變?yōu)榇蠹系?key绍载,要預(yù)估 O(N) 操作的元素數(shù)量,避免全量操作滔蝉,可以使用 HSCAN击儡,SSCAN,ZSCAN 進(jìn)行漸進(jìn)操作蝠引。集合元素數(shù)量過大在使用過程中會影響 Redis 的實際性能阳谍,Hash 類元素個數(shù)建議盡量不要超過 100,集合類立肘、鏈表類數(shù)據(jù)盡量不要超過 10k边坤。元素數(shù)量過大可考慮拆分成多個 key 進(jìn)行處理。

寫到最后:

如果您有好的建議和想法谅年,歡迎留言茧痒,我會繼續(xù)完善文檔,提高文檔輸出質(zhì)量融蹂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旺订,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子超燃,更是在濱河造成了極大的恐慌区拳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件意乓,死亡現(xiàn)場離奇詭異樱调,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門笆凌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圣猎,“玉大人,你說我怎么就攤上這事乞而∷突冢” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵爪模,是天一觀的道長欠啤。 經(jīng)常有香客問我,道長屋灌,這世上最難降的妖魔是什么洁段? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮声滥,結(jié)果婚禮上眉撵,老公的妹妹穿的比我還像新娘侦香。我一直安慰自己落塑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布罐韩。 她就那樣靜靜地躺著憾赁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪散吵。 梳的紋絲不亂的頭發(fā)上龙考,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音矾睦,去河邊找鬼晦款。 笑死,一個胖子當(dāng)著我的面吹牛枚冗,可吹牛的內(nèi)容都是我干的缓溅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼赁温,長吁一口氣:“原來是場噩夢啊……” “哼坛怪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起股囊,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤袜匿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稚疹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體居灯,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怪嫌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片待牵。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖喇勋,靈堂內(nèi)的尸體忽然破棺而出缨该,到底是詐尸還是另有隱情,我是刑警寧澤川背,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布贰拿,位于F島的核電站,受9級特大地震影響熄云,放射性物質(zhì)發(fā)生泄漏膨更。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一缴允、第九天 我趴在偏房一處隱蔽的房頂上張望荚守。 院中可真熱鬧,春花似錦练般、人聲如沸矗漾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敞贡。三九已至,卻和暖如春摄职,著一層夾襖步出監(jiān)牢的瞬間誊役,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工谷市, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛔垢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓迫悠,卻偏偏與公主長得像鹏漆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子及皂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348