您好,登錄后才能下訂單哦!
這篇文章主要講解了“Redis有哪些基本數據結構和操作”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Redis有哪些基本數據結構和操作”吧!
一個String類型的key、value最大上限均是512M。其基本結構如下:基本語法
Redis中字符串的基本操作如下表所示。
使用場景-統計用戶上線天數Bitmap 對于一些特定類型的計算非常有效。
假設現在我們希望記錄自己網站上的用戶的上線頻率,比如說,計算用戶 A 上線了多少天,用戶 B 上線了多少天,諸如此類,以此作為數據,從而決定讓哪些用戶參加 beta 測試等活動 —— 這個模式可以使用 SETBIT 和 BITCOUNT 來實現。
比如說,每當用戶在某一天上線的時候,我們就使用 SETBIT ,以用戶名作為 key ,將那天所代表的網站的上線日作為 offset 參數,并將這個 offset 上的為設置為 1 。
舉個例子,如果今天是網站上線的第 100 天,而用戶 peter 在今天閱覽過網站,那么執行命令 SETBIT peter 100 1 ;如果明天 peter 也繼續閱覽網站,那么執行命令 SETBIT peter 101 1 ,以此類推。
當要計算 peter 總共以來的上線次數時,就使用 BITCOUNT 命令:執行 BITCOUNT peter ,得出的結果就是 peter 上線的總天數。
操作 | 語法 | 說明 |
---|---|---|
BLPOP | BLPOP key [key …] timeout | BLPOP 是列表的阻塞式(blocking)彈出原語.它是 LPOP 命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連接將被 BLPOP 命令阻塞. |
BRPOP | BRPOP key [key …] timeout | 它是 RPOP 命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連接將被 BRPOP 命令阻塞. |
BRPOPLPUSH | BRPOPLPUSH source destination timeout | BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,當給定列表 source 不為空時, BRPOPLPUSH 的表現和 RPOPLPUSH 一樣。當列表 source 為空時, BRPOPLPUSH 命令將阻塞連接,直到等待超時,或有另一個客戶端對 source 執行 LPUSH 或 RPUSH 命令為止。 |
LINDEX | LINDEX key index | 返回列表 key 中,下標為 index 的元素。 |
LINSERT | LINSERT key BEFORE/AFTER pivot value | 將值 value 插入到列表 key 當中,位于值 pivot 之前或之后。當 pivot 不存在于列表 key 時,不執行任何操作。當 key 不存在時, key 被視為空列表,不執行任何操作。如果 key 不是列表類型,返回一個錯誤。 |
LLEN | LLEN key | 返回列表 key 的長度。 |
LPOP | LPOP key | 移除并返回列表 key 的頭元素。 |
LPUSH | LPUSH key value [value …] | 將一個或多個值 value 插入到列表 key 的表頭 |
LPUSHX | LPUSHX key value | 將值 value 插入到列表 key 的表頭,當且僅當 key 存在并且是一個列表 |
LRANGE | LRANGE key start stop | 返回列表 key 中指定區間內的元素,區間以偏移量 start 和 stop 指定 |
LREM | LREM key count value | 根據參數 count 的值,移除列表中與參數 value 相等的元素 |
LSET | LSET key index value | 將列表 key 下標為 index 的元素的值設置為 value |
LTRIM | LTRIM key start stop | 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。舉個例子,執行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三個元素,其余元素全部刪除。 |
RPOP | RPOP key | 移除并返回列表 key 的尾元素 |
RPOPLPUSH | RPOPLPUSH source destination | 命令 RPOPLPUSH 在一個原子時間內,執行以下兩個動作:將列表 source 中的最后一個元素(尾元素)彈出,并返回給客戶端。將 source 彈出的元素插入到列表 destination ,作為 destination 列表的的頭元素。 |
RPUSH | RPUSH key value [value …] | 將一個或多個值 value 插入到列表 key 的表尾(最右邊) |
RPUSHX | RPUSHX key value | 將值 value 插入到列表 key 的表尾,當且僅當 key 存在并且是一個列表。和 RPUSH 命令相反,當 key 不存在時, RPUSHX 命令什么也不做。 |
舉一些例子:
棧
127.0.0.1:6379> lpush stack "a" "b" "c" (integer) 3 127.0.0.1:6379> rpop stack "a" 1 2 3 4
隊列
127.0.0.1:6379> lpush queue "a" "b" "c" (integer) 3 127.0.0.1:6379> lpop queue "c" 1 2 3 4 5
BLPOP
127.0.0.1:6379> exists job (integer) 0 127.0.0.1:6379> blpop job 5 #一直阻塞到5s超時 (nil) (5.03s) 1 2 3 4 5
LINDEX
127.0.0.1:6379> lpush myjob "my" "job" "is" "iter" (integer) 4 127.0.0.1:6379> lindex myjob -1 "my" 1 2 3 4
存儲的是一個field與value的映射表,即存儲的是一個Map,每一條數據可以看做是key-field-value的格式,field-value對應的是Map的一個鍵值對。
使用場景-存儲社交關系
比如新浪的關注列表, 粉絲列表都是由hash實現的。
操作 | 語法 | 說明 |
---|---|---|
SADD | SADD key member [member …] | 將一個或多個 member 元素加入到集合 key 當中,已經存在于集合的 member 元素將被忽略. |
SCARD | SCARD key | 返回集合 key 的基數(集合中元素的數量). |
SDIFF | SDIFF key [key …] | 返回一個集合的全部成員,該集合是所有給定集合之間的差集. |
SDIFFSTORE | SDIFFSTORE destination key [key …] | 這個命令的作用和 SDIFF 類似,但它將結果保存到 destination 集合,而不是簡單地返回結果集. |
SINTER | SINTER key [key …] | 返回一個集合的全部成員,該集合是所有給定集合的交集. |
SINTERSTORE | SINTERSTORE destination key [key …] | 這個命令類似于 SINTER 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集. |
SISMEMBER | SISMEMBER key member | 判斷 member 元素是否集合 key 的成員. |
SMEMBERS | SMEMBERS key | 返回集合 key 中的所有成員. |
SMOVE | SMOVE source destination member | 將 member 元素從 source 集合移動到 destination 集合. |
SPOP | SPOP key | 移除并返回集合中的一個隨機元素. |
SRANDMEMBER | SRANDMEMBER key [count] | 如果 count 為正數,且小于集合基數,那么命令返回一個包含 count 個元素的數組,數組中的元素各不相同。如果 count 大于等于集合基數,那么返回整個集合。如果 count 為負數,那么命令返回一個數組,數組中的元素可能會重復出現多次,而數組的長度為 count 的絕對值. |
SREM | SREM key member [member …] | 移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略. |
SUNION | SUNION key [key …] | 返回一個集合的全部成員,該集合是所有給定集合的并集. |
SUNIONSTORE | SUNIONSTORE destination key [key …] | 這個命令類似于 SUNION 命令,但它將結果保存到 destination 集合,而不是簡單地返回結果集. |
SSCAN | SSCAN key cursor [MATCH pattern] [COUNT count] | 詳細信息請參考 SCAN 命令. |
舉一些例子
差集
127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> sdiff set1 set2 1) "a2" 127.0.0.1:6379> sdiffstore set set1 set2 (integer) 1 127.0.0.1:6379> smembers set 1) "a2" 1 2 3 4 5 6 7 8 9 10 11
并集
127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> sunion set1 set2 1) "a4" 2) "a1" 3) "a3" 4) "a2" 1 2 3 4 5 6 7 8 9 10
交集
127.0.0.1:6379> sadd set1 "a1" "a2" "a3" (integer) 3 127.0.0.1:6379> sadd set2 "a1" "a3" "a4" (integer) 3 127.0.0.1:6379> smembers set 1) "a2" 127.0.0.1:6379> sinter set1 set2 1) "a3" 2) "a1" 127.0.0.1:6379> sinterstore set set1 set2 (integer) 2 127.0.0.1:6379> smembers set 1) "a1" 2) "a3" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
和set一樣sorted set也是string類型元素的集合,不同的是每個元素都會關聯一個double類型的score,所以sorted set是一個有序的集合。
使用場景-用戶得分排行榜
和Sets相比,Sorted Sets是將 Set 中的元素增加了一個權重參數 score,使得集合中的元素能夠按 score 進行有序排列,比如一個存儲全班同學成績的 Sorted Sets,其集合 value 可以是同學的學號,而 score 就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。另外還可以用 Sorted Sets 來做帶權重的隊列,比如普通消息的 score 為1,重要消息的 score 為2,然后工作線程可以選擇按 score 的倒序來獲取工作任務。讓重要的任務優先執行。
帶有權重的元素,比如一個游戲的用戶得分排行榜
感謝各位的閱讀,以上就是“Redis有哪些基本數據結構和操作”的內容了,經過本文的學習后,相信大家對Redis有哪些基本數據結構和操作這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。