Redis支持的鍵值數據類型如下: 字元串類型 散列類型 列表類型 集合類型 有序集合類型 一、字元串類型 字元串類型是Redis中最基本的數據類型,它能存儲任何形式的字元串,包括二進位數據。一個字元串類型鍵允許存儲的數據最大容量是512MB. 1、字元串常用命令 1.1 賦值與取值 SET key ...
Redis支持的鍵值數據類型如下:
- 字元串類型
- 散列類型
- 列表類型
- 集合類型
- 有序集合類型
一、字元串類型
字元串類型是Redis中最基本的數據類型,它能存儲任何形式的字元串,包括二進位數據。一個字元串類型鍵允許存儲的數據最大容量是512MB.
1、字元串常用命令
1.1 賦值與取值
SET key value
GET key
示例如下:
提示:Redis對於鍵的命名沒有強制要求,但比較好的實踐使用"對象類型:對象ID:對象屬性"來命名,對於多個單詞則推薦使用“.”分隔.
1.2 數字遞增
INCR key
當存儲的字元串是整數形式時,可通過INCR命令讓當前鍵值遞增,並返回遞增後的值,示例如下:
INCRBY key increment
INCRBY命令與INCR命令基本一樣,前者可以通過increment參數指定增加的數值,示例如下:
1.3 數字遞減
DECR key
DECRBY key decrement
DECR命令是讓當前鍵值遞減,DECREBY命令可指定減少的數值,與INCRBY命令用法相同,示例如下:
1.4 增加指定浮點數
INCRBYFLOAT key increment
INCRBYFLOAT命令用於遞增一個雙精度浮點數,示例如下:
1.5 向尾部追加值
APPEND key value
APPEND作用是向鍵值的末尾追加value值,如果鍵不存在則將改鍵的值設置為value,返回值是追加字元串後的總長度。示例:
1.6 獲取字元串長度
STRLEN key
STRLEN命令返回鍵值的長度,如果鍵不存在則返回0,示例:
1.7 同時獲取/設置多個鍵值
MGET key [key...]
MSET key value [key value...]
可以分別使用MGET和MSET命令獲取或者設置多個鍵的鍵值,示例:
二、散列類型
散列類型的鍵值是一種字典結構,其存儲了欄位(field)和欄位值的映射,但欄位值只能是字元串,不支持其他數據類型。散列類型適合存儲對象:使用對象類別和ID構成鍵名,使用欄位表示對象的屬性,欄位值則存儲屬性值。例如要存儲ID為2的汽車對象,可以設置鍵為car:2,鍵值為name:"奧迪",其中鍵值中"name"為欄位,"奧迪"為欄位值。
1、散列常用命令
1.1 賦值與取值
HSET key field value
HGET key field
這兩個命令分別用來給欄位賦值和獲得欄位的值,HSET命令不區分是對欄位的插入還是更新操作,當欄位不存在時為插入操作,當欄位存在時為更新操作,示例如下:
提示:在Redis中每個鍵都屬於一個明確的數據類型,如通過HSET命令建立的鍵是散列類型,通過SET命令建立的鍵是字元串類型等。使用一個數據類型的命令操作另一種數據類型的鍵會提示錯誤:(error) WRONGTYPE Operation against a key holding the wrong kind of value。但也不是所有命令都是如此,如SET命令可以覆蓋已經存在的鍵,不論鍵原來是什麼類型。
HMSET key field value [field value ...]
HMGET key field [field ...]
當需要同時設置或獲取多個欄位的值時,可以使用HMSET/HMGET命令,示例如下:
HGETALL key
HGETALL命令可以獲取鍵中的所有欄位和欄位值,示例如下:
1.2 判斷欄位是否存在
HEXISTS key field
HEXISTS命令用來判斷一個欄位是否存在,存在則返回1,否則返回0,示例如下:
1.3 當欄位不存在時賦值
HSETNX key field value
如果欄位已經存在,HSETNX命令將不執行任何操作,示例如下:
1.4 增加數字
HINCRBY key field increment
HINCRBY命令可使欄位增加指定的整數,示例如下:
1.5 刪除欄位
HDEL key field [field ...]
HDEL命令可以刪除一個或多個欄位,返回值是被刪除的欄位個數,示例如下:
1.6 只獲取欄位名或欄位值
HKEYS key
HVALS key
1.7 獲取欄位數量
HLEN key
三、 列表類型
列表類型可以存儲一個有序的字元串列表,常用的操作是向列表兩端添加元素,或者獲得列表的某一個片段。列表類型內部是使用雙向鏈表實現的,所以向列表兩端添加元素的時間複雜度為O(1),獲取越接近兩端的元素速度越快。
1、列表常用命令
1.1 向列表兩端增加元素
LPUSH key value [value ... ]
RPUSH key value [value ... ]
LPUSH命令和RPUSH命令分別用來向列表左邊和右邊增加元素,返回值表示增加元素後的列表長度,示例如下:
1.2 從列表兩端彈出元素
LPOP key
RPOP key
LPOP命令可以從列表的左邊彈出一個元素,LPOP命令執行步驟:第一步是將列表左邊的元素從列表中移除,第二步是返回被移除的元素值,RPOP命令類似,示例如下:
1.3 獲取列表中元素的個數
LLEN key
當鍵不存在時LLEN會返回0,示例如下:
1.4 獲取列表片段
LRANGE key start stop
LRANGE命令能夠獲取列表中的某一片段,返回索引從start到stop之間的所有元素(包括兩端的元素),Redis的列表起始索引為0。
LRANGE命令也支持負索引,表示從右邊開始取數,如"-1"表示最右邊第一個元素,依次類推。
註意兩種特殊情況:
(1)如果start的索引位置比stop的索引位置靠後,則會返回空列表
(2)如果stop大於實際的索引範圍,則會返回到列表最右邊的元素
1.5 刪除列表中指定的值
LREM key count value
LREM命令會刪除列表中前count個值為value的元素,返回值是實際刪除的元素個數,根據count值的不同,LREM命令的執行方式會有差異:
(1)當count>0時LREM命令會從列表左邊開始刪除前count個值為value的元素;
(2)當count<0時LREM命令會從列表右邊開始刪除前|count|個值為value的元素;
(3)當count=0時LREM命令會刪除所有為value的元素。
1.6 獲取/設置指定索引的元素值
LINDEX key index
LSET key index value
LINDEX命令用來返回指定索引的元素,索引從0開始
如果index是負數則表示從右邊開始計算的索引,最右邊元素的索引為-1
LSET命令是為指定索引設置值
1.7 只保留列表指定片段
LTRIM key start end
LTRIM命令可以刪除指定索引範圍之外的所有元素,示例:
1.8 向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
LINSERT命令首先會在列表中從左到右查找值為pivot的元素,然後根據第二個參數是BEFORE還是AFTER來決定value插入到該元素的前面還是後面,返回值是插入後列表的元素個數
1.9 將元素從一個列表轉到另一個列表中
RPOPLPUSH source destination
RPOPLPUSH命令會先從source列表的右邊彈出一個元素,然後將其加入到destination列表的左邊,並返回這個元素的值,整個過程是原子的。
當把列表類型作為隊列使用時,RPOPLPUSH命令可以很直觀地在多個隊列中傳遞數據。當source和destination相同時,RPOPLPUSH命令會不斷地將隊尾地元素移到隊首。
四、集合類型
集合中的每個元素都是唯一的,且沒有順序。集合類型的常用操作是向集合中加入或刪除元素、判斷某個元素是否存在等,且多個集合之間還可以進行並集、交集和差集運算。
1、集合常用命令
1.1 增加/刪除元素
SADD key member [member ... ]
SREM key member [member ... ]
SADD命令用來向集合中增加一個或多個元素,如果鍵不存在則會自動創建。因為集合中的元素是唯一的,如果要加入的元素已經存在於集合中就會忽略這個元素,返回值是成功加入的元素數量。
SREM命令用來從集合中刪除一個或多個元素,並返回成功刪除的元素個數。
1.2 獲取集合中的所有元素
SMEMBERS key
SMEMBERS命令會返回集合中的所有元素,示例如下:
1.3 判斷元素是否存在集合中
SISMEMBER key member
1.4 集合間運算
SDIFF key [key ... ]
SDIFF命令用來對多個集合執行差集運算。集合A與集合B的差集表示為A-B,代表所有屬於A且不屬於B的元素構成的集合,示例如下:
SDIFF命令還支持同時傳入多個鍵
SINTER key [key ... ]
SINTER命令用來對多個集合執行交集運算。
SUNION key [key ... ]
SUNION命令用來對多個集合執行並集運算。
1.5 獲取集合中元素個數
SCARD key
SCARD命令用來獲取集合中的元素個數。
1.6 進行集合運算並將結果存儲
SDIFFSTORE destination key [key .... ]
SINTERSTORE destination key [key ... ]
SUNIONSTORE destination key [key ... ]
SDIFFSTORE命令和SDIFF命令類似,區別在於SIDFFSTORE命令不會直接返回運算結果,而是將結果存儲在destination鍵中,常用於需要進行多步集合運算的場景中,如需要先計算差集再將結果和其他鍵計算交集等。
1.7 隨機獲取集合中的元素
SRANDMEMBER key [count]
SRANDMEMBER命令用來隨機從集合中獲取一個元素,如:
還可以根據count參數來一次隨機獲取count個元素,根據count的正負不同,表現不同。
(1)當count為正數時,SRANDMEMBER會隨機從集合中獲取count個不重覆的元素。如果count的值大於集合中的元素個數,則返回集合中的所有元素
(2)當count為負數時,SRANDMEMBER會隨機從集合中獲取|count|個元素,元素有可能相同。
1.8 從集合中彈出一個元素
SPOP key
SPOP命令會從集合中隨機選擇一個元素彈出。
五、有序集合類型
1、介紹
在集合的基礎上,有序集合類型為集合中的每個元素都關聯了一個分數,使得我們不僅可以完成插入、刪除元素和判斷元素是否存在等類型的操作,還能夠獲得分數最高的前N個元素、獲得指定分數範圍內的元素等與分數有關的操作。
2、有序集合與列表的區別
(1)列表類型是通過鏈表實現的,獲取靠近兩端的數據速度較快,而當元素增多後,訪問中間數據的速度會較慢,所以更適合實現如“新鮮事”、“日誌”這樣很少訪問中間元素的應用。
(2)有序集合類型是使用散列表和跳躍表實現的,所以即使讀取位於中間部分的數據速度也很快。
提示:散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。
(3)列表中不能簡單地調整某個元素的位置,有序集合可通過更改元素的分數進行調整。
(4)有序集合比列表類型更耗費記憶體。
3、有序集合常用命令
3.1 增加元素
ZADD key score member [score member ... ]
ZADD命令用來向有序集合中加入一個元素和該元素的分數,如果元素已經存在,則會用新的分數替換原來的分數。返回值是加入到集合中的元素個數。
3.2 獲取元素的分數
ZSCORE key member
3.3 獲取排名在某個範圍內的元素列表
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
ZRANGE命令會按照元素分數從小到大返回索引從start到stop之間的所有元素(包含兩端的元素,同時支持負數索引)。
如果需要在獲取元素的同時獲得元素的分數,可在ZRANGE命令後加上WITHSCORES參數。
如果兩個元素的分數相同,Redis會按照欄位順序進行排序("0"<"9"<"A"<"Z"<"a"<"z")
3.4 獲取指定分數範圍的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZRANGEBYSCORE命令按照元素分數從小到大的順序返回分數在min和max之間的元素(包含min和max)。
如果希望分數範圍不包含端點值,可以在分數前加上"("符號,示例如下:
[LIMIT offset count]參數的作用:在獲取的元素列表的基礎上向後偏移offset個元素,並且只獲取前count個元素。
3.5 增加某個元素的分數
ZINCRBY key increment member
ZINCRBY命令可以增加一個元素的分數,返回值是更改後的分數。如果指定元素不存在,Redis在執行命令前會先建立它並將它的分數賦值為0再執行操作。
3.6 獲取集合中元素的數量
ZCARD key
3.7 獲取指定分數範圍內的元素個數
ZCOUNT key min max
3.8 刪除一個或多個元素
ZREM key member [member ... ]
3.9 按照排名範圍刪除元素
ZREMRANGEBYRANK key start stop
ZREMRANGEBYRANK命令按照元素分數從小到大的順序刪除處在指定排名範圍內的所有元素,並返回刪除的元素數量。
3.10 按照分數範圍刪除元素
ZREMRANGEBYSCORE key min max
3.11 獲取元素的排名
ZRANK key member
ZREVRANK key member
ZRANK命令會按照元素分數從小到大的順序獲得指定的元素排名(分數最小的元素排名為0),ZREVRANK命令與之相反(分數最大的元素排名為0)。
3.12 計算有序集合的交集
ZINTERSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX]
ZINTERSTORE命令用來計算多個有序集合的交集並將結果存在destination鍵中,返回值為destination鍵中的元素個數。destination鍵中的分數是由AGGREAGTE參數決定的。
(1)當AGGREGATE是SUM時,destination鍵中元素的分數是每個參與計算的集合中的該元素分數的和,預設為SUM。
(2)當AGGREGATE是MIN時,destination鍵中元素的分數是每個參與計算的集合中的該元素分數的最小值。
(3)當AGGREGATE是MAX時,destination鍵中元素的分數是每個參與計算的集合中的該元素分數的最大值。
ZINTERSTORE命令還能夠通過WEIGHTS參數設置每個集合的權重,每個集合在參與計算時元素的分數被乘上該集合的權重。
ZUNINONSTORE命令用於計算集合的並集,與ZINTERSTORE命令類似。