天天看點

2 Redis常用資料類型以及指令

Redis常用資料類型

       Redis資料結構String、Hash、List、Set、SortedSet及相關操作。

String

      Redis 中最簡單的資料結構,它既可以儲存文字(比如 "hello world"),又可以儲存數字(比如整數 10086 和浮點數 3.14),還可以儲存二進制資料(比如 10010100)

編号 指令 描述說明
1 SET key value 此指令設定指定鍵的值。
2 GET key 擷取指定鍵的值。
3 GETRANGE key start end 擷取存儲在鍵上的字元串的子字元串。
4 GETSET key value 設定鍵的字元串值并傳回其舊值。
5 GETBIT key offset 傳回在鍵處存儲的字元串值中偏移處的位值。
6 MGET key1 [key2..] 擷取所有給定鍵的值
7 SETBIT key offset value 存儲在鍵上的字元串值中設定或清除偏移處的位
8 SETEX key seconds value 使用鍵和到期時間來設定值
9 SETNX key value 設定鍵的值,僅當鍵不存在時
10 SETRANGE key offset value 在指定偏移處開始的鍵處覆寫字元串的一部分
11 STRLEN key 擷取存儲在鍵中的值的長度
12 MSET key value [key value …] 為多個鍵分别設定它們的值
13 MSETNX key value [key value …] 為多個鍵分别設定它們的值,僅當鍵不存在時
14 PSETEX key milliseconds value 設定鍵的值和到期時間(以毫秒為機關)
15 INCR key 将鍵的整數值增加

1

16 INCRBY key increment 将鍵的整數值按給定的數值增加
17 INCRBYFLOAT key increment 将鍵的浮點值按給定的數值增加
18 DECR key 将鍵的整數值減

1

19 DECRBY key decrement 按給定數值減少鍵的整數值
20 APPEND key value 将指定值附加到鍵

SET key value [NX|XX]

       SET 指令還支援可選的 NX 選項和 XX 選項:

     • 如果給定了 NX 選項,那麼指令僅在鍵 key 不存在的情況下,才進行設定操作;如果鍵 key 已經存 在,那麼 SET ... NX 指令不做動作(不會覆寫舊值)。

    • 如果給定了 XX 選項,那麼指令僅在鍵 key 已經存在的情況下,才進行設定操作;如果鍵 key 不存 在,那麼 SET ... XX 指令不做動作(一定會覆寫舊值)。  在給定 NX 選項和 XX 選項的情況下,SET 指令在設定成功時傳回 OK ,設定失敗時傳回 nil。

2 Redis常用資料類型以及指令

SETNX key value

僅在鍵 key 不存在的情況下,将鍵 key 的值設定為 value ,效果和 SET key value NX 一樣。 NX 的意思為“Not eXists”(不存在)。

鍵不存在并且設定成功時,指令傳回 1 ;因為鍵已經存在而導緻設定失敗時,指令傳回 0 。

複雜度為 O(1) 。

STRLEN key

傳回字元串鍵 key 儲存的值的長度。

因為 Redis 會記錄每個字元串值的長度,是以擷取該值的複雜度為 O(1) 。

索引

    字元串的索引(index)以 0 為開始,從字元串的開頭向字元串的結尾依次遞增,字元串第一個字元的索 引為 0 ,字元串最後一個字元的索引 為 N-1 ,其中 N 為字元串的長度。

      除了(正數)索引之外,字元串 還有負數索引:負數索引以 -1 為開始,從字元串的結尾向字元串的開頭 依次遞減,字元串的最後一個字元的索引 為 -N ,其中 N 為字元串的長度。

2 Redis常用資料類型以及指令

SETRANGE key index value

從索引 index 開始,用 value 覆寫(overwrite)給定鍵 key 所儲存的字元串值。隻接受正數索引。

指令傳回覆寫之後,字元串 值的長度。複雜度為 O(N), N 為 value 的長度。

GETRANGE key start end

