【Redis01】Redis常用命令
一、基礎(chǔ)命令
1、ping(心跳命令)
鍵入ping命令,若看到PONG響應(yīng),則說明客戶端與Redis的連接時(shí)正常的。
2、get/set(讀寫鍵值命令)
set key value
會(huì)將指定key-value
寫入到DB。get key
則會(huì)讀取指定key的value值。
3、select(切換數(shù)據(jù)庫)
redis默認(rèn)有 16 個(gè)數(shù)據(jù)庫。這個(gè)在 Redis Desktop Manager(RDM)圖形客戶端中可以直 觀地看到。默認(rèn)使用的是 0 號(hào) DB,可以通過 select db 索引來切換 DB。如圖,切換到1號(hào)DB:
4、dbsize(查看key數(shù)量)
dbsize 命令可以查看當(dāng)前數(shù)據(jù)庫中 key 的數(shù)量。
5、flushdb(刪除當(dāng)前庫中所有數(shù)據(jù))
清楚當(dāng)前DB中的所有數(shù)據(jù),不影響其他DB。
6、flushall(刪除所有DB中的數(shù)據(jù))
二、Key 相關(guān)操作命令
1、keys
格式:KEYS pattern
功能:查找所有符合給定模式 pattern 的 key,pattern 為正則表達(dá)式。
說明:KEYS 的速度非???,但在一個(gè)大的數(shù)據(jù)庫中使用它可能會(huì)阻塞當(dāng)前服務(wù)器的服務(wù)。所以生產(chǎn)環(huán)境中一般不使用該命令,而使用 scan 命令代替。
如圖:查看所有模式與查看所有開頭結(jié)尾為‘a(chǎn)’的模式
2、exists
格式:EXISTS key
功能:檢查給定 key 是否存在。
說明:若 key 存在,返回 1 ,否則返回 0 。
3、del
格式:DEL key [key …]
功能:刪除給定的一個(gè)或多個(gè) key 。不存在的 key 會(huì)被忽略。
說明:返回被刪除 key 的數(shù)量。
4、rename
l 格式:RENAME key newkey
l 功能:將 key 改名為 newkey。
l 說明:當(dāng) key 和 newkey 相同,或者 key 不存在時(shí),返回一個(gè)錯(cuò)誤。當(dāng) newkey 已經(jīng)存在時(shí), RENAME 命令將覆蓋舊值。改名成功時(shí)提示 OK ,失敗時(shí)候返回一個(gè)錯(cuò)誤。
5、move
l 格式:MOVE key db
l 功能:將當(dāng)前數(shù)據(jù)庫的 key 移動(dòng)到給定的數(shù)據(jù)庫 db 當(dāng)中。
l 說明:如果當(dāng)前數(shù)據(jù)庫(源數(shù)據(jù)庫)和給定數(shù)據(jù)庫(目標(biāo)數(shù)據(jù)庫)有相同名字的給定 key ,或者 key 不存在于當(dāng)前數(shù)據(jù)庫,那么 MOVE 沒有任何效果。移動(dòng)成功返回 1 ,失敗則返回 0 。
6、type
l 格式:TYPE key
l 功能:返回 key 所儲(chǔ)存的值的類型。
l 說明:返回值有以下六種
? none (key 不存在)
? string (字符串)
? list (列表)
? set (集合)
? zset (有序集)
? hash (哈希表)
7、expire/pexpire
l 格式:EXPIRE key seconds
l 功能:為給定 key 設(shè)置生存時(shí)間。當(dāng) key 過期時(shí)(生存時(shí)間為 0),它會(huì)被自動(dòng)刪除。 expire 的時(shí)間單位為秒,pexpire 的時(shí)間單位為毫秒。在 Redis 中,帶有生存時(shí)間的 key被稱為“易失”(volatile)。
l 說明:生存時(shí)間設(shè)置成功返回 1。若 key 不存在時(shí)返回 0 。rename 操作不會(huì)改變 key的生存時(shí)間。
8、ttl/pttl
格式:TTL key
功能:TTL, time to live,返回給定 key 的剩余生存時(shí)間。
說明:其返回值存在三種可能:
? 1/當(dāng) key 不存在時(shí),返回 -2 。
? 2/當(dāng) key 存在但沒有設(shè)置剩余生存時(shí)間時(shí),返回 -1 。
? 3/否則,返回 key 的剩余生存時(shí)間。ttl 命令返回的時(shí)間單位為秒,而 pttl 命令返回的時(shí)間單位為毫秒。
9、persist
l 格式:PERSIST key
l 功能:去除給定 key 的生存時(shí)間,將這個(gè) key 從“易失的”轉(zhuǎn)換成“持久的”。
l 說明:當(dāng)生存時(shí)間移除成功時(shí),返回 1;若 key 不存在或 key 沒有設(shè)置生存時(shí)間,則返回 0。
10、randomkey
l 格式:RANDOMKEY
l 功能:從當(dāng)前數(shù)據(jù)庫中隨機(jī)返回(不刪除)一個(gè) key。
l 說明:當(dāng)數(shù)據(jù)庫不為空時(shí),返回一個(gè) key。當(dāng)數(shù)據(jù)庫為空時(shí),返回 nil。
11、scan
-
格式:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
-
功能:用于迭代數(shù)據(jù)庫中的數(shù)據(jù)庫鍵。其各個(gè)選項(xiàng)的意義為:
- cursor:本次迭代開始的游標(biāo)。
- pattern :本次迭代要匹配的 key 的模式。
- count :本次迭代要從數(shù)據(jù)集里返回多少元素,默認(rèn)值為 10 。
- type:本次迭代要返回的value 的類型,默認(rèn)為所有類型。
SCAN 命令是一個(gè)基于游標(biāo) cursor 的迭代器:SCAN 命令每次被調(diào)用之后,都會(huì)向用戶返回返回一個(gè)包含兩個(gè)元素的數(shù)組, 第一個(gè)元素是用于進(jìn)行下一次迭代的新游標(biāo),而第二個(gè)元素則是一個(gè)數(shù)組, 這個(gè)數(shù)組中包含了所有被迭代的元素。用戶在下次迭代時(shí)需要使用這個(gè)新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù),以此來延續(xù)之前的迭代過程。當(dāng) SCAN 命令的游標(biāo)參數(shù)被設(shè)置為 0 時(shí),服務(wù)器將開始一次新的迭代。如果新游標(biāo)返回 0表示迭代已結(jié)束。
-
說明:使用間斷的、負(fù)數(shù)、超出范圍或者其他非正常的游標(biāo)來執(zhí)行增量式迭代不會(huì)造成服務(wù)器崩潰。
當(dāng)數(shù)據(jù)量很大時(shí),count 的數(shù)量的指定可能會(huì)不起作用,Redis 會(huì)自動(dòng)調(diào)整每次的遍歷數(shù)目。由于 scan 命令每次執(zhí)行都只會(huì)返回少量元素,所以該命令可以用于生產(chǎn)環(huán)境,而不會(huì)出現(xiàn)像 KEYS 命令帶來的服務(wù)器阻塞問題。
增量式迭代命令所使用的算法只保證在數(shù)據(jù)集的大小有界的情況下迭代才會(huì)停止,換句話說,如果被迭代數(shù)據(jù)集的大小不斷地增長(zhǎng)的話,增量式迭代命令可能永遠(yuǎn)也無法完成一次完整迭代。即當(dāng)一個(gè)數(shù)據(jù)集不斷地變大時(shí),想要訪問這個(gè)數(shù)據(jù)集中的所有元素就需要做越來越多的工作, 能否結(jié)束一個(gè)迭代取決于用戶執(zhí)行迭代的速度是否比數(shù)據(jù)集增長(zhǎng)的速度更快。
-
相關(guān)命令:另外還有 3 個(gè) scan 命令用于對(duì)三種類型的 value 進(jìn)行遍歷。
- hscan:屬于 Hash 型 Value 操作命令集合,用于遍歷當(dāng)前 db 中指定 Hash 表的所有 field-value 對(duì)。
- sscan:屬于 Set 型Value 操作命令集合,用于遍歷當(dāng)前 db 中指定 set 集合的所有元素
- zscan:屬于 ZSet 型 Value 操作命令集合,用于遍歷當(dāng)前 db 中指定有序集合的所有元素(數(shù)值與元素值)
三、String型Value操作命令
Redis 存儲(chǔ)數(shù)據(jù)的 Value 可以是一個(gè) String 類型數(shù)據(jù)。String 類型的Value 是 Redis 中最基本,最常見的類型。String 類型的 Value 中可以存放任意數(shù)據(jù),包括數(shù)值型,甚至是二進(jìn)制的圖片、音頻、視頻、序列化對(duì)象等。一個(gè) String 類型的 Value 最大是 512M 大小。
1、set
格式:SET key value [EX seconds | PX milliseconds] [NX|XX]
功能:SET 除了可以直接將 key 的值設(shè)為 value 外,還可以指定一些參數(shù)。
EX seconds:為當(dāng)前 key 設(shè)置過期時(shí)間,單位秒。等價(jià)于 SETEX 命令。
PX milliseconds:為當(dāng)前 key 設(shè)置過期時(shí)間,單位毫秒。等價(jià)于 PSETEX 命令。
NX:指定的 key 不存在才會(huì)設(shè)置成功,用于添加指定的 key。等價(jià)于 SETNX 命令。
XX:指定的 key 必須存在才會(huì)設(shè)置成功,用于更新指定key 的value。
說明:如果value 字符串中帶有空格,則該字符串需要使用雙引號(hào)或單引號(hào)引起來,否則會(huì)認(rèn)為 set 命令的參數(shù)數(shù)量不正確,報(bào)錯(cuò)。
2、setex/psetex
格式:SETEX/PSETEX key seconds value
功能:set expire,其不僅為 key 指定了value,還為其設(shè)置了生存時(shí)間。setex 的單位為秒,psetex 的單位為毫秒。
說明:如果 key 已經(jīng)存在, 則覆寫舊值。該命令類似于以下兩個(gè)命令,不同之處是, SETEX 是一個(gè)原子性操作,關(guān)聯(lián)值和設(shè)置生存時(shí)間兩個(gè)動(dòng)作會(huì)在同一時(shí)間內(nèi)完成,該命令在 Redis 用作緩存時(shí),非常實(shí)用。
SET key value
EXPIRE key seconds # 設(shè)置生存時(shí)間
如下圖兩條指令作用相同:
3、setnx
l 格式:SETNX key value
l 功能:SET if Not eXists,將 key 的值設(shè)為 value ,當(dāng)且僅當(dāng) key 不存在。若給定的 key
已經(jīng)存在,則 SETNX 不做任何動(dòng)作。成功,返回 1,否則,返回 0。
l 說明:該命令等價(jià)于
set key value nx
4、getset
格式:GETSET key value
功能:將給定 key 的值設(shè)為 value ,并返回 key 的舊值。
說明:當(dāng) key 存在但不是字符串類型時(shí),返回一個(gè)錯(cuò)誤;當(dāng) key 不存在時(shí),返回 nil 。
5、mset/msetnx
格式:MSET/MSETNX key value [key value …]
功能:同時(shí)設(shè)置一個(gè)或多個(gè) key-value 對(duì)。
說明:如果某個(gè)給定 key 已經(jīng)存在,那么 MSET 會(huì)用新值覆蓋原來的舊值,如果這不 是你所希望的效果,請(qǐng)考慮使用 MSETNX 命令:它只會(huì)在所有給定 key 都不存在的情 況下進(jìn)行設(shè)置操作。MSET/MSETNX 是一個(gè)原子性(atomic)操作,所有給定 key 都會(huì)在同 一時(shí)間內(nèi)被設(shè)置,某些給定 key 被更新而另一些給定 key 沒有改變的情況不可能發(fā)生。該命令永不失敗。
6、mget
格式:MGET key [key …]
功能:返回所有(一個(gè)或多個(gè))給定 key 的值。
說明:如果給定的 key 里面,有某個(gè) key 不存在,那么這個(gè) key 返回特殊值 nil 。因此,該命令永不失敗。
7、append
格式:APPEND key value
功能:如果 key 已經(jīng)存在并且是一個(gè)字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。如果 key 不存在, APPEND 就簡(jiǎn)單地將給定 key 設(shè)為 value ,就像執(zhí)行 SET key value 一樣。
說明:追加 value 之后, key 中字符串的長(zhǎng)度。
8、incr/decr
格式:INCR key 或 DECR key
功能:increment,自動(dòng)遞增。將 key 中存儲(chǔ)的數(shù)字值增一。decrement,自動(dòng)遞減。將 key 中存儲(chǔ)的數(shù)字值減一。
說明:如果 key 不存在,那么 key 的值會(huì)先被初始化為 0,然后再執(zhí)行增一/減一操作。如果值不能表示為數(shù)字,那么返回一個(gè)錯(cuò)誤提示。如果執(zhí)行正確,則返回增一/減一后的值。
9、incrby/decrby
格式:INCRBY key increment 或 DECRBY key decrement
功能:將 key 中存儲(chǔ)的數(shù)字值增加/減少指定的數(shù)值,這個(gè)數(shù)值只能是整數(shù),可以是負(fù)數(shù),但不能是小數(shù)。
說明:如果 key 不存在,那么 key 的值會(huì)先被初始化為 0,然后再執(zhí)行增/減操作。如果值不能表示為數(shù)字,那么返回一個(gè)錯(cuò)誤提示。如果執(zhí)行正確,則返回增/減后的值。
10、incrbyfloat
格式:INCRBYFLOAT key increment
功能:為 key 中所儲(chǔ)存的值加上浮點(diǎn)數(shù)增量 increment 。
說明:與之前的說明相同。沒有 decrbyfloat 命令,但 increment 為負(fù)數(shù)可以實(shí)現(xiàn)減操作效果。
11、strlen
格式:STRLEN key
功能:返回 key 所儲(chǔ)存的字符串值的長(zhǎng)度。
說明:當(dāng) key 儲(chǔ)存的不是字符串值時(shí),返回一個(gè)錯(cuò)誤;當(dāng) key 不存在時(shí),返回 0 。
12、getrange
格式:GETRANGE key start end
功能:返回 key 中字符串值的子字符串,字符串的截取范圍由 start 和 end 兩個(gè)偏移量決定,包括 start 和 end 在內(nèi)。
說明:end 必須要比 start 大。支持負(fù)數(shù)偏移量,表示從字符串最后開始計(jì)數(shù),-1 表示最后一個(gè)字符,-2 表示倒數(shù)第二個(gè),以此類推。
13、setrange
格式:SETRANGE key offset value
功能:用 value 參數(shù)替換給定 key 所儲(chǔ)存的字符串值 str,從偏移量 offset 開始。
說明:當(dāng) offset 值大于 str 長(zhǎng)度時(shí),中間使用零字節(jié)\x00 填充,即 0000 0000 字節(jié)填充;對(duì)于不存在的 key 當(dāng)作空串處理。
14、位操作命令
名稱中包含 BIT 的命令,都是對(duì)二進(jìn)制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield,這些命令不常用。
15、典型應(yīng)用場(chǎng)景
Value 為 String 類型的應(yīng)用場(chǎng)景很多,這里僅舉這種典型應(yīng)用場(chǎng)景的例子:
-
數(shù)據(jù)緩存:Redis 作為數(shù)據(jù)緩存層,MySQL 作為數(shù)據(jù)存儲(chǔ)層。應(yīng)用服務(wù)器首先從 Redis 中獲取數(shù)據(jù),如果緩存層中沒有,則從MySQL 中獲取后先存入緩存層再返回給應(yīng)用服務(wù)器。
-
計(jì)數(shù)器:在 Redis 中寫入一個(gè) value 為數(shù)值型的 key 作為平臺(tái)計(jì)數(shù)器、視頻播放計(jì)數(shù)器等。每個(gè)有效客戶端訪問一次,或視頻每播放一次,都是直接修改 Redis 中的計(jì)數(shù)器,然后再以異步方式持久化到其它數(shù)據(jù)源中,例如持久化到 MySQL。
-
共享Session:對(duì)于一個(gè)分布式應(yīng)用系統(tǒng),如果將類似用戶登錄信息這樣的 Session 數(shù)據(jù)保存在提供登錄服務(wù)的服務(wù)器中,那么如果用戶再次提交像收藏、支付等請(qǐng)求時(shí)可能會(huì)出現(xiàn)問題:在提供收藏、支付等服務(wù)的服務(wù)器中并沒有該用戶的 Session 數(shù)據(jù),從而導(dǎo)致該用戶需要重新登錄。對(duì)于用戶來說,這是不能接受的。此時(shí),可以將系統(tǒng)中所有用戶的 Session 數(shù)據(jù)全部保存到 Redis 中,用戶在提交新的請(qǐng)求后,系統(tǒng)先從Redis 中查找相應(yīng)的Session 數(shù)據(jù),如果存在,則再進(jìn)行相關(guān)操作,否則跳轉(zhuǎn)到登錄頁面。這樣就不會(huì)引發(fā)“重新登錄”問題。
-
限速器:現(xiàn)在很多平臺(tái)為了防止 DoS(Denial of Service,拒絕服務(wù))攻擊,一般都會(huì)限制一個(gè) IP不能在一秒內(nèi)訪問超過 n 次。而 Redis 可以可以結(jié)合 key 的過期時(shí)間與 incr 命令來完成限速功能,充當(dāng)限速器。注意,其無法防止 DDoS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊。
四、Hash型Value操作命令
Redis 存儲(chǔ)數(shù)據(jù)的 Value 可以是一個(gè) Hash 類型。Hash 類型也稱為 Hash 表、字典等。
Hash 表就是一個(gè)映射表 Map,也是由鍵-值對(duì)構(gòu)成,為了與整體的 key 進(jìn)行區(qū)分,這里的鍵稱為 field,值稱為 value。注意,Redis 的 Hash 表中的 field-value 對(duì)均為 String 類型。
1、hset
格式:HSET key field value
功能:將哈希表 key 中的域 field 的值設(shè)為 value 。
說明:如果 key 不存在,一個(gè)新的哈希表被創(chuàng)建并進(jìn)行 HSET 操作。如果域 field 已經(jīng)存在于哈希表中,舊值將被覆蓋。如果 field 是哈希表中的一個(gè)新建域,并且值設(shè)置成功,返回 1 。如果哈希表中域 field 已經(jīng)存在且舊值已被新值覆蓋,返回 0 。
2、hget
格式:HGET key field
功能:返回哈希表 key 中給定域 field 的值。
說明:當(dāng)給定域不存在或是給定 key 不存在時(shí),返回 nil 。
3、hmset
格式:HMSET key field value [field value …]
功能:同時(shí)將多個(gè) field-value (域-值)對(duì)設(shè)置到哈希表 key 中。
說明:此命令會(huì)覆蓋哈希表中已存在的域。如果 key 不存在,一個(gè)空哈希表被創(chuàng)建并執(zhí)行 HMSET 操作。如果命令執(zhí)行成功,返回 OK 。當(dāng) key 不是哈希表(hash)類型時(shí),返回一個(gè)錯(cuò)誤。
4、hmget
格式:HMGET key field [field …]
功能:按照給出順序返回哈希表 key 中一個(gè)或多個(gè)域的值。
說明:如果給定的域不存在于哈希表,那么返回一個(gè) nil 值。因?yàn)椴淮嬖诘?key 被當(dāng)作一個(gè)空哈希表來處理,所以對(duì)一個(gè)不存在的 key 進(jìn)行 HMGET 操作將返回一個(gè)只帶有 nil 值的表。
5、hgetall
格式:HGETALL key
功能:返回哈希表 key 中所有的域和值。
說明:在返回值里,緊跟每個(gè)域名(field name)之后是域的值(value),所以返回值的長(zhǎng)度是哈希表大小的兩倍。若 key 不存在,返回空列表。若 key 中包含大量元素,則該命令可能會(huì)阻塞 Redis 服務(wù)。所以生產(chǎn)環(huán)境中一般不使用該命令,而使用 hscan 命令代替。
6、hsetnx
格式:HSETNX key field value
功能:將哈希表 key 中的域 field 的值設(shè)置為 value ,當(dāng)且僅當(dāng)域 field 不存在。
說明:若域 field 已經(jīng)存在,該操作無效。如果 key 不存在,一個(gè)新哈希表被創(chuàng)建并執(zhí)行 HSETNX 命令。
7、hdel
格式:HDEL key field [field …]
功能:刪除哈希表 key 中的一個(gè)或多個(gè)指定域,不存在的域?qū)⒈缓雎浴?/p>
說明:返回被成功移除的域的數(shù)量,不包括被忽略的域。
8、hexists
格式:HEXISTS key field
功能:查看哈希表 key 中給定域 field 是否存在。
說明:如果哈希表含有給定域,返回 1 。如果不含有給定域,或 key 不存在,返回 0 。
9、hincrby/hincrbyfloat
格式:HINCRBY key field increment
功能:為哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整數(shù)值,而 hincrbyfloat 可以增加小數(shù)值。
說明:增量也可以為負(fù)數(shù),相當(dāng)于對(duì)給定域進(jìn)行減法操作。如果 key 不存在,一個(gè)新的哈希表被創(chuàng)建并執(zhí)行 HINCRBY 命令。如果域 field 不存在,那么在執(zhí)行命令前,域的值被初始化為 0。對(duì)一個(gè)儲(chǔ)存字符串值的域 field 執(zhí)行 HINCRBY 命令將造成一個(gè)錯(cuò)誤。
10、hkeys/hvals
格式:HKEYS key 或 HVALS key
功能:返回哈希表 key 中的所有域/值。
說明:當(dāng) key 不存在時(shí),返回一個(gè)空表。
11、hlen
格式:HLEN key
功能:返回哈希表 key 中域的數(shù)量。
說明:當(dāng) key 不存在時(shí),返回 0 。
12、hstrlen
格式:HSTRLEN key field
功能:返回哈希表 key 中, 與給定域 field 相關(guān)聯(lián)的值的字符串長(zhǎng)度(string length)。
說明:如果給定的鍵或者域不存在, 那么命令返回 0 。
13、應(yīng)用場(chǎng)景
Hash 型 Value 非常適合存儲(chǔ)對(duì)象數(shù)據(jù)。key 為對(duì)象名稱,value 為描述對(duì)象屬性的 Map,對(duì)對(duì)象屬性的修改在Redis 中就可直接完成。其不像String 型 Value 存儲(chǔ)對(duì)象,那個(gè)對(duì)象是序列化過的,例如序列化為 JSON 串,對(duì)對(duì)象屬性值的修改需要先反序列化為對(duì)象后再修改,修改后再序列化為JSON 串后寫入到 Redis。
五、List型Value操作命令
Redis 存儲(chǔ)數(shù)據(jù)的 Value 可以是一個(gè) String 列表類型數(shù)據(jù)。即該列表中的每個(gè)元素均為 String 類型數(shù)據(jù)。列表中的數(shù)據(jù)會(huì)按照插入順序進(jìn)行排序。不過,該列表的底層實(shí)際是一個(gè)無頭節(jié)點(diǎn)的雙向鏈表,所以對(duì)列表表頭與表尾的操作性能較高,但對(duì)中間元素的插入與刪除的操作的性能相對(duì)較差。
1、lpush/rpush
格式:LPUSH key value [value …] 或 RPUSH key value [value …]
功能:將一個(gè)或多個(gè)值 value 插入到列表 key 的表頭/表尾(表頭在左表尾在右)
說明:如果有多個(gè) value 值,對(duì)于 lpush 來說,各個(gè) value 會(huì)按從左到右的順序依次插入到表頭;對(duì)于 rpush 來說,各個(gè) value 會(huì)按從左到右的順序依次插入到表尾。如果 key不存在,一個(gè)空列表會(huì)被創(chuàng)建并執(zhí)行操作。當(dāng) key 存在但不是列表類型時(shí),返回一個(gè)錯(cuò)誤。執(zhí)行成功時(shí)返回列表的長(zhǎng)度。
2、llen
格式:LLEN key
功能:返回列表 key 的長(zhǎng)度。
說明:如果 key 不存在,則 key 被解釋為一個(gè)空列表,返回 0 。如果 key 不是列表類型,返回一個(gè)錯(cuò)誤。
3、lindex
格式:LINDEX key index
功能:返回列表 key 中,下標(biāo)為 index 的元素。列表從 0 開始計(jì)數(shù)。
說明:如果 index 參數(shù)的值不在列表的區(qū)間范圍內(nèi)(out of range),返回 nil 。
4、lset
格式:LSET key index value
功能:將列表 key 下標(biāo)為 index 的元素的值設(shè)置為 value 。
說明:當(dāng) index 參數(shù)超出范圍,或?qū)σ粋€(gè)空列表(key 不存在)進(jìn)行 LSET 時(shí),返回一個(gè)錯(cuò)誤。
5、lrange
格式:LRANGE key start stop
功能:返回列表 key 中指定區(qū)間[start, stop]內(nèi)的元素,即包含兩個(gè)端點(diǎn)。
說明:List 的下標(biāo)從 0 開始,即以 0 表示列表的第一個(gè)元素,以 1 表示列表的第二個(gè)元素,以此類推。也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個(gè)元素, -2 表示列表的倒數(shù)第二個(gè)元素,以此類推。超出范圍的下標(biāo)值不會(huì)引起錯(cuò)誤。如果 start 下標(biāo)比列表的最大下標(biāo) 還要大,那么 LRANGE 返回一個(gè)空列表。如果 stop 下標(biāo)比最大下標(biāo)還要大,Redis 將 stop 的值設(shè)置為最大下標(biāo)。
6、lpushx/rpushx
格式:LPUSHX key value 或 RPUSHX key value
功能:將值 value 插入到列表 key 的表頭/表尾,當(dāng)且僅當(dāng) key 存在并且是一個(gè)列表。
說明:當(dāng) key 不存在時(shí),命令什么也不做。若執(zhí)行成功,則輸出表的長(zhǎng)度。
7、linsert
格式:LINSERT key BEFORE|AFTER pivot value
功能:將值 value 插入到列表 key 當(dāng)中,位于元素 pivot 之前或之后。
說明:當(dāng) pivot 元素不存在于列表中時(shí),不執(zhí)行任何操作,返回-1;當(dāng) key 不存在時(shí), key 被視為空列表,不執(zhí)行任何操作,返回 0;如果 key 不是列表類型,返回一個(gè)錯(cuò)誤;如果命令執(zhí)行成功,返回插入操作完成之后,列表的長(zhǎng)度。
8、lpop/rpop
格式:LPOP key [count] 或 RPOP key [count]
功能:從列表 key 的表頭/表尾移除 count 個(gè)元素,并返回移除的元素。count 默認(rèn)值 1
說明:當(dāng) key 不存在時(shí),返回 nil
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-uPdTzGAT-1681219408332)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230410200826128.png)]
9、blpop/brpop
格式:BLPOP key [key …] timeout 或 BRPOP key [key …] timeout
功能:BLPOP/BRPOP 是列表的阻塞式(blocking)彈出命令。它們是 LPOP/RPOP 命令的阻塞版本,當(dāng)給定列表內(nèi)沒有任何元素可供彈出的時(shí)候,連接將被 BLPOP/BRPOP 命令阻塞,直到等待 timeout 超時(shí)或發(fā)現(xiàn)可彈出元素為止。當(dāng)給定多個(gè) key 參數(shù)時(shí),按參數(shù) key的先后順序依次檢查各個(gè)列表,彈出第一個(gè)非空列表的頭元素。timeout 為阻塞時(shí)長(zhǎng),單位為秒,其值若為 0,則表示只要沒有可彈出元素,則一直阻塞。
說明:假如在指定時(shí)間內(nèi)沒有任何元素被彈出,則返回一個(gè) nil 和等待時(shí)長(zhǎng)。反之,返回一個(gè)含有兩個(gè)元素的列表,第一個(gè)元素是被彈出元素所屬的 key ,第二個(gè)元素是被彈出元素的值。
該指令詳細(xì)介紹:Redis每日一練(26):BLPOP和BRPOP命令 - 墨天輪 (modb.pro)
10、rpoplpush
格式:RPOPLPUSH source destination
功能:命令 RPOPLPUSH 在一個(gè)原子時(shí)間內(nèi),執(zhí)行以下兩個(gè)動(dòng)作:
- 將列表 source 中的最后一個(gè)元素(尾元素)彈出,并返回給客戶端。
- 將 source 彈出的元素插入到列表 destination ,作為 destination 列表的的頭元素。如果 source 不存在,值 nil 被返回,并且不執(zhí)行其他動(dòng)作。如果 source 和 destination 相同,則列表中的表尾元素被移動(dòng)到表頭,并返回該元素,可以把這種特殊情況視作列 表的旋轉(zhuǎn)(rotation)操作。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-GhNRwCLj-1681218054418)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230410201242354.png)]
11、brpoplpush
格式:BRPOPLPUSH source destination timeout
功能:BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,當(dāng)給定列表 source 不為空時(shí), BRPOPLPUSH 的表現(xiàn)和 RPOPLPUSH 一樣。當(dāng)列表 source 為空時(shí), BRPOPLPUSH 命令將阻塞連接,直到等待超時(shí),或有另一個(gè)客戶端對(duì) source 執(zhí)行 LPUSH 或 RPUSH 命令為止。timeout 為阻塞時(shí)長(zhǎng),單位為秒,其值若為 0,則表示只要沒有可彈出元素,則一直阻塞。
說明:假如在指定時(shí)間內(nèi)沒有任何元素被彈出,則返回一個(gè) nil 和等待時(shí)長(zhǎng)。反之,返回一個(gè)含有兩個(gè)元素的列表,第一個(gè)元素是被彈出元素的值,第二個(gè)元素是等待時(shí)長(zhǎng)。
如圖:nums列表為空[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-fsjQiqNt-1681218054418)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230410201459060.png)]
12、lrem
格式:LREM key count value
功能:根據(jù)參數(shù) count 的值,移除列表中與參數(shù) value 相等的元素。count 的值可以是以下幾種:
- count > 0 : 從表頭開始向表尾搜索,移除與 value 相等的元素,數(shù)量為 count 。
- count < 0 : 從表尾開始向表頭搜索,移除與 value 相等的元素,數(shù)量為 count 的絕對(duì)值。
- count = 0 : 移除表中所有與 value 相等的值。
說明:返回被移除元素的數(shù)量。當(dāng) key 不存在時(shí), LREM 命令返回 0 ,因?yàn)椴淮嬖诘?key 被視作空表(empty list)。
圖中l(wèi)ls列表不存在:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-i1kldKKZ-1681218054419)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230410202033415.png)]
13、ltrim
格式:LTRIM key start stop
功能:對(duì)一個(gè)列表進(jìn)行修剪(trim),就是說,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。
說明:下標(biāo)(index)參數(shù) start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個(gè)元素,以 1 表示列表的第二個(gè)元素,以此類推。也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個(gè)元素, -2 表示列表的倒數(shù)第二個(gè)元素,以此類推。當(dāng) key 不是列表類型時(shí),返回一個(gè)錯(cuò)誤。如果 start 下標(biāo)比列表的最大下標(biāo) end ( LLEN list 減去 1 )還要大,或者 start > stop , LTRIM 返回一個(gè)空列表,因?yàn)?LTRIM 已經(jīng)將整個(gè)列表清空。如果 stop 下標(biāo)比 end 下標(biāo)還要大,Redis 將 stop 的值設(shè)置為 end 。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-ux6oXHR2-1681218054419)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230410202145481.png)]
14、應(yīng)用場(chǎng)景
? Value 為 List 類型的應(yīng)用場(chǎng)景很多,主要是通過構(gòu)建不同的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)功能。這里僅對(duì)這些數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)方式進(jìn)行總結(jié),不舉具體的例子。
(1)棧
? 通過 lpush + lpop 可以實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)效果:先進(jìn)后出。通過 lpush 從列表左側(cè)插入數(shù)據(jù),通過 lpop 從列表左側(cè)取出數(shù)據(jù)。當(dāng)然,通過 rpush + rpop 也可以實(shí)現(xiàn)相同效果,只不過操作的是列表右側(cè)。
(2)隊(duì)列
? 通過 lpush + rpop 可以實(shí)現(xiàn)隊(duì)列數(shù)據(jù)結(jié)構(gòu)效果:先進(jìn)先出。通過 lpush 從列表左側(cè)插入數(shù)據(jù),通過 rpop 從列表右側(cè)取出數(shù)據(jù)。當(dāng)然,通過 rpush + lpop 也可以實(shí)現(xiàn)相同效果,只不過操作的方向正好相反。
(3)阻塞式消息隊(duì)列
? 通過 lpush + brpop 可以實(shí)現(xiàn)阻塞式消息隊(duì)列效果。作為消息生產(chǎn)者的客戶端使用 lpush從列表左側(cè)插入數(shù)據(jù),作為消息消費(fèi)者的多個(gè)客戶端使用 brpop 阻塞式“搶占”列表尾部數(shù)據(jù)進(jìn)行消費(fèi),保證了消費(fèi)的負(fù)載均衡與高可用性。brpop 的 timeout 設(shè)置為 0,表示只要沒有數(shù)據(jù)可彈出,就永久阻塞。
(4)動(dòng)態(tài)有限集合
? 通過 lpush + ltrim 可以實(shí)現(xiàn)有限集合。通過lpush 從列表左側(cè)向列表中添加數(shù)據(jù),通過 ltrim 保持集合的動(dòng)態(tài)有限性。像企業(yè)的末位淘汰、學(xué)校的重點(diǎn)班等動(dòng)態(tài)管理,都可通過這種動(dòng)態(tài)有限集合來實(shí)現(xiàn)。當(dāng)然,通過rpush + ltrim 也可以實(shí)現(xiàn)相同效果,只不過操作的方向正好相反。
六、Set型Value操作命令
Redis 存儲(chǔ)數(shù)據(jù)的 Value 可以是一個(gè) Set 集合,且集合中的每一個(gè)元素均 String 類型。Set與 List 非常相似,但不同之處是 Set 中的元素具有無序性與不可重復(fù)性,而 List 則具有有序性與可重復(fù)性。
Redis 中的 Set 集合與 Java 中的 Set 集合的實(shí)現(xiàn)相似,其底層都是value 為 null 的 hash表。也正因?yàn)榇?,才?huì)引發(fā)無序性與不可重復(fù)性。
1、sadd
格式:SADD key member [member …]
功能:將一個(gè)或多個(gè) member 元素加入到集合 key 當(dāng)中,已經(jīng)存在于集合的 member
元素將被忽略。
說明:假如 key 不存在,則創(chuàng)建一個(gè)只包含 member 元素作成員的集合。當(dāng) key 不是集合類型時(shí),返回一個(gè)錯(cuò)誤。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-HZ9aKIX8-1681218054420)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411192311511.png)]
2、smembers
格式:SMEMBERS key
功能:返回集合 key 中的所有成員。
說明:不存在的 key 被視為空集合。若 key 中包含大量元素,則該命令可能會(huì)阻塞 Redis服務(wù)。所以生產(chǎn)環(huán)境中一般不使用該命令,而使用 sscan 命令代替。
3、scard
格式:SCARD key
功能:返回 Set 集合的長(zhǎng)度
說明:當(dāng) key 不存在時(shí),返回 0 。
4、sismember
格式:SISMEMBER key member
功能:判斷 member 元素是否集合 key 的成員。
說明:如果 member 元素是集合的成員,返回 1 。如果 member 元素不是集合的成員,或 key 不存在,返回 0 。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-By00Kd5B-1681218054422)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411192658608.png)]
5、smove
格式:SMOVE source destination member
功能:將 member 元素從 source 集合移動(dòng)到 destination 集合。
說明:如果 source 集合不存在或不包含指定的 member 元素,則 SMOVE 命令不執(zhí)行任何操作,僅返回 0 。否則, member 元素從 source 集合中被移除,并添加到 destination 集合中去,返回 1。當(dāng) destination 集合已經(jīng)包含 member 元素時(shí), SMOVE命令只是簡(jiǎn)單地將 source 集合中的 member 元素刪除。當(dāng) source 或 destination 不是集合類型時(shí),返回一個(gè)錯(cuò)誤。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-HeIqQuCP-1681218054422)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411192802656.png)]
6、srem
格式:SREM key member [member …]
功能:移除集合 key 中的一個(gè)或多個(gè) member 元素,不存在的 member 元素會(huì)被忽略,且返回成功移除的元素個(gè)數(shù)。
說明:當(dāng) key 不是集合類型,返回一個(gè)錯(cuò)誤。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-tzXDyhRW-1681218054423)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411192926406.png)]
7、srandmember
格式:SRANDMEMBER key [count]
功能:返回集合中的 count 個(gè)隨機(jī)元素。count 默認(rèn)值為 1。
說明:若 count 為正數(shù),且小于集合長(zhǎng)度,那么返回一個(gè)包含 count 個(gè)元素的數(shù)組,數(shù)組中的元素各不相同。如果 count 大于等于集合長(zhǎng)度,那么返回整個(gè)集合。如果count 為負(fù)數(shù),那么返回一個(gè)包含 count 絕對(duì)值個(gè)元素的數(shù)組,但數(shù)組中的元素可能會(huì)出現(xiàn)重復(fù)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-fgiGBRJ3-1681218054423)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411193102935.png)]
8、spop
格式:SPOP key [count]
功能:移除并返回集合中的 count 個(gè)隨機(jī)元素。count 必須為正數(shù),且默認(rèn)值為 1。
說明:如果 count 大于等于集合長(zhǎng)度,那么移除并返回整個(gè)集合。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-5OJ7lWtL-1681218054424)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411193320299.png)]
9、sdiff/sdiffstore
格式:SDIFF key [key …] 或 SDIFFSTORE destination key [key …]
功能:返回第一個(gè)集合與其它集合之間的差集。差集,difference。
說明:這兩個(gè)命令的不同之處在于,sdiffstore 不僅能夠顯示差集,還能將差集存儲(chǔ)到指定的集合 destination 中。如果 destination 集合已經(jīng)存在,則將其覆蓋。不存在的 key 被視為空集。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-sH710fKh-1681218054425)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411193446264.png)]
10、sinter / sinterstore
格式:SINTER key [key …] 或 SINTERSTORE destination key [key …]
功能:返回多個(gè)集合間的交集。交集,intersection。
說明:這兩個(gè)命令的不同之處在于,sinterstore 不僅能夠顯示交集,還能將交集存儲(chǔ)到指定的集合 destination 中。如果 destination 集合已經(jīng)存在,則將其覆蓋。不存在的 key被視為空集。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-aW2vfO9Z-1681218054425)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411193629443.png)]
11、sunion/sunionstore
格式:SUNION key [key …] 或 SUNIONSTORE destination key [key …]
功能:返回多個(gè)集合間的并集。并集,union。
說明:這兩個(gè)命令的不同之處在于,sunionstore 不僅能夠顯示并集,還能將并集存儲(chǔ)到指定的集合 destination 中。如果 destination 集合已經(jīng)存在,則將其覆蓋。不存在的 key被視為空集。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-OuJUo2Qc-1681218054426)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411193825086.png)]
12、應(yīng)用場(chǎng)景
(1)動(dòng)態(tài)黑名單
例如某服務(wù)器中要設(shè)置用于訪問控制的黑名單。如果直接將黑名單寫入服務(wù)器的配置文件,那么存在的問題是,無法動(dòng)態(tài)修改黑名單。此時(shí)可以將黑名單直接寫入Redis,只要有客戶端來訪問服務(wù)器,服務(wù)器在獲取到客戶端IP 后先從Redis 的黑名單中查看是否存在該IP,如果存在,則拒絕訪問,否則訪問通過。
(2)有限隨機(jī)數(shù)
有限隨機(jī)數(shù)是指返回的隨機(jī)數(shù)是基于某一集合范圍內(nèi)的隨機(jī)數(shù),例如抽獎(jiǎng)、隨機(jī)選人。通過 spop 或 srandmember 可以實(shí)現(xiàn)從指定集合中隨機(jī)選出元素。
(3)用戶畫像
社交平臺(tái)、電商平臺(tái)等各種需要用戶注冊(cè)登錄的平臺(tái),會(huì)根據(jù)用戶提供的資料與用戶使用習(xí)慣,為每個(gè)用戶進(jìn)行畫像,即為每個(gè)用戶定義很多可以反映該用戶特征的標(biāo)簽,這些標(biāo)簽就可以使用sadd 添加到該用戶對(duì)應(yīng)的集合中。這些標(biāo)簽具有無序、不重復(fù)特征。
同時(shí)平臺(tái)還可以使用 sinter/sinterstore 根據(jù)用戶畫像間的交集進(jìn)行好友推薦、商品推薦、客戶推薦等。
七、有序Set型Value操作命令
Redis 存儲(chǔ)數(shù)據(jù)的Value 可以是一個(gè)有序Set,這個(gè)有序 Set 中的每個(gè)元素均String 類型。有序 Set 與 Set 的不同之處是,有序 Set 中的每一個(gè)元素都有一個(gè)分值 score,Redis 會(huì)根據(jù) score 的值對(duì)集合進(jìn)行由小到大的排序。其與 Set 集合要求相同,元素不能重復(fù),但元素的 score 可以重復(fù)。由于該類型的所有命令均是字母z 開頭,所以該 Set 也稱為 ZSet。
1、zadd
格式:ZADD key score member [[score member] [score member] …]
功能:將一個(gè)或多個(gè) member 元素及其 score 值加入到有序集 key 中的適當(dāng)位置。
說明:score 值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。如果 key 不存在,則創(chuàng)建一個(gè)空的有序集并執(zhí)行 ZADD 操作。當(dāng) key 存在但不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。如果命令執(zhí)行成功,則返回被成功添加的新成員的數(shù)量,不包括那些被更新的、已經(jīng)存在的成員。若寫入的 member 值已經(jīng)存在,但score 值不同,則新的 score 值將覆蓋老 score。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-6uazNJpi-1681218054426)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411194528792.png)]
2、zrange/zrevrange
格式:ZRANGE key start stop [WITHSCORES] 或 ZREVRANGE key start stop [WITHSCORES]
功能:返回有序集 key 中,指定區(qū)間內(nèi)的成員。zrange 命令會(huì)按 score 值遞增排序, zrevrange 命令會(huì)按score 遞減排序。具有相同 score 值的成員按字典序/逆字典序排列??梢酝ㄟ^使用 WITHSCORES 選項(xiàng),來讓成員和它的 score 值一并返回。
說明:下標(biāo)參數(shù)從 0 開始,即 0 表示有序集第一個(gè)成員,以 1 表示有序集第二個(gè)成員,以此類推。也可以使用負(fù)數(shù)下標(biāo),-1 表示最后一個(gè)成員,-2 表示倒數(shù)第二個(gè)成員,以此類推。超出范圍的下標(biāo)并不會(huì)引起錯(cuò)誤。例如,當(dāng) start 的值比有序集的最大下標(biāo)還要大,或是 start > stop 時(shí), ZRANGE 命令只是簡(jiǎn)單地返回一個(gè)空列表。再比如 stop 參數(shù)的值比有序集的最大下標(biāo)還要大,那么 Redis 將 stop 當(dāng)作最大下標(biāo)來處理。
若 key 中指定范圍內(nèi)包含大量元素,則該命令可能會(huì)阻塞 Redis 服務(wù)。所以生產(chǎn)環(huán)境中如果要查詢有序集合中的所有元素,一般不使用該命令,而使用 zscan 命令代替。
3、zrangebyscore/zrevrangebyscore
格式:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
功能:返回有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或 max )的成員。有序集成員按 score 值遞增/遞減次序排列。具有相同 score 值的成員按字典序/逆字典序排列。可選的 LIMIT 參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間(就像 SQL 中的 SELECT LIMIT offset, count ),注意當(dāng) offset 很大時(shí),定位 offset 的操作可能需要遍歷整個(gè)有序集,此過程效率可能會(huì)較低??蛇x的 WITHSCORES 參數(shù)決定結(jié)果集是單單返回有序集的成員,還是將有序集成員及其 score 值一起返回。
說明:min 和 max 的取值是正負(fù)無窮大的。默認(rèn)情況下,區(qū)間的取值使用閉區(qū)間 (小于等于或大于等于),也可以通過給參數(shù)前增加左括號(hào)“(”來使用可選的開區(qū)間 (小于或大于)。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-6u0RbrYt-1681218054427)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411195027560.png)]
4、zcard
格式:ZCARD key
功能:返回集合的長(zhǎng)度
說明:當(dāng) key 不存在時(shí),返回 0 。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-cfDiABPs-1681218054428)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411195150576.png)]
5、zcount
格式:ZCOUNT key min max
功能:返回有序集 key 中, score 值在 min 和 max 之間(默認(rèn)包括 score 值等于 min或 max )的成員的數(shù)量。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-jJbynJKT-1681218054429)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411195252304.png)]
6、zscore
格式:ZSCORE key member
功能:返回有序集 key 中,成員 member 的 score 值。
說明:如果 member 元素不是有序集 key 的成員,或 key 不存在,返回 nil 。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-VZ1nmMwt-1681218054429)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411195405826.png)]
7、zincrby
格式:ZINCRBY key increment member
功能:為有序集 key 的成員 member 的 score 值加上增量 increment 。increment 值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。
說明:可以通過傳遞一個(gè)負(fù)數(shù)值 increment ,讓 score 減去相應(yīng)的值。當(dāng) key 不存在,或 member 不是 key 的成員時(shí), ZINCRBY key increment member 等同于 ZADD key increment member 。當(dāng) key 不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。命令執(zhí)行成功,則返回 member 成員的新 score 值。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-j9kPl1xO-1681218054430)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411195539936.png)]
8、zrank/zrevrank
格式:ZRANK key member 或 ZREVRANK key member
功能:返回有序集 key 中成員 member 的排名。zrank 命令會(huì)按 score 值遞增排序,zrevrank 命令會(huì)按 score 遞減排序。
說明:score 值最小的成員排名為 0 。如果 member 不是有序集 key 的成員,返回 nil 。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-P5KtHLr8-1681218054430)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411195712685.png)]
9、zrem
格式:ZREM key member [member …]
功能:移除有序集 key 中的一個(gè)或多個(gè)成員,不存在的成員將被忽略。
說明:當(dāng) key 存在但不是有序集類型時(shí),返回一個(gè)錯(cuò)誤。執(zhí)行成功,則返回被成功移除的成員的數(shù)量,不包括被忽略的成員。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-j3z0muca-1681218054431)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411195847811.png)]
10、zremrangebyrank
格式:ZREMRANGEBYRANK key start stop
功能:移除有序集 key 中,指定排名(rank)區(qū)間內(nèi)的所有成員。
說明:排名區(qū)間分別以下標(biāo)參數(shù) start 和 stop 指出,包含 start 和 stop 在內(nèi)。排名區(qū)間參數(shù)從 0 開始,即 0 表示排名第一的成員, 1 表示排名第二的成員,以此類推。也可以使用負(fù)數(shù)表示,-1 表示最后一個(gè)成員,-2 表示倒數(shù)第二個(gè)成員,以此類推。命令執(zhí)行成功,則返回被移除成員的數(shù)量。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Au1pv6wx-1681218054431)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411200011252.png)]
11、zremrangebyscore
格式:ZREMRANGEBYSCORE key min max
功能:移除有序集 key 中,所有 score 值介于 min 和 max 之間(包括等于 min 或max )的成員。
說明:命令執(zhí)行成功,則返回被移除成員的數(shù)量。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-4T9UPuU8-1681218054432)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411200151552.png)]
12、zrangebylex
格式:ZRANGEBYLEX key min max [LIMIT offset count]
功能:該命令僅適用于集合中所有成員都具有相同分值的情況。當(dāng)有序集合的所有成員都具有相同的分值時(shí),有序集合的元素會(huì)根據(jù)成員的字典序(lexicographical ordering)來進(jìn)行排序。即這個(gè)命令返回給定集合中元素值介于 min 和 max 之間的成員。如果有序集合里面的成員帶有不同的分值, 那么命令的執(zhí)行結(jié)果與 zrange key 效果相同。
說明:合法的 min 和 max 參數(shù)必須包含左小括號(hào)“(”或左中括號(hào)“[”,其中左小括號(hào)“(”表示開區(qū)間, 而左中括號(hào)“[”則表示閉區(qū)間。min 或max 也可使用特殊字符“+”和“-”,分別表示正無窮大與負(fù)無窮大。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-EPjONsTS-1681218054432)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411205145970.png)]
13、zlexcount
格式:ZLEXCOUNT key min max
功能:該命令僅適用于集合中所有成員都具有相同分值的情況。該命令返回該集合中元素值本身(而非score 值)介于 min 和 max 范圍內(nèi)的元素?cái)?shù)量。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-8R7cihDj-1681218054433)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411205406092.png)]
14、zremrangebylex
格式:ZREMRANGEBYLEX key min max
功能:該命令僅適用于集合中所有成員都具有相同分值的情況。該命令會(huì)移除該集合中元素值本身介于 min 和 max 范圍內(nèi)的所有元素。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-IGF4CIPP-1681219975326)(https://typora-1259159092.cos.ap-nanjing.myqcloud.com/typora/image-20230411205517353.png)]文章來源:http://www.zghlxwxcb.cn/news/detail-417006.html
15、應(yīng)用場(chǎng)景
有序 Set 最為典型的應(yīng)用場(chǎng)景就是排行榜,例如音樂、視頻平臺(tái)中根據(jù)播放量進(jìn)行排序的排行榜;電商平臺(tái)根據(jù)用戶評(píng)價(jià)或銷售量進(jìn)行排序的排行榜等。將播放量作為 score,將作品 id 作為 member,將用戶評(píng)價(jià)積分或銷售量作為 score,將商家 id 作為member。使用 zincrby 增加排序 score,使用 zrevrange 獲取 Top 前幾名,使用 zrevrank 查詢當(dāng)前排名,使用 zscore 查詢當(dāng)前排序score 等。文章來源地址http://www.zghlxwxcb.cn/news/detail-417006.html
到了這里,關(guān)于【Redis】Redis基礎(chǔ)命令集詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!