全局命令 1、查看所有鍵 keys * 2、鍵總數 dbsize 3、檢查鍵是否存在 exists key 4、刪除鍵 del key del key1 key2 key3 5、鍵過期 expire key seconds 大於0的整數表示剩餘過期時間;-1表示已過期;-2表示鍵不存在;ttl ke ...
全局命令
1、查看所有鍵 keys *
2、鍵總數 dbsize
3、檢查鍵是否存在 exists key
4、刪除鍵 del key del key1 key2 key3
5、鍵過期 expire key seconds 大於0的整數表示剩餘過期時間;-1表示已過期;-2表示鍵不存在;ttl key返回鍵剩餘時間
數據結構和內部編碼
1、查詢內部編碼 object encoding key
字元串
命令
常用命令
1、設置值
set key value[ex seconds] [px milliseconds] [nx|xx]
setex key seconds value
setnx key value
2、獲取值 get key
3、批量設置值 mset key value [key value]
4、批量獲取值 mget key [key ...]
5、計數
incr key
decr key
incrby key increment
decrby key decrement
incrbyfloat key increment
不常用命令
1、追加值 append key value
2、字元串長度 strlen key 每個中文字占用3個位元組
3、設置並返回原值 getset key value
4、設置指定位置的字元 setrange key offeset value
5、獲取部分字元串 getrange key start end
字元串內部編碼
1、int 8個位元組的長整型
2、embstr 小於等於39個位元組的字元串
3、raw 大於39個位元組的字元串
應用場景
1、緩存功能
2、計數
3、共用session
4、限速
哈希
命令
1、設置值 hset key field value 例:hset user:1 name tom
2、獲取值 hget key field 例:hget user:1 name
3、刪除field hdel key field 例:hdel user:1 name
4、計算field個數 hlen key
5、批量設置或獲取field-value hmget key field [field ...]
hmset key field value [field value ...]
6、判斷field是否存在 hexists key field
7、獲取所有field hkeys key
8、獲取所有key hvals key
9、獲取所有的field-value hgetall key
10、hincrby hincrbyfloat
11、計算value的字元串長度 hstrlen key field
內部編碼
1、ziplist field個數比較少且沒有大的value時
2、hashtable 當有value大於64位元組/field個數超過512
使用場景
1、使用hash類型緩存用戶信息
(1)原生字元串類型:每個屬性一個鍵
(2)序列化字元串類型:將用戶信息序列化後用一個鍵保存
Set user:1 serialize(userInfo)
(3)hash類型:每個用戶屬性使用一對field-value,但是只用一個鍵保存
列表
命令
添加操作
(1)從右邊插入元素
rpush key value [value ...]
Lrange 0 -1從左到右獲取列表所有元素
(2)從左邊插入元素
lpush key value[value ...]
(3)向某個元素前或後插入元素
linsert key before|after pivot value
例:linsert listkey before b java
查找
(1)獲取指定範圍內的元素列表
lrange key start end
(2)獲取列表指定索引下標的元素
lindex key index
(3)獲取列表長度
Llen key
刪除
(1)從列表左側彈出元素
(2)從列表右側彈出元素
(3)刪除指定元素
(4)按照索引範圍修剪列表
修改
修改指定索引下標的元素
lset key index newvalue
阻塞操作
blpop key [key ...] timeout
brpop key[key ...] timeout
timeout:阻塞時間(單位:秒)
(1)列表為空:如果timeout=3,那麼客戶端要等到3秒後返回,如果timeout=0,那麼客戶端一直阻塞等下去。
(2)列表不為空:客戶端立即返回。
註意:在使用brpop時,有兩點需要註意
1.如果是多個鍵,那麼brpop會從左到右遍歷鍵,一旦有一個鍵能彈出元素,客戶端立即返回。
2.如果多個客戶端對同一個鍵執行brpop,那麼最先執行brpop命令的客戶端可以獲取到彈出的值。
內部編碼:
(1)元素個數較少且沒有大元素時,內部編碼為ziplist
(2)元素個數超過512個,內部編碼變為linkedlist
(3)某個元素超過64位元組,內部編碼也會變為linkedlist
使用場景
1、消息隊列
2、文章列表
列表使用口訣:
lpush+lpop=Stack
Lpush+rpop=Queue
Lpush+ltrim=Capped Collection
Lpush+brpop=Message Queue
集合(無序,不重覆)
命令
集合內操作
(1)添加元素
sadd key element [element...]
(2)刪除元素
srem key element [element ...]
(3)計算元素個數
scard key
(4)判斷元素是否在集合中
sismember key element
(5)隨機從集合返回指定個數元素
srandmember key [count]
(6)從集合隨機彈出元素
spop key
(7)獲取所有元素
smember key
集合間操作
(1)求多個集合的交集
sinter key [key...]
(2)求多個集合的並集
sunion key [key...]
(3)求多個集合的差集
sdiff key [key...]
(4)將交集、並集、差集的結果保存
sinterstore destination key [key...]
sunionstore destination key[key...]
sdiffstore destination key[key...]
例:sinterstore user:1_2:inter user:1:follow user:2:follow
內部編碼
(1)當元素個數較少且都為整數時,內部編碼為intset
(2)當元素個數超過512個,內部編碼變為hashtable
(3)當元素個數不為整數時,內部編碼為hashtable
使用場景
1、給用戶添加標簽
2、給標簽添加用戶
3、刪除用戶下的標簽
4、刪除標簽下的用戶
5、計算用戶共同感興趣的標簽
有序集合(不重覆,有排序)
命令
集合內
(1)添加成員
zadd key score member [score member...]
例:zadd user:ranking 251 tom
nx:必須不存在,用於添加
xx:必須存在,用於更新
ch:返回此次操作後,有序集合元素和分數發生變化的個數
incr:對score做增加,相當於後面介紹的zincrby
(2)計算成員個數
zcard key
(3)計算某個成員的分數
zscore key member
(4)計算成員排名
zrank key member(從低到高)
zrevrank key member(從高到低)
(5)刪除成員
zrem key member [member...]
(6)增加成員的分數
zincrby key increment member
例:zincrby user:ranking 9 tom
(7)返回指定排名範圍的成員
zrange key start end [withscore]
zrevrange key start end [withscore]
(8)返回指定分數範圍的成員
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key min max [withscores] [limit offset count]
例:zrangebyscore user:ranking 200 tinf withsore
(9)返回指定分數範圍成員個數
zcount key min max
(10)刪除指定排名內的升序元素
zremrangebyrank key start end
(11)刪除指定分數範圍的成員
zremrangebyscore key min max
集合間操作
(1)交集
zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]
參數說明:
destination:交集計算結果保存到這個鍵
numkeys:需要做交集計算鍵的個數
key [key...]:需要做交集計算的鍵
weights weight [weight...]:每個鍵的權重,在做交集計算時,每個鍵中的每個member會將自己分數乘以這個權重,每個鍵的權重預設是1
aggregate sum|min|max:計算成員交集後,分值可以按照sum、min、max做彙總,預設值是sum
例:
zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2
zinterstore user:ranking:1_inter_2 2 user:ranking:1 user:ranking:2 weight 1 0.5 aggregate max
(2)並集
zunionstore destination numkeys ke [key...] [weights weight [weight...]] aggregate sum|min|max
內部編碼
(1)當元素個數較少且每個元素較小時,內部編碼為skiplist
(2)當元素個數超過128個,內部編碼變為ziplist
(3)當某個元素大於64位元組時,內部編碼變為hashtable
使用場景
1、添加用戶贊數
2、取消用戶贊數
3、展示獲取贊數最多的十個用戶
4、展示用戶信息以及用戶分數
鍵管理
單個鍵管理
(1)鍵重命名
rename key newkey
renamenx只有newkey不存在時才被覆蓋
(2)隨機返回一個鍵
randomkey
(3)鍵過期
expire key seconds
expireat key timstamp
ttl/pttl用於查詢鍵剩餘過期時間,pttl精度更高,可以達到毫秒級
毫秒級過期方案:
pexpire key milliseconds:鍵在milliseconds毫秒後過期
pexpire key millseconds-timestamp 鍵在毫秒級時間戳timestamp後過期
註意:
如果expire key的鍵不存在,返回結果為0
如果過期時間為負值,鍵會立即被刪除,如del一樣
persist命令可以將鍵的過期時間清除
對於字元串類型間,執行set命令會去掉過期時間
不支持二級數據結構
setex命令作為set+expire的組合,不但是原子執行,同時減少了一次網路通訊的時間
(4)遷移鍵
move
move key db
dump+store
dump key
restore key ttl value
遷移過程如下:
1、在源Redis上執行dump
2、在目標Redis上執行restore
3、migrate(重要,需要深入研究)
遍歷鍵
(1)全量遍歷鍵
keys pattern
(2)漸進式遍歷
scan cursor [match pattern] [count number]
資料庫管理
(1)切換資料庫
select dbIndex
(2)flushdb/flushall