傳回鍵 key 儲存的字元串值中,位于 start 和 end 兩個索引之間的内容(閉區間,start 和 end 會被包括 在内)。和 SETRANGE 隻接受正數索引不同,GETRANGE 的索引可以是正數或者負數。

複雜度為 O(N) , N 為被選中内容的長度。

2 Redis常用資料類型以及指令

數字操作:    

      隻要儲存在字元串鍵裡面的值可以被解釋為 64 位整數,或者 IEEE-754 标準的 64 位浮點數, 那麼使用者就可以對這個字元串鍵執行針對數字值的指令。

2 Redis常用資料類型以及指令

如果執行 INCRBY 或者 DECRBY 時,鍵 key 不存在,那麼指令會将鍵 key 的 值初始化為 0 ,然後再執行增加或者減少操作。

2 Redis常用資料類型以及指令

針對數字值的增一和減一操作非常常見,是以 Redis 特别為這兩個操作建立了 INCR 指令和 DECR 指令。

2 Redis常用資料類型以及指令

浮點數的自增和自減

INCRBYFLOAT key increment

為字元串鍵 key 儲存的值加上浮點數增量 increment ,指令傳回操作執行之後,鍵 key 的值。

沒有相應的 DECRBYFLOAT ,但可以通過給定負值來達到 DECRBYFLOAT 的效果

二進制位的索引

和儲存文字時一樣,字元串鍵在儲存二進制位時,索引也是從 0 開始的。

但是和儲存文字時,索引從左到右依次遞增不同,當字元串鍵儲存的是二進制位時,二進制位的索引會 從左到右依次遞減。

2 Redis常用資料類型以及指令

設定二進制位的值

SETBIT key index value

将給定索引上的二進制位的值設定為 value ,指令傳回被設定的位原來儲存的舊值。

複雜度為 O(1) 。

2 Redis常用資料類型以及指令

擷取二進制位的值

GETBIT key index

傳回給定索引上的二進制位的值。

複雜度為 O(1) 。

2 Redis常用資料類型以及指令

注意事項

一個英文字元隻需要使用單個位元組來儲存,而一個中文字元卻需要使用多個字 節來儲存。

2 Redis常用資料類型以及指令

STRLEN、SETRANGE 和 GETRANGE 都是為英文設定的,它們隻會在字元為單個位元組的情況下正常 工作,而一旦我們儲存的是類似中文這樣的多位元組字元,那麼這三個指令就不再适用了。

Hash

一個散列由多個域值對(field-value pair)組成,散列的 域和值都可以是文字、整數、浮點數或者二 進制資料。

序号 指令及描述
1

HDEL key field2 [field2] 

删除一個或多個哈希表字段

2

HEXISTS key field 

檢視哈希表 key 中,指定的字段是否存在。

3

HGET key field 

擷取存儲在哈希表中指定字段的值。

4

HGETALL key 

擷取在哈希表中指定 key 的所有字段和值

5

HINCRBY key field increment 

為哈希表 key 中的指定字段的整數值加上增量 increment 。

6

HINCRBYFLOAT key field increment 

為哈希表 key 中的指定字段的浮點數值加上增量 increment 。

7

HKEYS key 

擷取所有哈希表中的字段

8

HLEN key 

擷取哈希表中字段的數量

9

HMGET key field1 [field2] 

擷取所有給定字段的值

10

HMSET key field1 value1 [field2 value2 ] 

同時将多個 field-value (域-值)對設定到哈希表 key 中。

11

HSET key field value 

将哈希表 key 中的字段 field 的值設為 value 。

12

HSETNX key field value 

隻有在字段 field 不存在時,設定哈希表字段的值。

13

HVALS key 

擷取哈希表中所有值

14

HSCAN key cursor [MATCH pattern] [COUNT count] 

疊代哈希表中的鍵值對。

hset key field value

hget key field

hsetnx key field value

hexists key field

hdel key field [field ...]

hlen key

2 Redis常用資料類型以及指令

批量操作

2 Redis常用資料類型以及指令

擷取散列包含的所有域、值、或者域值對

