關於redis key命名規範的設計
一、實現目標
簡潔,高效,可維護
二、鍵值設計規約
1 、 redis key命名風格
【推薦】redis key命名需具有可讀性以及可管理性,不該使用含義不清的key以及特別長的key名;
【強制】以英文本母開頭,命名中只能出現小寫字母、數字、英文點號(.)和英文半形冒號(?;
【強制】不要包含特殊字元,如下劃線、空格、換行、單雙引號以及其他轉義字元;
2 、命名規範
【強制】命名規範:業務模組名:業務邏輯含義:其他:value型別
1 )業務模組名:具體的功能模組
2)邏輯含義段:
【強制】不同業務邏輯含義使用英文半形冒號(:)分割,
【強制】同一業務邏輯含義段的單詞之間使用英文半形點號 (.)分割,用來表示乙個完整的語義
3)value型別:
【強制】redis key命名以key所代表的value型別結尾,以提高可讀性;
示例:user:basic.info::string
3 、 value 設計
【強制】:拒絕bigkey(防止網絡卡流量、慢查詢)。
string型別控制在10kb以內,hash、list、set、zset元素個數不要超過5000。
三、業務規範
1、【強制】使用redis進行快取時,必須進行申請。申請之前,需要拿出使用的合理方案,然後進行評估,避免隨意使用。
2、【強制】redis應用場景應該是純快取服務,功能主要是快取資料,快取資料可丟失,除特殊需求外,需提供可行性、可實施的方案。
3、【強制】 關於過期時間
redis key一定要設定過期時間。要跟自己的業務場景,需要對key設定合理的過期時間。可以在寫入key時,就要追加過期時間;也可以在需要寫入另乙個key時,刪除上乙個key。
說明:(1)若不設定的話,這些key會一直占用記憶體不釋放,隨著時間的推移會越來越大,直到達到伺服器的記憶體上限,導致伺服器宕機等重大事故;
(2)對於key的超時時長設定,可根據業務場景進行評估,設定合理有效期;
(3)某些業務的確需要長期有效,可以判斷即將到期時,重新設定有效期,避免引起熱點key問題。
4、【推薦】redis的使用,應該考慮冷熱資料分離,不該將所有資料全部放到redis中,對於使用不頻繁,且無關緊要的資訊存入mysql,或日誌檔案中,redis的資料儲存全部都是在記憶體中的,成本昂貴。
6、【強制】禁止大key
大key資料存⼊redis,除了帶來極大的記憶體占用外,在併發高時,很容易就會將網絡卡流量佔滿,進而造成整個伺服器上的所有服務不可用。雖然redis支援512mb大小的string,但是假設1mb的string大key,每秒重複寫入10次,就會導致寫入網路io達10mb;
(1)讀寫大key會導致超時嚴重,網絡卡流量佔滿,甚至阻塞服務,更甚者導致宕機風險。
(2)如果刪除大key,del命令可能阻塞redis程序數十秒,使得其他請求阻塞,對應用程式和redis集群可用性造成嚴重的影響。
(3)每個key不要超過10kb。
7、【強制】redis一定不可使用keys正則匹配操作。
8、【推薦】選擇合適的資料型別。
目前redis支援的資料庫結構型別較多:字串(string),雜湊(hash),列表(list),集合(set),有序集合(sorted set), bitmap, hyperloglog和地理空間索引(geospatial)等,需要根據業務場景選擇合適的型別。
在不能確定其它複雜資料結構⼀定優於string型別時,避免使用redis的複雜資料結構。 每種資料結構都有相應的使⽤場景,string型別是redis中最簡單的資料型別,建議使用string型別。 但是考慮到具體的業務場景,綜合評估效能、儲存網路等方面之後使用適當的資料結構。 需要根據業務場景選擇合適的型別,常見的如:string可以用作普通的k-v、簡單資料類型別等;hash可以用作物件如居民、醫生等,包含較多屬性的資訊;list可以用作息佇列、醫生同行/關注列表等;set可以用於推薦;sorted set可以用於排行等。
9、【推薦】關於集合類操作
出現問題最多的就是超時問題,因為使用了o(n)的操作,導致服務超時,甚至服務不可用。
使用set,zset,list,hash等集合類的o(n)操作時要評估當前元素個數的規模以及將來的增長規模,對於短期就可能變為大集合的key,要預估o(n)操作的元素數量,避免全量操作,可以使用hscan,sscan,zscan進行漸進操作。集合元素數量過大在使用過程中會影響redis的實際效能,hash類元素個數建議盡量不要超過100,集合類、鍊錶類資料盡量不要超過10k。元素數量過大可考慮拆分成多個key進行處理。
redis key命名規範
1.建議全部大寫 2.key不能太長也不能太短,鍵名越長越佔資源,太短可讀性太差 3.key 單詞與單詞之間以 分開 user idusername age1 zhangsan182 lisi 164.redis使用的時候注意命名空間,乙個專案乙個命名空間,專案內業務不同命名空間也不同。一般情況下 ...
關於命名規範
一 常用命令命名方法 小駝峰法標識。駝峰法的意思是 除第乙個單詞之外,其他單詞首字母大寫。譬如 int mystudentcount 變數mystudentcount第乙個單詞是全部小寫,後面的單詞首字母大寫。pascal法 大駝峰法 相比小駝峰法,大駝峰法把第乙個單詞的首字母也大寫了。常用於類名,...
關於MySQL的命名規範
字段長度固定,或者長度近似的業務場景,適合使用char,能夠減少碎片,查詢效能高。字段長度相差較大,或者更新較少的業務場景,適合使用varchar,能夠減少空間 使用varchar 20 儲存手機號,不要使用整數 user id int 11 not null auto increment prim...