Redis:五大數據類型常用命令詳解

豐富的數據類型是Redis作爲緩存系統的最大優勢之一,區別於Memcache僅支持簡單的key-value類型,Redis提供了list、set、zset、hash等數據結構的存儲。

注意:Redis的命令不區分大小寫,但是key 嚴格區分大小寫!!!

1. 熱身

1.1 獲取符合規則的鍵名列表

keys pattern

pattern是一個支持glob風格的通配符格式,具體規則如下:

符號 含義
? 匹配一個字符
* 匹配任意個字符,包括0個
[] 匹配括號間的任一字符,可是使用“-”符號表示一個範圍,比如a[b-d]可以匹配“ab”、“ac”、“ad”。
\x 匹配字符x,用於轉義符號。如果要匹配“?”,就需要使用?
  • 案例

我們先往Redis中塞幾個鍵值對:

set color red
set name zhangsan
set age 18

然後使用keys *命令查看獲取Redis中所有的鍵。

在這裏插入圖片描述

注意:keys命令需要遍歷Redis中的所有鍵,當鍵的數量較多時會影響性能,不建議在生產環境中使用。

1.2 判斷一個鍵是否存在

exists key [key ...]

如果鍵存在則返回1,否則返回0。比如:

在這裏插入圖片描述

1.3 刪除某個鍵

del key [key ...]

刪除一個或多個鍵,返回值是刪除的鍵的個數。比如:

在這裏插入圖片描述

1.4 獲取鍵值的數據類型

type key

type命令用來獲得鍵值的數據類型,返回值可能是string(字符串類型)、hash(散列類型)、list(列表類型)、set(集合類型)、zset( 有序集合類型)。比如:

在這裏插入圖片描述

2. string數據類型

字符串類型是Redis中最基本的數據類型,它能存儲任何形式的字符串,包括二進制數據。比如郵箱、JSON化的對象甚至是一張圖片。一個字符串類型鍵允許存儲的數據的最大容量是512MB。

string類型在Redis中的相關命令:

命令 用法 描述
set set key value (1)將字符串value值設置到key上;
(2)如果key有對應的值,則會被覆蓋;
(3)如果原本key有過期時間,則過期時間會被清除。
get get key (1)返回key對應的字符串值;
(2)如果key無對應值,則返回nil;
(3)如果key對應的值不是字符串,則返回錯誤,因爲get只適用於字符串類型。
mset mset key value [key value …] (1)同時設置一個或多個key-value鍵值對;
(2)如果key有對應的值,則會被覆蓋;
(3)mset是一個原子操作,所有的key都會在同一時間被設置,不會存在有些更新有些沒更新的情況。
mget mget key [key …] (1)返回一個或多個給定key對應的值;
(2)某個key不存在時返回nil。
setex setex key seconds value (1)將字符串value值設置到key上;
(2)設置key生存時間爲seconds,單位爲秒;
(3)如果key有對應的值,則會被覆蓋。
setnx setnx key value (1)將key的值設置爲value,當且僅當key不存在;
(2)若給定的key已經存在,setnx將不做任何操作。

上面是string類型的基本命令,但是當一個字符串可以轉換成數值時,我們可能還會接觸到以下幾個自增自減操作。

命令 用法 描述
incr incr key (1)對key的值加1,返回增加之後的值;
(2)如果key不存在,則key會被初始化爲0,再執行incr操作。
decr decr key (1)對key的值減1。
incrby incrby key increment (1)將key所存儲的值加上指定的數值,並返回增加之後的值。
decrby decrby key decrement (1)將key的值減去一個指定的數值。

3. hash數據類型

我們知道Redis是採用字典結構以鍵值對的形式存儲數據的,而hash類型的鍵值也是一種字典結構,其存儲了字段(field)和字段值的映射,但字段值只能是字符串,不支持其它數據類型。

hash類型適合存儲對象:使用對象類型和對象唯一標識作爲key,使用對象屬性作爲字段名,屬性值作爲字段值。

命令 用法 描述
hset hset key field value (1)設置key的field值爲value;
(2)如果key不存在,則直接創建;
(3)如果field值已經存在,則直接覆蓋。
hget hget key field (1)獲取指定key和field的值。
hdel hdel key field [field …] (1)刪除key下的field值;
(2)如果field不存在,則直接忽略。
hexists hexists key filed (1)查看是否存在指定key的field,存在返回1,不存在返回0。
hgetall hgetall key (1)返回指定key的所有字段名和字段值。
hincrby hincrby key field increment (1)對指定key的field字段增加一個數值。
hkeys hkeys key (1)返回指定key的所有字段名。
hlen hlen key (1)返回指定key的所有字段名數量。
hmget hmget key field [field …] (1)返回指定key對應字段名的值。
hmset hmset key field value [field value …] (1)批量設置key的字段名和字段值。
hvals hvals key (1)返回指定key的所有字段值,可對比hkeys命令。

4. list數據類型

列表類型(list)可以存儲一個有序的字符串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段。

列表類型內部使用雙向鏈表實現的,所以向列表兩端添加元素的時間複雜度爲O(1),獲取越接近兩端的元素速度越快。但是使用鏈表的代價是通過索引訪問元素比較慢。

