Redis常用數據結構和命令

1. Redis數據結構

Redis可以存儲鍵與5種不同數據結構類型之間的映射,分別為string(字符串)、list(列表)、set(集合)、hash(散列)和zset(有序集合)。日常使用的基本上就是如上的五種常見數據結構。此外,Redis還支持bitmaps(位圖), hyperloglogs(超級日志), geospatial indexes with radius queries and streams(具有半徑查詢和流的地理空間索引)。

下面引用《Redis實戰》的表格,介紹五種常見的數據結構

結構類型 結構存儲的值 結構的讀寫能力
STRING 可以是字符串、整數或浮點數 對整個字符串或者字符串的其中一部分執行操作;對整數和浮點數執行自增(increment)或者自減(decrement)
LIST 一個鏈表,鏈表上的每個節點都包含一個字符串 從鏈表的兩端推入或者彈出元素;根據偏移量對鏈表進行修剪(trim);讀取單個或者多個元素;根據值查找或者移除元素。
SET 包含字符串的無序收集器(unordered collection),并且被包含的每個字符串都是獨一無二、各不相同的 添加、獲取、移除單個元素;檢查一個元素是否存在于集合中;計算交集、并集、差集;從集合里面隨機獲取元素。
HASH 包含鍵值對的無序散列表 添加、獲取、移除單個鍵值對;獲取所有鍵值對。
ZSET(有序集合) 字符串成員(member)與浮點數分值(score)之間的有序映射,元素的排列順序由分值的大小決定 添加、獲取、刪除單個元素;根據分值范圍(range)或者成員來或許元素。
  • string:字符串類型是非常常見的一種類型,Redis中的字符串類型和很多編程語言里的字符串類型差不多,但相對要靈活些。字符串可以存儲以下三種類型:

    • 字符串(字節組成的序列)
    • 整數
    • 浮點數

    當字符串中的值可以被解釋成十進制數或者浮點數的時候,Redis就會發現這一點,并允許用戶對這個字符串進行各種增(incr*)、減(decr*)操作。如果對一個不存在的鍵或者保存了空串的鍵進行增減操作,則Redis會將其值當做0來處理。如果值無法被解釋為整數或浮點數,Redis將向用戶返回一個錯誤。

  • list:列表可以看作是個雙端隊列,可以在列表兩端推入和彈出元素。對列表的不同操作可以實現其他編程語言中的堆棧(同一端進出)和隊列(一端進,另一端出)數據結構。

  • set:集合最顯著的特點應該就是其中的元素互不相同。用戶可以快速對集合進行插入,刪除,檢查某元素是否在集合中的操作。此外,多個集合間也能很方便的執行交、并、差集運算。

  • zset:有序集合存儲著成員與分值(權值,在Redis中以IEEE 754雙精度浮點數的格式存儲)之間的映射,并且提供了分值處理命令。適用于按照權值獲取元素的情況。如熱門帖子獲取、基于投票數排序文章等。

  • hash:Redis中的散列可以讓用戶將多個鍵值對存儲到一個Redis鍵中,可以把這種數據聚集看作是關系數據庫中的行,或者文檔數據庫中的文檔。

2. Redis常用命令

2.1 key的有關命令

命令 操作
exists key 測試指定key是否存在
del key1 [key2 ...] 刪除給定key
type key 返回給定key的類型
keys pattern 以正則表達式的形式,返回匹配的所有key
rename oldkey newkey 修改key的名字
dbsize 查看數據庫中key的數量(并不是所謂的大小)
expire key seconds 為key指定過期時間,到期自動刪除
ttl key 查看key的剩余時間
select index 選擇數據庫(默認16個數據庫,index為0-15)
move key index 將key移動到指定數據庫
flushdb 清空當前數據庫key
flushall 清空所有數據庫key

2.2 string的有關命令

命令 操作
set key value 設置key對應的值為string類型的value
mset key1 value1 [key2 value2...] 一次設置多個key
get key 獲取指定key的value值
mget key1 [key2 ...] 一次獲取多個key的value值
incr key 對key的值做自增操作,返回新的值
decr key 對key的值做自減操作,返回新的值
incrby key integer 對key的value加指定integer
decrby key integer 對key的value減指定integer
append key value 給指定key的字符串追加value
substr key start end 截取key,從start(包含)到end(包含)。注意只是返回截取的value,源value并沒改變

2.3 list的有關命令

命令 操作
lpush key value1 [value2...] 在key對應的list的頭部(左端)添加元素
rpush key value1 [value2...] 在key對應的list的尾部(右端)添加元素
lpop key 移除并返回key對應的list的頭部(左端)元素
rpop key 移除并返回key對應的list的尾部(右端)元素
lindex key offset 返回列表中偏移量為offset的元素
lrange key start end 返回列表中從start偏移量到end偏移量中的元素,包含兩個端點元素(只返回,原list不變)
ltrim key start end 對列表進行修剪,只保留從start偏移量到end偏移量的元素,包含兩個端點
llen key 返回對應列表的長度

此外,list還包含一些阻塞式的命令以及在列表之間移動元素的命令:

