上一篇博客我們聊了下redis的主從復制、aof持久化、集群、慢日志相關配置指令的說明,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13416534.html;今天我們來了解下redis常用數據類型的相關操作和說明;
Redis作為數據存儲系統,它支持常用的數據類型有字符串(string)、列表(list)、關聯數組(hash)、集合(set)、有序集合(sorted_set)、發布訂閱(pubsub)等;
字符串相關常用操作
在redis命令行使用help命令可以查看指令的幫助信息,如果是查看某一組命令的用法可以可以使用help @組名;例如查看字符串相關命令操作幫助,可以使用help @string;如下所示
127.0.0.1:6379> help @string APPEND key value summary: Append a value to a key since: 2.0.0 BITCOUNT key [start end] summary: Count set bits in a string since: 2.6.0 BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL] summary: Perform arbitrary bitfield integer operations on strings since: 3.2.0 BITOP operation destkey key [key ...] summary: Perform bitwise operations between strings since: 2.6.0 BITPOS key bit [start] [end] summary: Find first bit set or clear in a string since: 2.8.7 DECR key summary: Decrement the integer value of a key by one since: 1.0.0 DECRBY key decrement summary: Decrement the integer value of a key by the given number since: 1.0.0 GET key summary: Get the value of a key since: 1.0.0 GETBIT key offset summary: Returns the bit value at offset in the string value stored at key since: 2.2.0 GETRANGE key start end summary: Get a substring of the string stored at a key since: 2.4.0 GETSET key value summary: Set the string value of a key and return its old value since: 1.0.0 INCR key summary: Increment the integer value of a key by one since: 1.0.0 INCRBY key increment summary: Increment the integer value of a key by the given amount since: 1.0.0 INCRBYFLOAT key increment summary: Increment the float value of a key by the given amount since: 2.6.0 MGET key [key ...] summary: Get the values of all the given keys since: 1.0.0 MSET key value [key value ...] summary: Set multiple keys to multiple values since: 1.0.1 MSETNX key value [key value ...] summary: Set multiple keys to multiple values, only if none of the keys exist since: 1.0.1 PSETEX key milliseconds value summary: Set the value and expiration in milliseconds of a key since: 2.6.0 SET key value [EX seconds] [PX milliseconds] [NX|XX] summary: Set the string value of a key since: 1.0.0 SETBIT key offset value summary: Sets or clears the bit at offset in the string value stored at key since: 2.2.0 SETEX key seconds value summary: Set the value and expiration of a key since: 2.0.0 SETNX key value summary: Set the value of a key, only if the key does not exist since: 1.0.0 SETRANGE key offset value summary: Overwrite part of a string at key starting at the specified offset since: 2.2.0 STRLEN key summary: Get the length of the value stored in a key since: 2.2.0 127.0.0.1:6379>
提示:查看組里的某一個命令的用法可以使用help 指令
127.0.0.1:6379> help STRLEN STRLEN key summary: Get the length of the value stored in a key since: 2.2.0 group: string 127.0.0.1:6379> help MGET MGET key [key ...] summary: Get the values of all the given keys since: 1.0.0 group: string 127.0.0.1:6379> help SET SET key value [EX seconds] [PX milliseconds] [NX|XX] summary: Set the string value of a key since: 1.0.0 group: string 127.0.0.1:6379>
字符串是所有編程語言中最常見的和最常用的數據類型,而且也是 redis 最基本的數據類型之一,而且 redis 中所有的 key 的類型都是字符串。對於string類型的數據常用的方法有SET、GET、MSET、MGET、SETEX、SETNX、INCR、DECR、INCRBY、DECRBY、INCRBYFLOAT、APPEND、STRLEN、;
SET:添加一對鍵值數據數據庫;GET:獲取指定鍵對應的值;
127.0.0.1:6379> KEYS * (empty list or set) 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379>
提示:keys * 表示查看當前數據庫中的所有鍵列表;
MSET:添加多個鍵值數據到當前數據庫:MGET:獲取指定多個鍵對應的值;
127.0.0.1:6379> MSET k2 v2 k3 v3 k4 v4 OK 127.0.0.1:6379> KEYS * 1) "k3" 2) "k2" 3) "k1" 4) "k4" 127.0.0.1:6379> MGET k1 k2 k3 k4 1) "v1" 2) "v2" 3) "v3" 4) "v4" 127.0.0.1:6379>
SETEX:添加一個有過期時長的鍵值數據到當前數據庫;SETNX:添加一個鍵值數據,只在當添加到鍵不存在當前數據庫時才添加;
127.0.0.1:6379> SETEX k5 5 v5 OK 127.0.0.1:6379> GET k5 "v5" 127.0.0.1:6379> GET k5 (nil) 127.0.0.1:6379> SET k5 v5 ex 5 OK 127.0.0.1:6379> GET k5 "v5" 127.0.0.1:6379> GET k5 (nil) 127.0.0.1:6379> SETNX k1 v8 (integer) 0 127.0.0.1:6379> SETNX k5 v5 (integer) 1 127.0.0.1:6379> GET k5 "v5" 127.0.0.1:6379>
提示:給某一個key指定過期時長,可以使用setex或者使用set 用ex指定過期時長也是可以的;setnx是當前數據庫中沒有指定的key就創建,有就不創建;
INCR:對值是整數型的key做自增(+1);DECR:對值是整數型的key做自減(-1);
127.0.0.1:6379> SET age 0 OK 127.0.0.1:6379> GET age "0" 127.0.0.1:6379> INCR age (integer) 1 127.0.0.1:6379> INCR age (integer) 2 127.0.0.1:6379> INCR age (integer) 3 127.0.0.1:6379> GET age "3" 127.0.0.1:6379> DECR age (integer) 2 127.0.0.1:6379> DECR age (integer) 1 127.0.0.1:6379> GET age "1" 127.0.0.1:6379>
INCRBY:對值是整數型的key做指定步長的自增;DECRBY:對值是整數型的key做指定步長的自減;
127.0.0.1:6379> GET age "1" 127.0.0.1:6379> INCRBY age 5 (integer) 6 127.0.0.1:6379> INCRBY age 3 (integer) 9 127.0.0.1:6379> INCRBY age 2 (integer) 11 127.0.0.1:6379> GET age "11" 127.0.0.1:6379> DECRBY age 5 (integer) 6 127.0.0.1:6379> DECRBY age 3 (integer) 3 127.0.0.1:6379> DECRBY age 2 (integer) 1 127.0.0.1:6379> GET age "1" 127.0.0.1:6379>
INCRBYFLOAT:對值是整數型的key做指定步長為浮點數的自增;
127.0.0.1:6379> GET age "1" 127.0.0.1:6379> INCRBYFLOAT age 0.5 "1.5" 127.0.0.1:6379> INCRBYFLOAT age 2.32 "3.82" 127.0.0.1:6379> INCRBYFLOAT age 12.25 "16.07" 127.0.0.1:6379> GET age "16.07" 127.0.0.1:6379>
APPEND:追加一個字符串到指定key的值里面;STRLEN:查看指定key的值的字符串長度;
127.0.0.1:6379> GET k1 "v1" 127.0.0.1:6379> APPEND k1 abcd (integer) 6 127.0.0.1:6379> GET k1 "v1abcd" 127.0.0.1:6379> STRLEN k1 (integer) 6 127.0.0.1:6379> STRLEN k2 (integer) 2 127.0.0.1:6379> APPEND kk aaaa (integer) 4 127.0.0.1:6379> get kk "aaaa" 127.0.0.1:6379>
提示:append如果當前數據指定key不存在則創建,並把指定的字符串當作值賦給指定的key,存在則在對應key的值后面追加指定的字符串;
列表相關常用操作
列表是一個雙向可讀寫的管道,其頭部是左側尾部是右側,一個列表最多可以包含 2^32-1 個元素即4294967295 個元素。對於list類型的數據常用操作有LPUSH、RPUSH、LPOP、RPOP、LPUSHX、RPUSHX、LRANGE、LINDEX、LSET、LLEN;
LPUSH:從左側壓入一個或多個元素到指定列表,如果指定列表不存在,則創建;RPUSH:從右側壓入一個多個元素到指定列表,如果指定列表不存在,則創建;
127.0.0.1:6379> LPUSH L1 a1 a2 a3 a4 a5 (integer) 5 127.0.0.1:6379> TYPE L1 list 127.0.0.1:6379> RPUSH L2 b1 b2 b3 b4 b5 (integer) 5 127.0.0.1:6379> TYPE L2 list 127.0.0.1:6379> LPUSH L2 aa bb (integer) 7 127.0.0.1:6379> RPUSH L1 aa bb (integer) 7 127.0.0.1:6379>
提示:對於列表來說壓入一個或多個元素到列表,它默認是從左側的第一個元素順序往列表壓入元素;LPUSH是從列表的左側進入列表,RPUSH是從列表的右側進入列表;如下圖所示
提示:L1=[a5,a4,a3,a2,a1,aa,bb] L2=[bb,aa,b1,b2,b3,b4,b5]
LPOP:從列表左側彈出一個元素(取走或者刪除);RPOP:從列表右側彈出一個元素(取走或刪除);
127.0.0.1:6379> KEYS * 1) "k5" 2) "k3" 3) "k2" 4) "kk" 5) "age" 6) "L1" 7) "k4" 8) "L2" 9) "k1" 127.0.0.1:6379> LPOP L1 "a5" 127.0.0.1:6379> LPOP L1 "a4" 127.0.0.1:6379> LPOP L1 "a3" 127.0.0.1:6379> LPOP L1 "a2" 127.0.0.1:6379> LPOP L1 "a1" 127.0.0.1:6379> LPOP L1 "aa" 127.0.0.1:6379> LPOP L1 "bb" 127.0.0.1:6379> LPOP L1 (nil) 127.0.0.1:6379> KEYS L1 (empty list or set) 127.0.0.1:6379> RPOP L2 "b5" 127.0.0.1:6379> RPOP L2 "b4" 127.0.0.1:6379> RPOP L2 "b3" 127.0.0.1:6379> RPOP L2 "b2" 127.0.0.1:6379> RPOP L2 "b1" 127.0.0.1:6379> RPOP L2 "aa" 127.0.0.1:6379> RPOP L2 "bb" 127.0.0.1:6379> RPOP L2 (nil) 127.0.0.1:6379> KEYS L2 (empty list or set) 127.0.0.1:6379>
LPUSHX:僅當列表存在時,在列表左側壓入一個元素到列表;RPUSHX:僅當列表存在時,在列表右側壓入一個元素到列表(追加一個元素到列表);
127.0.0.1:6379> KEYS * 1) "k5" 2) "k3" 3) "k2" 4) "kk" 5) "age" 6) "k4" 7) "k1" 127.0.0.1:6379> LPUSHX L1 aa (integer) 0 127.0.0.1:6379> KEYS L1 (empty list or set) 127.0.0.1:6379> LPUSH L1 a1 a2 a3 (integer) 3 127.0.0.1:6379> LPUSHX L1 aa (integer) 4 127.0.0.1:6379> RPUSHX L1 bb (integer) 5 127.0.0.1:6379> LPOP L1 "aa" 127.0.0.1:6379> RPOP L1 "bb" 127.0.0.1:6379>
提示:LPUSHX和RPUSHX都是壓入一個元素到列表,前提是列表存在;
LRANGE:從列表中獲取指定范圍的元素(切片);LINDEX:獲取指定列表的指定下標的元素;
127.0.0.1:6379> KEYS * 1) "k5" 2) "k3" 3) "k2" 4) "kk" 5) "age" 6) "L1" 7) "k4" 8) "L2" 9) "k1" 127.0.0.1:6379> LLEN L1 (integer) 3 127.0.0.1:6379> LPUSH L1 1 2 3 4 5 6 (integer) 9 127.0.0.1:6379> LRANGE L1 0 8 1) "6" 2) "5" 3) "4" 4) "3" 5) "2" 6) "1" 7) "a3" 8) "a2" 9) "a1" 127.0.0.1:6379> LRANGE L1 4 7 1) "2" 2) "1" 3) "a3" 4) "a2" 127.0.0.1:6379> LINDEX L1 5 "1" 127.0.0.1:6379> LINDEX L1 8 "a1" 127.0.0.1:6379> LINDEX L1 0 "6" 127.0.0.1:6379>
提示:列表的索引(下標)是從0開始到元素個數減一結束;
LSET:在列表指定位置插入一個元素,替換原有位置的元素;LLEN:查看列表長度(元素個數)
127.0.0.1:6379> LLEN L1 (integer) 9 127.0.0.1:6379> LSET L1 10 aaa (error) ERR index out of range 127.0.0.1:6379> LINDEX L1 8 "a1" 127.0.0.1:6379> LSET L1 8 bb OK 127.0.0.1:6379> LINDEX L1 8 "bb" 127.0.0.1:6379>
提示:lset指定下標是先有列表的下標范圍內,不能超出已有列表下標的范圍;
集合常用操作
Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重復的數據。對於set類型的數據常用操作有SADD、SMEMBERS、SPOP、SREM、SRANDMEMBER、SINTER、SUNION、SDIFF
SADD:添加一個或多個元素到一個集合,如果該集合不存在,則創建;SMEMBERS:查看指定集合中的所有元素
127.0.0.1:6379> KEYS * 1) "k5" 2) "k3" 3) "k2" 4) "kk" 5) "age" 6) "L1" 7) "k4" 8) "L2" 9) "k1" 127.0.0.1:6379> SADD s1 a b c d (integer) 4 127.0.0.1:6379> SADD s1 1 2 3 4 (integer) 4 127.0.0.1:6379> SADD s1 a (integer) 0 127.0.0.1:6379> SADD s1 aa (integer) 1 127.0.0.1:6379> SMEMBERS s1 1) "3" 2) "2" 3) "b" 4) "c" 5) "4" 6) "a" 7) "1" 8) "d" 9) "aa" 127.0.0.1:6379> KEYS * 1) "k5" 2) "k3" 3) "k2" 4) "s1" 5) "kk" 6) "age" 7) "L1" 8) "k4" 9) "L2" 10) "k1" 127.0.0.1:6379>
提示:集合中成員是唯一的,所以在集合中已有的成員,再次添加相同的成員會添加不成功的,正因為集合的這種特性,它可以用來去除重復的元素;
SPOP:從指定集合中隨機彈出(刪除)一個或多個元素;SREM:從指定集合中刪除一個或多個指定的元素;
127.0.0.1:6379> SMEMBERS s1 1) "3" 2) "2" 3) "b" 4) "c" 5) "4" 6) "a" 7) "1" 8) "d" 9) "aa" 127.0.0.1:6379> SPOP s1 "a" 127.0.0.1:6379> SPOP s1 "aa" 127.0.0.1:6379> SMEMBERS s1 1) "d" 2) "b" 3) "1" 4) "2" 5) "3" 6) "c" 7) "4" 127.0.0.1:6379> SPOP s1 2 1) "1" 2) "b" 127.0.0.1:6379> SMEMBERS s1 1) "d" 2) "2" 3) "3" 4) "c" 5) "4" 127.0.0.1:6379> SREM s1 d 2 (integer) 2 127.0.0.1:6379> SMEMBERS s1 1) "3" 2) "c" 3) "4" 127.0.0.1:6379>
SRANDMEMBER:從指定集合中隨機獲取一個或多個元素;
127.0.0.1:6379> SMEMBERS s1 1) "3" 2) "c" 3) "4" 127.0.0.1:6379> SADD s1 aa bb dd cc (integer) 4 127.0.0.1:6379> SRANDMEMBER s1 "bb" 127.0.0.1:6379> SRANDMEMBER s1 "c" 127.0.0.1:6379> SMEMBERS s1 1) "bb" 2) "dd" 3) "cc" 4) "aa" 5) "3" 6) "c" 7) "4" 127.0.0.1:6379> SRANDMEMBER s1 3 1) "3" 2) "bb" 3) "dd" 127.0.0.1:6379> SRANDMEMBER s1 3 1) "cc" 2) "bb" 3) "dd" 127.0.0.1:6379> SRANDMEMBER s1 3 1) "3" 2) "c" 3) "dd" 127.0.0.1:6379>
SINTER:求交集,已屬於 A 且屬於 B 的元素稱為 A 與 B 的交(集);
127.0.0.1:6379> SMEMBERS s1 1) "bb" 2) "dd" 3) "cc" 4) "aa" 5) "3" 6) "c" 7) "4" 127.0.0.1:6379> SMEMBERS s2 1) "cc" 2) "aa" 3) "2" 4) "b" 5) "c" 6) "bb" 7) "a" 8) "1" 9) "3" 127.0.0.1:6379> SINTER s1 s2 1) "bb" 2) "cc" 3) "aa" 4) "3" 5) "c" 127.0.0.1:6379> SINTER s2 s1 1) "bb" 2) "cc" 3) "aa" 4) "3" 5) "c" 127.0.0.1:6379>
SUNION:求並集,已屬於 A 或屬於 B 的元素為稱為 A 與 B 的並(集);
127.0.0.1:6379> SMEMBERS s1 1) "bb" 2) "dd" 3) "cc" 4) "aa" 5) "3" 6) "c" 7) "4" 127.0.0.1:6379> SMEMBERS s2 1) "bb" 2) "b" 3) "1" 4) "aa" 5) "cc" 6) "2" 7) "3" 8) "c" 9) "a" 127.0.0.1:6379> SUNION s1 s2 1) "bb" 2) "b" 3) "1" 4) "dd" 5) "aa" 6) "cc" 7) "2" 8) "3" 9) "c" 10) "4" 11) "a" 127.0.0.1:6379> SUNION s2 s1 1) "b" 2) "bb" 3) "1" 4) "dd" 5) "cc" 6) "aa" 7) "2" 8) "3" 9) "c" 10) "4" 11) "a" 127.0.0.1:6379>
SDIFF:求差集,已屬於 A 而不屬於 B 的元素稱為 A 與 B 的差(集);
127.0.0.1:6379> SMEMBERS s1 1) "bb" 2) "dd" 3) "cc" 4) "aa" 5) "3" 6) "c" 7) "4" 127.0.0.1:6379> SMEMBERS s2 1) "bb" 2) "b" 3) "1" 4) "aa" 5) "cc" 6) "2" 7) "3" 8) "c" 9) "a" 127.0.0.1:6379> SDIFF s1 s2 1) "4" 2) "dd" 127.0.0.1:6379> SDIFF s2 s1 1) "a" 2) "2" 3) "1" 4) "b" 127.0.0.1:6379>
提示:差集和順序有關,sdiff s1 s2表示s1有的元素,s2沒有的元素,追蹤結果一定是屬於s1;sdiff s2 s1表示,s2有的元素s1沒有的元素,最終結果一定是屬於s2;如果得到的結果是空表示兩個集合相等;
有序集合常用操作
Redis 有序集合和集合一樣也是 string 類型元素的集合,且不允許重復的成員,不同的是每個元素都會關聯一個 double(雙精度浮點型)類型的分數,redis 正是通過分數來為集合中的成員進行從小到大的排序,有序集合的成員是唯一的,但分數(score)卻可以重復,集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1), 集合中最大的成員數為 2^32 - 1 (4294967295, 每個集合可存儲 40 多億個成員)。對於sorted set類型的數據常用操作有ZADD、ZCARD、ZCOUNT、ZRANK、ZRANGE;
ZADD:向有序集合中添加一個或多個成員,如果已經存在,則更新其分數;ZCARD:獲取指定集合成員個數;
127.0.0.1:6379> ZADD z1 10 aa 20 bb 30 cc (integer) 3 127.0.0.1:6379> ZADD z1 50 aa (integer) 0 127.0.0.1:6379> ZCARD z1 (integer) 3 127.0.0.1:6379>
ZCOUNT:統計給定分數范圍在有序集合中成員個數;ZRANK:查看指定成員在有序集合中的索引;
127.0.0.1:6379> ZCOUNT z1 1 15 (integer) 0 127.0.0.1:6379> ZCOUNT z1 10 20 (integer) 1 127.0.0.1:6379> ZCOUNT z1 10 50 (integer) 3 127.0.0.1:6379> ZRANK z1 aa (integer) 2 127.0.0.1:6379> ZRANK z1 bb (integer) 0 127.0.0.1:6379> ZRANK z1 cc (integer) 1 127.0.0.1:6379>
ZRANGE:獲取指定索引范圍內的所有成員;
127.0.0.1:6379> ZRANGE z1 0 2 1) "bb" 2) "cc" 3) "aa" 127.0.0.1:6379> ZRANGE z1 1 2 1) "cc" 2) "aa" 127.0.0.1:6379> ZADD z1 1 aa 5 bb 10 dd 7 xx (integer) 2 127.0.0.1:6379> ZRANGE z1 0 4 1) "aa" 2) "bb" 3) "xx" 4) "dd" 5) "cc" 127.0.0.1:6379> ZRANGE z1 2 4 1) "xx" 2) "dd" 3) "cc" 127.0.0.1:6379>
提示:分數越大,排名(索引)越靠后;
哈希常用操作
hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象,Redis 中每個 hash 可以存儲2^32 - 1個鍵值對(40 多億)。對於hash類型的數據常用操作有HSET、HMSET、HGET、HMGET、HKEYS、HVALS、HDEL、HGETALL
HSET:設置一個hash key和值;HMSET:設置多個hash key和值;
127.0.0.1:6379> HSET h1 name tom (integer) 1 127.0.0.1:6379> HSET h1 age 18 (integer) 1 127.0.0.1:6379> HMSET h2 name jerry age 22 gender M OK 127.0.0.1:6379>
HGET:獲取一個hash key的值;HMGET:獲取多個hash key的值;
127.0.0.1:6379> HGET h1 name "tom" 127.0.0.1:6379> HGET h1 age "18" 127.0.0.1:6379> HMGET h1 name age gender 1) "tom" 2) "18" 3) (nil) 127.0.0.1:6379> HMGET h2 name age gender 1) "jerry" 2) "22" 3) "M" 127.0.0.1:6379>
HKEYS:獲取指定hash key的所有key ;HVALS:獲取指定hash key的所有key的值;
127.0.0.1:6379> HKEYS h1 1) "name" 2) "age" 127.0.0.1:6379> HKEYS h2 1) "name" 2) "age" 3) "gender" 127.0.0.1:6379> HVALS h1 1) "tom" 2) "18" 127.0.0.1:6379> HVALS h2 1) "jerry" 2) "22" 3) "M" 127.0.0.1:6379>
HDEL:刪除一個或多個hash key;HGETALL:獲取指定hash key 的所有key和value;
127.0.0.1:6379> HGETALL h1 1) "name" 2) "tom" 3) "age" 4) "18" 127.0.0.1:6379> HGETALL h2 1) "name" 2) "jerry" 3) "age" 4) "22" 5) "gender" 6) "M" 127.0.0.1:6379> HDEL h1 name (integer) 1 127.0.0.1:6379> HDEL h2 gender age (integer) 2 127.0.0.1:6379> HGETALL h1 1) "age" 2) "18" 127.0.0.1:6379> HGETALL h2 1) "name" 2) "jerry" 127.0.0.1:6379>
消息隊列常用操作
消息隊列主要分為兩種,分別是生產者消費者模式和發布者訂閱者模式,這兩種模式 Redis 都支持;在生產者消費者(Producer/Consumer)模式下,上層應用接收到的外部請求后開始處理其當前步驟的操作,在執行完成后將已經完成的操作發送至指定的頻道(channel)當中,並由其下層的應用監聽該頻道並繼續下一步的操作,如果其處理完成后沒有下一步的操作就直接返回數據給外部請求,如果還有下一步的操作就再將任務發布到另外一個頻道,由另外一個消費者繼續監聽和處理。生產者消費者模式下,多個消費者同時監聽一個隊列,但是一個消息只能被最先搶到消息的消費者消費,即消息任務是一次性讀取和處理,此模式在分布式業務架構中非常常用,比較常用的軟件還有RabbitMQ、Kafka、RocketMQ、ActiveMQ 等;
隊列當中的 消息由不同的生產者寫入也會有不同的消費者取出進行消費處理,但是一個消息一定是只能被取出一次也就是被消費一次。
示例:使用本地連接模擬生產者往隊列里寫入消息,使用遠程連接模擬消費者,消費隊列中的消息;
127.0.0.1:6379> LPUSH channel1 msg1 (integer) 1 127.0.0.1:6379> LPUSH channel1 msg2 (integer) 2 127.0.0.1:6379> LPUSH channel1 msg3 (integer) 3 127.0.0.1:6379> LRANGE channel1 0 -1 1) "msg3" 2) "msg2" 3) "msg1" 127.0.0.1:6379>
提示:以上在channel1這個消息隊列中寫入了3條信息;
使用遠程連接來模擬消費者到指定隊列消費消息
192.168.0.41:6379> RPOP channel1 "msg1" 192.168.0.41:6379> RPOP channel1 "msg2" 192.168.0.41:6379> RPOP channel1 "msg3" 192.168.0.41:6379> RPOP channel1 (nil) 192.168.0.41:6379> LRANGE channel1 0 -1 (empty array) 192.168.0.41:6379>
提示:可以看到消息隊列里的消息消費完以后,就空了;
發布者訂閱模式
在發布者訂閱者模式下,發布者將消息發布到指定的 channel 里面,凡是監聽該 channel 的消費者都會收到同樣的一份消息,這種模式類似於是收音機模式,即凡是收聽某個頻道的聽眾都會收到主持人發布的相同的消息內容。此模式常用語群聊天、群通知、群公告等場景;
示例:訂閱者監聽頻道
提示:訂閱者可以同時監聽多個頻道;
發布者發布
訂閱者驗證消息
提示:以上訂閱者只訂閱了一個頻道,如果定義多個頻道可以在后面添加頻道名稱即可;也可以使用PSUBSCRIBE 加模式匹配監聽多個頻道;取消訂閱使用UNSUBSCRIBE 加要取消訂閱的頻道名稱即可;也可以使用PUNSUBSCRIBE 加模式匹配 來取消匹配到的頻道;