Redis key的設計技巧
一,key設計原則
- 把表名轉換爲key前綴, 比如: tag:
- 第二段放置用於區分key的字段–對應mysql中的主鍵的列名
- 第三段放置主鍵值
- 第三段寫列名
二,案例
用戶表user, 轉換爲redis的key-value存儲
uid username password phone
1 zhangsan 123 12222222
2 lisi 123 11111111
轉儲redis
127.0.0.1:7004> set user:uid:1:username zhangsan
-> Redirected to slot [7756] located at 127.0.0.1:7005
OK
127.0.0.1:7005> set user:uid:1:password 123
-> Redirected to slot [3299] located at 127.0.0.1:7004
OK
127.0.0.1:7004> set user:uid:1:phone 13333333
OK
獲取信息 單機模式
127.0.0.1:7004> keys user:uid:1*
1) "user:uid:1:phone"
2) "user:uid:1:password"
集羣模式則需要在所有nodes中輸入該命令,最終整合結果集
三,注意
實際應用中,我們可能會經常根據username查詢,假設有10000條記錄,若下列查詢
127.0.0.1:7004> keys user:uid:*:username:lisi
可能會在第[0-10000]次查詢到結果。
解決:
-
在mysql中我們可以通過給username加索引優化查詢
-
在redis中我們類似的通過冗餘信息法可以維護這樣的關係
-
127.0.0.1:7004> set user:username:lisi:uid 1 #建立一個username和uid對應的表 OK 127.0.0.1:7004> get user:username:lisi:uid #根據用戶名獲取id從而獲取用戶的其他信息 "1"
-
若其他查詢頻率較高的字段都可以採用冗餘信息法來維護,已空間換取時間