2 Redis常用資料類型以及指令
2 Redis常用資料類型以及指令

List 

1

BLPOP key1 [key2 ] timeout 

移出并擷取清單的第一個元素, 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止。

2

BRPOP key1 [key2 ] timeout 

移出并擷取清單的最後一個元素, 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止。

3

BRPOPLPUSH source destination timeout 

從清單中彈出一個值,将彈出的元素插入到另外一個清單中并傳回它; 如果清單沒有元素會阻塞清單直到等待逾時或發現可彈出元素為止。

4

LINDEX key index 

通過索引擷取清單中的元素

5

LINSERT key BEFORE|AFTER pivot value 

在清單的元素前或者後插入元素

6

LLEN key 

擷取清單長度

7

LPOP key 

移出并擷取清單的第一個元素

8

LPUSH key value1 [value2] 

将一個或多個值插入到清單頭部

9

LPUSHX key value 

将一個值插入到已存在的清單頭部

10

LRANGE key start stop 

擷取清單指定範圍内的元素

11

LREM key count value 

移除清單元素

12

LSET key index value 

通過索引設定清單元素的值

13

LTRIM key start stop 

對一個清單進行修剪(trim),就是說,讓清單隻保留指定區間内的元素,不在指定區間之内的元素都将被删除。

14

RPOP key 

移除并擷取清單最後一個元素

15

RPOPLPUSH source destination 

移除清單的最後一個元素,并将該元素添加到另一個清單并傳回

16

RPUSH key value1 [value2] 

在清單中添加一個或多個值

17

RPUSHX key value 

為已存在的清單添加值

LREM key count value

根據參數count的值  ,移除清單中與參數value相等的清單項

如果count>0,那麼沖表頭開始向表尾搜尋,移除最多count個值為value的清單項。

如果count=0,那麼沖表頭開始向表尾搜尋,移除所有值為value的清單項。

如果count<0,那麼沖表頭開始向表尾搜尋,移除最多abs(count)個值為value的清單項。

修改清單

LTRIM key start stop

隻保留索引範圍内的清單項。

阻塞彈出指令

2 Redis常用資料類型以及指令
2 Redis常用資料類型以及指令

Set

      Redis集合以無序的方式存儲多個不相同的元素。使用者可以快速地向集合中添加元素或者删除元素,也可以對多個集合進行集合運算,如交集、并集、差集。

序号 指令及描述
1

SADD key member1 [member2] 

向集合添加一個或多個成員

2

SCARD key 

擷取集合的成員數

3

SDIFF key1 [key2] 

傳回給定所有集合的差集

4

SDIFFSTORE destination key1 [key2] 

傳回給定所有集合的差集并存儲在 destination 中

5

SINTER key1 [key2] 

傳回給定所有集合的交集

6

SINTERSTORE destination key1 [key2] 

傳回給定所有集合的交集并存儲在 destination 中

7

SISMEMBER key member 

判斷 member 元素是否是集合 key 的成員

8

SMEMBERS key 

傳回集合中的所有成員

9

SMOVE source destination member 

将 member 元素從 source 集合移動到 destination 集合

10

SPOP key 

移除并傳回集合中的一個随機元素

11

SRANDMEMBER key [count] 

傳回集合中一個或多個随機數

12

SREM key member1 [member2] 

移除集合中一個或多個成員

13

SUNION key1 [key2] 

傳回所有給定集合的并集

14

SUNIONSTORE destination key1 [key2] 

所有給定集合的并集存儲在 destination 集合中

15

SSCAN key cursor [MATCH pattern] [COUNT count] 

疊代集合中的元素

2 Redis常用資料類型以及指令

Zset

Redis 有序集合和集合一樣也是string類型元素的集合,且不允許重複的成員。

不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。

有序集合的成員是唯一的,但分數(score)卻可以重複。

集合是通過哈希表實作的,是以添加,删除,查找的複雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。

2

ZCARD key 

擷取有序集合的成員數

3

ZCOUNT key min max 

計算在有序集合中指定區間分數的成員數

4