命令 操作
blpop key1 [key2...] timeout 從第一個非空列表中彈出位于頭部(左端)的元素,或者在timeout秒內阻塞并等待可彈出元素的出現
brpop key1 [key2...] timeout 從第一個非空列表中彈出位于尾部(右端)的元素,或者在timeout秒內阻塞并等待可彈出元素的出現
rpoplpush source-key dest-key 從source-key列表中彈出位于最右端的元素,然后把這個元素插入dest-key列表的最左端,并向用戶返回該元素
brpoplpush source-key dest-key timeout 從source-key列表中彈出位于最右端的元素,然后把這個元素插入dest-key列表的最左端,并向用戶返回該元素。如果source-key為空,則在timeout秒內阻塞并等待可彈出元素的出現

2.4 set的有關命令

命令 操作
sadd key value1 [value2...] 將一個或多個元素添加到集合中,并返回添加成功的元素的個數
srem key value1 [value2...] 從集合中移除一個或多個元素,返回移除成功的元素的個數
sismember key value 檢查元素value是否在集合key中,存在返回1,不存在返回0
scard key 返回集合包含的元素個數
smembers key 返回集合包含的全部元素
srandmember key [count] 隨機返回集合中的一個或多個元素。當count為正數時,返回的元素不會重復;當count為負數時,返回的元素有可能會重復
spop key 隨機移除集合中的某個元素,被返回給用戶
smove source-key des-key value 如果集合source-key中包含元素value,則移除它,并添加到dest-key中;成功移除并添加則返回1,否則返回0

處理多個集合的常用命令:

命令 操作
sdiff key1 [key2...] 返回所有集合的差集
sdiffstore dest-key key1 [key2...] 將計算所得的差集中的元素添加到dest-key中
sinter key1 [key2...] 返回所有集合的交集
sinterstore dest-key key1 [key2...] 將計算所得的交集中的元素添加到dest-key中
sunion key1 [key2...] 返回所有集合的并集
sunionstore dest-key key1 [key2...] 將計算所得的并集中的元素添加到dest-key中

2.5 zset的有關命令

命令 操作
zadd key score1 member1 [score2 member2 ... ] 將帶有給定分值的成員你添加到有序集合中。注意分值在前,成員在后
zrem key member1 [member2 ... ] 從有序集合中刪除指定成員,并返回成功刪除的元素個數
zcard key 返回有序集合包含的成員個數
zincrby key increment member 給指定成員的分值加上increment
zcount key min max 返回分值介于min和max之間的成員數量
zrank key memeber 返回指定成員在有序集合中的排名,成員按照score從小到大排序
zrevrank key memeber 返回指定成員在有序集合中的排名 ,成員按照score從大到小排序
zscore key member 返回指定成員的分值
zrange key start stop [WITHSCORES] 返回有序集合中排名介于start和stop之間的成員,如果給定了可選的 WITHSCORES選項,則連帶成員分值一并返回
zrevrange key start stop [WITHSCORES] 同上,結果按score逆序
zrangebyscore key min max [WITHSCORES] 返回分值介于min和max之間的成員
zremrangebyrank key start stop 刪除集合中排名在start和stop之間的成員
zremrangebyscore key min max 刪除集合中分值在min和max之間的成員

2.6 hash的有關命令

命令 操作
hset key field value 向散列key中添加一個鍵值對
hget key field 獲取散列key中的一個鍵的值
hmset key field1 value1 [field2 value2 ...] 向散列key中添加一個或多個鍵值對
hmget key field1 [field2 ... ] 獲取散列key中的一個或多個鍵的值
hdel key field1 [field2 ... ] 刪除散列中的一個或多個鍵值對,返回成功刪除的鍵值對數量
hlen key 返回散列包含的鍵值對數量
hincrby key field integer 給散列中指定field的值加上integer
hexists key field 測試指定field是否在散列中存在
hkeys key 返回散列中所有field
hvals key 返回散列中所有value
hgetall key 返回散列中所有鍵值對

2.7 其他命令

Redis還有許多其他的命令,如發布訂閱相關的命令,排序命令,更完整的命令介紹可以查看Redis官網文檔中文版地址

此外,Redis客戶端還提供了 command 命令,可以用來查看命令數組。如:

command命令

特別推薦:Redis客戶端還提供了 help 命令,可以查看數據結構的描述( help set ),查看某個命令的具體用法( help zadd ),以及通過 help @group 語法來查看某個命令組( help @set 查看set所有命令)。如:

help命令

此外,Redis客戶端還提供了命令智能提示,可以提示用戶該命令的具體格式,如,當鍵入 zadd 時,客戶端的智能提示如下:

客戶端的智能提示

單純的記憶命令是沒有意義的,應該著重去學習Redis數據結構的概念和含義,具體應用的時候配合使用 help 命令以及官方文檔即可。而且Redis的命令基本都是自解釋的,基本從字面上就能夠了解到該命令的作用。習慣了之后甚至可以自己去猜測需要的命令。

======返回目錄======

<<< 上一篇:Redis的安裝與配置說明

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容