命令 用法 描述
lpush lpush key value [value …] (1)將一個或多個值插入到列表key的表頭;
(2)如果有多個value值,則從左到右的順序依次插入表頭;
(3)如果key不存在,則會創建一個空列表,然後執行lpush操作;如果key存在,但不是列表類型,則返回錯誤。
lpushx lpushx key value (1)將value值插入到列表key的表頭,當且僅當key存在且是一個列表;
(2)如果key不存在時,lpushx命令什麼都不會做。
lpop lpop key (1)移除並返回列表key的頭元素。
lrange lrange key start stop (1)返回列表key中指定區間內的元素;
(2)start大於列表最大下標時,返回空列表;
(3)可使用負數下標,-1表示列表最後一個元素,以此類推。
lrem lrem key count value (1)count>0表示從頭到尾搜索,移除與value相等的元素,數量爲count;
(2)count<0表示從尾到頭搜索,移除與value相等的元素,數量爲count;
(3)count=0表示移除列表中所有與value相等的元素。
lset lset key index value (1)將列表key下標爲index的元素值設置爲value;
(2)當index參數超出範圍,或對一個空列表進行lset操作時,返回錯誤。
lindex lindex key index (1)返回列表key中下標爲index的元素。
linsert linsert key BEFORE|AFTER pivot value (1)將值value插入列表key中,位於pivot前面或者後面;
(2)當pivot不存在列表key中,或者key不存在時,不執行任何操作。
llen len key (1)返回列表key的長度,當key不存在時,返回0。
rpop rpop key (1)移除並返回列表key的尾元素。
rpoplpush rpoplpush source destination (1)將列表source中最後一個元素彈出並返回給客戶端,並且將該元素插入到列表destincation的頭部。
rpush rpush key value [value …] (1)將一個或多個值插入到列表key的尾部。
rpushx rpushx key value (1)將value值插入到列表key的表尾,當且僅當key存在且是一個列表;
(2)如果key不存在時,lpushx命令什麼都不會做。

5. set數據類型

Redis中的set類型是string類型的無序集合。集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,由於集合類型在Redis內部是使用值爲空的散列表實現的,所以這些操作的時間複雜度都是O(1)。最方便的是多個集合類型鍵之間還可以進行並集、交集和差集運算。

命令 用法 描述
sadd sadd key member [member …] (1)將一個或多個member元素加入key中,已存在在集合中的member將被忽略;
(2)如果key不存在,則創建一個只包含member元素的集合;
(3)當key不是集合類型時,將返回一個錯誤。
scard scard key (1)返回key對應的集合中的元素數量。
sdiff sdiff key [key …] (1)返回所有key對應的集合的差集。
sdiffstore sdiffstore destionation key [key …] (1)返回所有key對應的集合的差集,並把該差集賦值給destionation;
(2)如果destionation已經存在,則直接覆蓋。
sinter sinter key [key …] (1)返回所有key對應的集合的交集;
(2)不存在的key被視爲空集。
sinterstore sinter destionation key [key …] (1)返回所有key對應的集合的交集,並把該交集賦值給destionation;
(2)如果destionation已經存在,則直接覆蓋。
sismember sismember key member (1)判斷member元素是否是key的成員,0表示不是,1表示是。
smembers smember key (1)返回集合key中的所有成員;
(2)不存在的key被視爲空集。
srem srem key member [member …] (1)移除集合key中的一個或多個member元素,不存在的member將被忽略。
sunion sunion key [key …] (1)返回所有key對應的集合的並集;
(2)不存在的key被視爲空集。
sunionstore sunionstore destionation key [key …] (1)返回所有key對應的集合的並集,並把該並集賦值給destionation;
(2)如果destionation已經存在,則直接覆蓋。

6. zset數據類型

zset類型也是string類型元素的集合,但是它是有序的。

命令 用法 描述
zadd zadd key score member [score member …] (1)將一個或多個member元素及其score值加入集合key中;
(2)如果member已經是有序集合的元素,那麼更新member對應的score並重新插入member保證member在正確的位置上;
(3)score可以是整數也可以是雙精度浮點數。
zcard zcard key (1)返回有序集的元素個數。
zcount zcount key min max (1)返回有序集key中,score值>=min且<=max的成員數量
zrange zrange key start stop [withscores] (1)返回有序集key中指定區間內的成員,成員位置按score從小到大排序;
(2)如果score值相同,則按字典排序;
(3)如果要使成員按score從大到小排序,則使用zrevrange命令。
zrank zrank key number (1)返回有序集key中成員member的排名,有序集合按score值從小到大排列;
(2)zrevrank命令將按照score值從大到小排序。
zrem zrem key member [member …] (1)移除有序集key中的一個或多個元素,不存在的元素將被忽略;
(2)當key存在但不是有序集時,返回錯誤。
zremrangebyrank zremrangerank key start stop (1)移除有序集key中指定排名區間內的所有元素。
zremrangebyscore zremrangescore key min max (1)移除有序集key中所有score值>=min且<=max之間的元素。
——End——
更多精彩分享,可掃碼關注微信公衆號哦。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章