ZINCRBY key increment member 

有序集合中對指定成員的分數加上增量 increment

5

ZINTERSTORE destination numkeys key [key ...] 

計算給定的一個或多個有序集的交集并将結果集存儲在新的有序集合 key 中

6

ZLEXCOUNT key min max 

在有序集合中計算指定字典區間内成員數量

7

ZRANGE key start stop [WITHSCORES] 

通過索引區間傳回有序集合成指定區間内的成員

8

ZRANGEBYLEX key min max [LIMIT offset count] 

通過字典區間傳回有序集合的成員

9

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 

通過分數傳回有序集合指定區間内的成員

10

ZRANK key member 

傳回有序集合中指定成員的索引

11

ZREM key member [member ...] 

移除有序集合中的一個或多個成員

12

ZREMRANGEBYLEX key min max 

移除有序集合中給定的字典區間的所有成員

13

ZREMRANGEBYRANK key start stop 

移除有序集合中給定的排名區間的所有成員

14

ZREMRANGEBYSCORE key min max 

移除有序集合中給定的分數區間的所有成員

15

ZREVRANGE key start stop [WITHSCORES] 

傳回有序集中指定區間内的成員,通過索引,分數從高到底

16

ZREVRANGEBYSCORE key max min [WITHSCORES] 

傳回有序集中指定分數區間内的成員,分數從高到低排序

17

ZREVRANK key member 

傳回有序集合中指定成員的排名,有序內建員按分數值遞減(從大到小)排序

18

ZSCORE key member 

傳回有序集中,成員的分數值

19

ZUNIONSTORE destination numkeys key [key ...] 

計算給定的一個或多個有序集的并集,并存儲在新的 key 中

20

ZSCAN key cursor [MATCH pattern] [COUNT count] 

疊代有序集合中的元素(包括元素成員和元素分值)

2 Redis常用資料類型以及指令

Redis Key操作

指令 描述 用法
DEL

(1)删除給定的一個或多個key

(2)不存在的Key将被忽略

DEL key [key ...]
EXISTS (1)檢查給定key是否存在 EXISTS key
EXPIRE

(1)為給定key設定生存時間,key過期時它會被自動删除

(2)對一個已經指定生存時間的Key設定執行EXPIRE,新的值會代替舊的值

EXPIRE key seconds
EXPIREAT (1)同EXPIRE,但此指令指定的是UNIX時間戳,機關為秒 EXPIRE key timestamp
KEYS

(1)查找所有符合給定模式pattern的key,下面舉一下例子

(2)KEYS *比對所有key

(3)KEYS h?llo比對hello、hallo、hxllo等

(4)KEYS h*llo比對hllo、heeeeello等

(5)KEYS h[ae]llo比對hello和hallo

(6)特殊符号想當做查找内容經的使用\

KEYS pattern
MIGRATE 

 (1)原子性地将key從目前執行個體傳送到目标執行個體指定的資料庫上

(2)原資料庫Key删除,新資料庫Key增加

(3)阻塞進行遷移的兩個執行個體,直到遷移成功、遷移失敗、等待逾時三個之一發生

MIGRATE host port key destination-db timeout [COPY] [REPLACE] 
 MOVE

 (1)将目前資料庫的key移動到給定資料庫的db中

(2)執行成功的條件為目前資料庫有key,給定資料庫沒有key

MOVE key db 
PERSIST   (1)移除給定key的生存時間,将key變為持久的 PERSIST key
RANDOMKEY  (1)從目前資料庫随機傳回且不删除一個key, RANDOMKEY 
RENAME

(1)将key改名為newkey

(2)當key和newkey相同或key不存在,報錯

(3)newkey已存在,RENAME将覆寫舊值

RENAME key newkey
TTL (1)以秒為機關,傳回給定的key剩餘生存時間 TTL key
PTTL (1)以毫秒為機關,傳回給定的key剩餘生存時間 PTTL key
TYPE (1)傳回key鎖存儲的值的類型 TYPE key

系統相關指令

