Redis 鍵名的設計

2021-08-25 19:38:05 字數 3195 閱讀 9120

結構化資料庫的特點在於,需要事先嚴格定義好欄位名,字段型別,長度,預設值,取值範圍,約束條件等,而且必須保證所有記錄的所有欄位都嚴格按結構設計來儲存資料,否則不允許儲存。關係型資料庫在入庫前進行了大量的檢查和處理工作,如 sql server, oracle, mysql, postgersql。

半結構化資料庫則沒有這些限制,可以較靈活地儲存資料,入庫時資料庫本身不做嚴格檢查,而是到客戶端應用程式使用時,再檢查資料的正確性和可用性,這樣可極大提高資料的讀寫效能,如 mongodb, hbase ,redis。

redis資料庫是乙個鍵值對資料庫,提供了5種基本資料型別 (string, list, hash, set, zset),利用鍵名對資料內容進行儲存和讀取。redis的業務處理邏輯,包含在鍵值的設計中,一般是利用實際的業務資料,動態拼裝鍵名,來進行相關資料的儲存和讀取。因此客戶端應用程式需要有乙個統一的鍵值設計方案,才能有效實現相應的業務邏輯。

以下提供的命名專案,中間用冒號(:)分隔,其中(2,3,4,6)項是基本的,其他專案可以根據需要進行取捨使用。

序號

條目

說明

舉例1

實體族也可理解為命令空間,schema等

sys2

實體名

表名,包括系統表

user

3查詢欄位名

查詢字段,或用於定位相關業務資訊

預設字段可以省略不寫,如主鍵字段

userid

4查詢字段值

具體業務內容,跟查詢欄位名對應

8885

資料值對應的列族名

字段族,參考hbase的結構設計

base

6資料值對應的列名

當前鍵要儲存的資料值對應的資料列名

即當 【查詢欄位名】= 【查詢字段值】時, 獲得的內容對應的資料列名

username

7資料值的版本號

參考hbase的結構設計,可保留值的多個版本資訊

8資料值的時間戳

參考hbase的結構設計

表名: user

序號

欄位名

說明1

userid

使用者id

2username

使用者名稱

3userole

使用者角色

4password

使用者密碼

5isactive

使用者是否有效

表名: role

序號

欄位名

說明1

roleid

關係型資料庫的表物理主鍵,在redis中,若沒有引用,則可不要

2rolename

角色名稱,固定值為 visitor, admin

表名:loginlog :登入歷史表

序號

欄位名

說明1

loginlogid

關係型資料庫的表物理主鍵,在redis中,若沒有引用,則可不要

2userid

使用者名稱

3logintime

登入時間

4logouttime

退出時間

序號

欄位名

說明1

onlineid

關係型資料庫的表物理主鍵,在redis中,若沒有引用,則可不要

2userid

使用者id

3logintime

登入時間

4token

令牌序號

鍵名設計

(包含的內容)

舉例1

1:2:3:4:5:6:7:8

key = sys:user:userid:888:base:username:1:217453

value = username的值

說明:通過userid, 儲存、讀取 username 資訊

22:3:4:6

實體名:查詢欄位名:字段值:列名

key = user:userid:888:username:

value = username的值

說明:通過userid, 獲得username

key = user:username:edwin:userid

value = userid

說明:通過username 找到 userid

32:4:6

實體名:字段值:列名

key = user:888:username (對應主鍵欄位名為 userid)

value = username的值

只適合主鍵字段(或每個實體的預設字段),開發過程中應該非常明確,沒有歧義

不建議根據資料型別來區別不同字段,**容易混

42:4

實體名: 字段值

key = user:888   (對應預設主鍵字段: userid)

value = 跟當前userid 相關的值列表

52:3

實體名:欄位名

key = online:userid

value = userid列表62:

實體名:

key = loginlog:

value = 日誌列表

7擴充套件用法

結合多個列,甚至多個實體的組合鍵設計

在redis 中,所有鍵名都是唯一的,且都在同乙個物理結構級別,不分層級;但不同的鍵值,儲存的業務資訊各不相同,業務層級結構各不相同

儲存整個資料庫的系統資訊

儲存某個 entity的整體資訊,

儲存entity的一條記錄;

儲存entity的一條記錄的乙個欄位的值

儲存一對多的關係,

儲存多對多的關係,等等

php array keys 返回陣列的鍵名

array keys返回陣列中部分的或所有的鍵名 說明array array keys array array mixed search value bool strict false array keys 返回 array 陣列中的數字或者字串的鍵名。如果指定了可選引數 search value,...

Redis快取設計

策略 一致性維護成本 lru lrf fifo最差低 超時剔除 較差較低 主動更新強高 低一致性業務 最大記憶體和淘汰策略的方式,maxmemory policy 高一致性業務 超時剔除和主動更新 解決快取穿透 適用場景 維護成本 快取空物件 資料命中不高,資料頻繁變化實時性高 維護簡單,需要過多的...

redis 快取設計

1 快取穿透 查詢乙個不存在的key 資料,快取層和儲存層都不會命中,將導致不存在的資料每次請求都要到儲存層去查詢,失去快取保護db 的意義。解決方案 有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器 不了解的可以看這裡 將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一...