1吴菠、數(shù)據(jù)類(lèi)型
(1)基本數(shù)據(jù)類(lèi)型
String
Hash
List
set
sorted_set
(2) String
- 常見(jiàn)操作
- 單數(shù)據(jù)操作與多數(shù)據(jù)操作:
多數(shù)據(jù)操作時(shí)mset理論上優(yōu)于get,但因Redis是單線程柠横,在多數(shù)據(jù)操作數(shù)據(jù)量極大的情況下启妹,建議對(duì)數(shù)據(jù)進(jìn)行拆分操作,避免線程阻塞肠槽; - String作為數(shù)據(jù)值操作
string在Redis中是作為字符串,當(dāng)遇到增減類(lèi)操作時(shí)會(huì)轉(zhuǎn)換為數(shù)值型進(jìn)行計(jì)算奢啥;
Redis所有的操作都是原子性秸仙,采用單線程進(jìn)行處理,可以避免并發(fā)帶來(lái)的數(shù)據(jù)影響桩盲;
String作為數(shù)值型操作時(shí)寂纪,可用于控制數(shù)據(jù)庫(kù)表的主鍵。 - 指定數(shù)據(jù)的生命周期:
setex key seconds value
psetex key millisecondes value - key 設(shè)置約定:表名:主鍵名:主鍵值:字段名
- 注意事項(xiàng)
String最大存儲(chǔ)量是512M;
String存儲(chǔ)數(shù)據(jù)型計(jì)算的最大范圍是Long的最大值捞蛋;
(3) Hash:一個(gè)存儲(chǔ)空間內(nèi)保存多個(gè)鍵值對(duì)信息
- 基本操作
hset key field value
hget key field
hgetall key
hdel key field1 [field2 ]
(4)List
數(shù)據(jù)存儲(chǔ)需求:
存儲(chǔ)多個(gè)數(shù)據(jù)孝冒,并對(duì)數(shù)據(jù)進(jìn)入存儲(chǔ)空間的順序進(jìn)行區(qū)分;
底層使用雙向鏈表實(shí)現(xiàn)拟杉;
-
基本操作:
添加/修改數(shù)據(jù): lpush k v1 v2 rpush k v1 v2 獲取數(shù)據(jù): lrang key start stop lindex key index llen key 獲取并移除數(shù)據(jù): lpop rpop 規(guī)定時(shí)間內(nèi)獲取并移除數(shù)據(jù): blpop k1 k2 timeout brpop k1 k2 timeout 移除指定數(shù)據(jù): lrem key count value
- 業(yè)務(wù)場(chǎng)景:
實(shí)現(xiàn)操作日志消息隊(duì)列庄涡;多臺(tái)機(jī)器的日志寫(xiě)到Redis中,多個(gè)寫(xiě)入搬设,一個(gè)消費(fèi)穴店;
(5)Set:
- 存儲(chǔ)需求:
- 存儲(chǔ)大量的數(shù)據(jù),且要求快速查詢拿穴;
- 底層與Hash結(jié)構(gòu)一致泣洞,也就是Hash右邊的Value為空;
- Set不允許操作默色,如果重復(fù)第一次寫(xiě)入是成功球凰,后面寫(xiě)入失敗,不會(huì)覆蓋腿宰;
- 基本操作:
添加數(shù)據(jù): sadd K m1 m2 m3 獲取全部數(shù)據(jù): smembers key 刪除數(shù)據(jù): srem key m1 m2 獲取Set集合數(shù)據(jù)總量: scard key 判斷集合中是否包含指定數(shù)據(jù): sismember k m 隨機(jī)獲取集合中指定數(shù)量的數(shù)據(jù): srandmember key count 隨機(jī)獲取集合中指定數(shù)量的數(shù)據(jù)移出: spop key 求兩個(gè)集合的交并差集(也可保存) sinter k1 k2 sunion K1 k2 sdiff k1 k2
- 應(yīng)用場(chǎng)景:
- 權(quán)限校驗(yàn): 交并差
- PV UV統(tǒng)計(jì):同類(lèi)型數(shù)據(jù)的快速去重
- 黑白名單:
(6)sorted_set
存儲(chǔ)需求:數(shù)據(jù)排序
-
基本操作:
添加數(shù)據(jù): zadd score m1 score m2 獲取全部數(shù)據(jù): zrang k start stop [withscore] zrevrangr key start stop [withscore] 刪除數(shù)據(jù): zrem k m m
-
業(yè)務(wù)場(chǎng)景:
- 活躍度統(tǒng)計(jì)呕诉;
- 定時(shí)任務(wù)管理:
- 限時(shí)操作:
- 帶有權(quán)重的任務(wù)隊(duì)列管理:使用score記錄權(quán)重;
-
注意事項(xiàng):
- score保存的數(shù)據(jù)存儲(chǔ)空間是64位吃度;
- score可以保存多精度的double值义钉,可能會(huì)丟失數(shù)據(jù)精度;
- sorted_set 底層存儲(chǔ)還是基于set結(jié)構(gòu)的规肴,數(shù)據(jù)不能重復(fù),但他是覆蓋的夜畴,不是插入失敗拖刃;
2、業(yè)務(wù)場(chǎng)景:
(1)為計(jì)數(shù)器設(shè)置計(jì)數(shù)器:
- 場(chǎng)景
API服務(wù)限流贪绘;1分鐘調(diào)用1000次兑牡;
按次計(jì)算:免費(fèi)下載10次之類(lèi);
- 解決方案:
1税灌、利用incr操作超過(guò)最大值跑出異常的形式代替每次判斷是否大于最大值
2均函、判斷是否為nil ,如果是nil 設(shè)置為最大值-次數(shù);如果不是計(jì)數(shù)+1菱涤;業(yè)務(wù)調(diào)用失敗 苞也,計(jì)數(shù)-1;
3粘秆、遇到異常如迟,或者操作超過(guò)上限,視為達(dá)到上限;
(2)順序控制類(lèi)場(chǎng)景
- 場(chǎng)景:
微信消息列表排序殷勘;
- 解決方案:
1此再、借助List的數(shù)據(jù)具有順序的特征,對(duì)消息進(jìn)行管理玲销,將List作為棧使用输拇;
2、將置頂用戶與普通用戶分兩個(gè)List進(jìn)行保存贤斜;
3策吠、按照時(shí)間順序依次將用戶消息添加到不同的List中;
3蠢古、通用操作:
(1)key基本操作:
刪除key: del key
獲取Key是否存在: exists key
獲取key類(lèi)型:type key
為Key設(shè)置有效期:
expire key seconds
pexpire key millisseconds
獲取Key的有效時(shí)間:
ttl key
pttl key
切換key從時(shí)效性轉(zhuǎn)換為永久性:
persist key
查詢key:
keys pattern 支持 * 奴曙? []
修改Key名稱:
rename k nk 如果存在會(huì)覆蓋
renamenx k nk 如果存在則修改失敗【推薦使用】
key排序:sort k
其他key操作:
help @generic
(2)DB基本操作
切換數(shù)據(jù)庫(kù):select index[0-15]
數(shù)據(jù)移動(dòng):move key db
數(shù)據(jù)清除:
flushdb [謹(jǐn)慎]
flushall [謹(jǐn)慎]
查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù)量:dbsize