指令 描述 用法
BGREWRITEAOF (1)手動觸發AOF重寫操作,用于減小AOF檔案體積 BGREWRITEAOF
BGSAVE (1)背景異步儲存目前資料庫的資料到磁盤 BGSAVE
CLIENT KILL

(1)關閉位址為ip:port的用戶端

(2)由于Redis為單線程設計,是以當目前指令執行完之後才會關閉用戶端

CLIENT KILL ip:port
CLIENT LIST (1)以可讀的格式,傳回所有連接配接到伺服器的用戶端資訊和統計資料 CLIENT LIST
CONFIG GET

(1)取得運作中的Redis伺服器配置參數

(2)支援*

CONFIG GET parameter
CONFIG RESETSTAT (1)重置INFO指令中的某些統計資料,例如Keyspace hits、Keyspace misses等 CONFIG RESETSTAT
CONFIG REWRITE (1)對啟動Redis時指定的redis.conf檔案進行改寫 CONFIG REWRITE
CONFIG SET

(1)動态調整Redis伺服器的配置而無需重新開機

(2)修改後的配置立即生效

CONFIG SET parameter value
SELECT

(1)切換到指定資料庫,資料庫索引index用數字指定,以0作為起始索引值

(2)預設使用0号資料庫

SELECT index
DBSIZE (1)傳回目前資料庫的Key的數量 DBSIZE
DEBUG OBJECT

(1)這是一個調試指令,不應當被用戶端使用

(2)key存在時傳回有關資訊,key不存在時傳回錯誤

DEBUG OBJECT key
FLUSHALL (1)清空整個Redis伺服器的資料 FLUSHALL
FLUSHDB (1)清空目前資料庫中的所有資料 FLUSHDB
INFO

(1)以一種易于解釋且易于閱讀的格式,傳回Redis伺服器的各種資訊和統計數值

(2)通過給定可選參數section,可以讓指令隻傳回某一部分資訊

INFO [section]
LASTSAVE (1)傳回最近一次Redis成功将資料儲存到磁盤上的時間,以UNIX時間戳格式表示 LASTSAVE
MONITOR (1)實時列印出Redis伺服器接收到的指令,調試用 MONITOR
SHUTDOWN

(1)停止所有用戶端

(2)如果至少有一個儲存點在等待,執行SAVE指令

(3)如果AOF選項被打開,更新AOF檔案

(4)關閉Redis伺服器

SHUTDOWN [SAVE|NOSAVE]

Redis事務機制

Redis的事務是由DISCARD、EXEC、MULTI、UNWATCH、WATCH五個指令來保證的。

指令 描述 用法
DISCARD

(1)取消事務

(2)如果正在使用WATCH指令監視某個/某些key,那麼取消所有監視,等同于執行UNWATCH

DISCARD
EXEC

(1)執行所有事務塊内的指令

(2)如果某個/某些key正處于WATCH指令監視之下且事務塊中有和這個/這些key相關的指令,那麼EXEC指令隻在這個/這些key沒有被其他指令改動的情況下才會執行并生效,否則該事務被打斷

EXEC
MULTI

(1)标記一個事務塊的開始

(2)事務塊内的多條指令會按照先後順序被放入一個隊列中,最後由EXEC指令原子性地執行

MULTI
UNWATCH

(1)取消WATCH指令對所有key的監視

(2)如果WATCH之後,EXEC/DISCARD指令先被執行了,UNWATCH指令就沒必要執行了

UNWATCH
WATCH (1)監視一個/多個key,如果在事務執行之前這個/這些key被其他指令改動,那麼事務将被打斷 WATCH key [key ...]

事務沒有被打斷的情況:

2 Redis常用資料類型以及指令

看到開啟事務之後,所有的指令傳回的都是QUEUED,即放入隊列,而不是直接執行。

資料庫類似的,事務保證的是兩點:

    隔離,所有指令序列化、按順序執行,事務執行過程中不會被其他用戶端發來的指令打斷

    原子性,事務中的指令要麼全部執行,要麼全部不執行

繼續閱讀