电竞比分网-中国电竞赛事及体育赛事平台

分享

【Redis】Redis基礎(chǔ)命令集詳解

 三十的狼 2024-01-02 發(fā)布于北京

文章目錄

【Redis01】Redis常用命令

一、基礎(chǔ)命令

1、ping(心跳命令)

鍵入ping命令,若看到PONG響應(yīng),則說明客戶端與Redis的連接時正常的。

image-20230408211628706

2、get/set(讀寫鍵值命令)

set key value 會將指定 key-value寫入到DB。get key則會讀取指定key的value值。

image-20230408211730487

3、select(切換數(shù)據(jù)庫)

redis默認(rèn)有 16 個數(shù)據(jù)庫。這個在 Redis Desktop Manager(RDM)圖形客戶端中可以直 觀地看到。默認(rèn)使用的是 0 號 DB,可以通過 select db 索引來切換 DB。如圖,切換到1號DB:

image-20230408211802887

4、dbsize(查看key數(shù)量)

dbsize 命令可以查看當(dāng)前數(shù)據(jù)庫中 key 的數(shù)量。

image-20230408211945404

5、flushdb(刪除當(dāng)前庫中所有數(shù)據(jù))

清楚當(dāng)前DB中的所有數(shù)據(jù),不影響其他DB。

image-20230408212221534

6、flushall(刪除所有DB中的數(shù)據(jù))

image-20230408212320609

二、Key 相關(guān)操作命令

1、keys

格式:KEYS pattern

功能:查找所有符合給定模式 pattern 的 key,pattern 為正則表達(dá)式。

說明:KEYS 的速度非??欤谝粋€大的數(shù)據(jù)庫中使用它可能會阻塞當(dāng)前服務(wù)器的服務(wù)。所以生產(chǎn)環(huán)境中一般不使用該命令,而使用 scan 命令代替。

如圖:查看所有模式與查看所有開頭結(jié)尾為'a’的模式

image-20230408213343952

2、exists

格式:EXISTS key

功能:檢查給定 key 是否存在。

說明:若 key 存在,返回 1 ,否則返回 0 。

image-20230408213455338

3、del

格式:DEL key [key …]

功能:刪除給定的一個或多個 key 。不存在的 key 會被忽略。

說明:返回被刪除 key 的數(shù)量。

image-20230408213541854

4、rename

l 格式:RENAME key newkey

l 功能:將 key 改名為 newkey。

l 說明:當(dāng) key 和 newkey 相同,或者 key 不存在時,返回一個錯誤。當(dāng) newkey 已經(jīng)存在時, RENAME 命令將覆蓋舊值。改名成功時提示 OK ,失敗時候返回一個錯誤。

image-20230408213806672

5、move

l 格式:MOVE key db

l 功能:將當(dāng)前數(shù)據(jù)庫的 key 移動到給定的數(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 沒有任何效果。移動成功返回 1 ,失敗則返回 0 。

image-20230408213945562

6、type

l 格式:TYPE key

l 功能:返回 key 所儲存的值的類型。

l 說明:返回值有以下六種

? none (key 不存在)

? string (字符串)

? list (列表)

? set (集合)

? zset (有序集)

? hash (哈希表)

7、expire/pexpire

l 格式:EXPIRE key seconds

l 功能:為給定 key 設(shè)置生存時間。當(dāng) key 過期時(生存時間為 0),它會被自動刪除。 expire 的時間單位為秒,pexpire 的時間單位為毫秒。在 Redis 中,帶有生存時間的 key被稱為“易失”(volatile)。

l 說明:生存時間設(shè)置成功返回 1。若 key 不存在時返回 0 。rename 操作不會改變 key的生存時間。

8、ttl/pttl

格式:TTL key

功能:TTL, time to live,返回給定 key 的剩余生存時間。

說明:其返回值存在三種可能:

? 1/當(dāng) key 不存在時,返回 -2 。

? 2/當(dāng) key 存在但沒有設(shè)置剩余生存時間時,返回 -1 。

? 3/否則,返回 key 的剩余生存時間。ttl 命令返回的時間單位為秒,而 pttl 命令返回的時間單位為毫秒。

image-20230408214503144

9、persist

l 格式:PERSIST key

l 功能:去除給定 key 的生存時間,將這個 key 從“易失的”轉(zhuǎn)換成“持久的”。

l 說明:當(dāng)生存時間移除成功時,返回 1;若 key 不存在或 key 沒有設(shè)置生存時間,則返回 0。

image-20230408214631492

10、randomkey

l 格式:RANDOMKEY

l 功能:從當(dāng)前數(shù)據(jù)庫中隨機(jī)返回(不刪除)一個 key。

l 說明:當(dāng)數(shù)據(jù)庫不為空時,返回一個 key。當(dāng)數(shù)據(jù)庫為空時,返回 nil。

image-20230408214740825

11、scan
  • 格式:SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

  • 功能:用于迭代數(shù)據(jù)庫中的數(shù)據(jù)庫鍵。其各個選項的意義為:

    • cursor:本次迭代開始的游標(biāo)。
    • pattern :本次迭代要匹配的 key 的模式。
    • count :本次迭代要從數(shù)據(jù)集里返回多少元素,默認(rèn)值為 10 。
    • type:本次迭代要返回的value 的類型,默認(rèn)為所有類型。

    SCAN 命令是一個基于游標(biāo) cursor 的迭代器:SCAN 命令每次被調(diào)用之后,都會向用戶返回返回一個包含兩個元素的數(shù)組, 第一個元素是用于進(jìn)行下一次迭代的新游標(biāo),而第二個元素則是一個數(shù)組, 這個數(shù)組中包含了所有被迭代的元素。用戶在下次迭代時需要使用這個新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù),以此來延續(xù)之前的迭代過程。當(dāng) SCAN 命令的游標(biāo)參數(shù)被設(shè)置為 0 時,服務(wù)器將開始一次新的迭代。如果新游標(biāo)返回 0表示迭代已結(jié)束。

  • 說明:使用間斷的、負(fù)數(shù)、超出范圍或者其他非正常的游標(biāo)來執(zhí)行增量式迭代不會造成服務(wù)器崩潰。

    當(dāng)數(shù)據(jù)量很大時,count 的數(shù)量的指定可能會不起作用,Redis 會自動調(diào)整每次的遍歷數(shù)目。由于 scan 命令每次執(zhí)行都只會返回少量元素,所以該命令可以用于生產(chǎn)環(huán)境,而不會出現(xiàn)像 KEYS 命令帶來的服務(wù)器阻塞問題。

    增量式迭代命令所使用的算法只保證在數(shù)據(jù)集的大小有界的情況下迭代才會停止,換句話說,如果被迭代數(shù)據(jù)集的大小不斷地增長的話,增量式迭代命令可能永遠(yuǎn)也無法完成一次完整迭代。即當(dāng)一個數(shù)據(jù)集不斷地變大時,想要訪問這個數(shù)據(jù)集中的所有元素就需要做越來越多的工作, 能否結(jié)束一個迭代取決于用戶執(zhí)行迭代的速度是否比數(shù)據(jù)集增長的速度更快。

  • 相關(guān)命令:另外還有 3 個 scan 命令用于對三種類型的 value 進(jìn)行遍歷。

    • hscan:屬于 Hash 型 Value 操作命令集合,用于遍歷當(dāng)前 db 中指定 Hash 表的所有 field-value 對。
    • sscan:屬于 Set 型Value 操作命令集合,用于遍歷當(dāng)前 db 中指定 set 集合的所有元素
    • zscan:屬于 ZSet 型 Value 操作命令集合,用于遍歷當(dāng)前 db 中指定有序集合的所有元素(數(shù)值與元素值)

三、String型Value操作命令

Redis 存儲數(shù)據(jù)的 Value 可以是一個 String 類型數(shù)據(jù)。String 類型的Value 是 Redis 中最基本,最常見的類型。String 類型的 Value 中可以存放任意數(shù)據(jù),包括數(shù)值型,甚至是二進(jìn)制的圖片、音頻、視頻、序列化對象等。一個 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è)置過期時間,單位秒。等價于 SETEX 命令。

  • PX milliseconds:為當(dāng)前 key 設(shè)置過期時間,單位毫秒。等價于 PSETEX 命令。

  • NX:指定的 key 不存在才會設(shè)置成功,用于添加指定的 key。等價于 SETNX 命令。

  • XX:指定的 key 必須存在才會設(shè)置成功,用于更新指定key 的value。

說明:如果value 字符串中帶有空格,則該字符串需要使用雙引號或單引號引起來,否則會認(rèn)為 set 命令的參數(shù)數(shù)量不正確,報錯。

image-20230408215404893

2、setex/psetex

格式:SETEX/PSETEX key seconds value

功能:set expire,其不僅為 key 指定了value,還為其設(shè)置了生存時間。setex 的單位為秒,psetex 的單位為毫秒。

說明:如果 key 已經(jīng)存在, 則覆寫舊值。該命令類似于以下兩個命令,不同之處是, SETEX 是一個原子性操作,關(guān)聯(lián)值和設(shè)置生存時間兩個動作會在同一時間內(nèi)完成,該命令在 Redis 用作緩存時,非常實(shí)用。

  • SET key value

  • EXPIRE key seconds # 設(shè)置生存時間

如下圖兩條指令作用相同:

image-20230408215652794

3、setnx

l 格式:SETNX key value

l 功能:SET if Not eXists,將 key 的值設(shè)為 value ,當(dāng)且僅當(dāng) key 不存在。若給定的 key

已經(jīng)存在,則 SETNX 不做任何動作。成功,返回 1,否則,返回 0。

l 說明:該命令等價于 set key value nx

image-20230408215816215

4、getset

格式:GETSET key value

功能:將給定 key 的值設(shè)為 value ,并返回 key 的舊值。

說明:當(dāng) key 存在但不是字符串類型時,返回一個錯誤;當(dāng) key 不存在時,返回 nil 。

image-20230408220000780

5、mset/msetnx

格式:MSET/MSETNX key value [key value …]

功能:同時設(shè)置一個或多個 key-value 對。

說明:如果某個給定 key 已經(jīng)存在,那么 MSET 會用新值覆蓋原來的舊值,如果這不 是你所希望的效果,請考慮使用 MSETNX 命令:它只會在所有給定 key 都不存在的情 況下進(jìn)行設(shè)置操作。MSET/MSETNX 是一個原子性(atomic)操作,所有給定 key 都會在同 一時間內(nèi)被設(shè)置,某些給定 key 被更新而另一些給定 key 沒有改變的情況不可能發(fā)生。該命令永不失敗。

image-20230408220130792

6、mget

格式:MGET key [key …]

功能:返回所有(一個或多個)給定 key 的值。

說明:如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil 。因此,該命令永不失敗。

image-20230408220218797

7、append

格式:APPEND key value

功能:如果 key 已經(jīng)存在并且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。如果 key 不存在, APPEND 就簡單地將給定 key 設(shè)為 value ,就像執(zhí)行 SET key value 一樣。

說明:追加 value 之后, key 中字符串的長度。

image-20230408220359590

8、incr/decr

格式:INCR key 或 DECR key

功能:increment,自動遞增。將 key 中存儲的數(shù)字值增一。decrement,自動遞減。將 key 中存儲的數(shù)字值減一。

說明:如果 key 不存在,那么 key 的值會先被初始化為 0,然后再執(zhí)行增一/減一操作。如果值不能表示為數(shù)字,那么返回一個錯誤提示。如果執(zhí)行正確,則返回增一/減一后的值。

image-20230408220515890

9、incrby/decrby

格式:INCRBY key increment 或 DECRBY key decrement

功能:將 key 中存儲的數(shù)字值增加/減少指定的數(shù)值,這個數(shù)值只能是整數(shù),可以是負(fù)數(shù),但不能是小數(shù)。

說明:如果 key 不存在,那么 key 的值會先被初始化為 0,然后再執(zhí)行增/減操作。如果值不能表示為數(shù)字,那么返回一個錯誤提示。如果執(zhí)行正確,則返回增/減后的值。

image-20230408220620950

10、incrbyfloat

格式:INCRBYFLOAT key increment

功能:為 key 中所儲存的值加上浮點(diǎn)數(shù)增量 increment 。

說明:與之前的說明相同。沒有 decrbyfloat 命令,但 increment 為負(fù)數(shù)可以實(shí)現(xiàn)減操作效果。

image-20230408220721017

11、strlen

格式:STRLEN key

功能:返回 key 所儲存的字符串值的長度。

說明:當(dāng) key 儲存的不是字符串值時,返回一個錯誤;當(dāng) key 不存在時,返回 0 。

image-20230408220812700

12、getrange

格式:GETRANGE key start end

功能:返回 key 中字符串值的子字符串,字符串的截取范圍由 start 和 end 兩個偏移量決定,包括 start 和 end 在內(nèi)。

說明:end 必須要比 start 大。支持負(fù)數(shù)偏移量,表示從字符串最后開始計數(shù),-1 表示最后一個字符,-2 表示倒數(shù)第二個,以此類推。

image-20230408220941085

13、setrange

格式:SETRANGE key offset value

功能:用 value 參數(shù)替換給定 key 所儲存的字符串值 str,從偏移量 offset 開始。

說明:當(dāng) offset 值大于 str 長度時,中間使用零字節(jié)\x00 填充,即 0000 0000 字節(jié)填充;對于不存在的 key 當(dāng)作空串處理。

image-20230408221127133

14、位操作命令

名稱中包含 BIT 的命令,都是對二進(jìn)制位的操作命令,例如,setbit、getbit、bitcount、bittop、bitfield,這些命令不常用。

15、典型應(yīng)用場景

Value 為 String 類型的應(yīng)用場景很多,這里僅舉這種典型應(yīng)用場景的例子:

  • 數(shù)據(jù)緩存:Redis 作為數(shù)據(jù)緩存層,MySQL 作為數(shù)據(jù)存儲層。應(yīng)用服務(wù)器首先從 Redis 中獲取數(shù)據(jù),如果緩存層中沒有,則從MySQL 中獲取后先存入緩存層再返回給應(yīng)用服務(wù)器。

  • 計數(shù)器:在 Redis 中寫入一個 value 為數(shù)值型的 key 作為平臺計數(shù)器、視頻播放計數(shù)器等。每個有效客戶端訪問一次,或視頻每播放一次,都是直接修改 Redis 中的計數(shù)器,然后再以異步方式持久化到其它數(shù)據(jù)源中,例如持久化到 MySQL。

  • 共享Session:對于一個分布式應(yīng)用系統(tǒng),如果將類似用戶登錄信息這樣的 Session 數(shù)據(jù)保存在提供登錄服務(wù)的服務(wù)器中,那么如果用戶再次提交像收藏、支付等請求時可能會出現(xiàn)問題:在提供收藏、支付等服務(wù)的服務(wù)器中并沒有該用戶的 Session 數(shù)據(jù),從而導(dǎo)致該用戶需要重新登錄。對于用戶來說,這是不能接受的。此時,可以將系統(tǒng)中所有用戶的 Session 數(shù)據(jù)全部保存到 Redis 中,用戶在提交新的請求后,系統(tǒng)先從Redis 中查找相應(yīng)的Session 數(shù)據(jù),如果存在,則再進(jìn)行相關(guān)操作,否則跳轉(zhuǎn)到登錄頁面。這樣就不會引發(fā)“重新登錄”問題。

    image-20230408221723064

  • 限速器:現(xiàn)在很多平臺為了防止 DoS(Denial of Service,拒絕服務(wù))攻擊,一般都會限制一個 IP不能在一秒內(nèi)訪問超過 n 次。而 Redis 可以可以結(jié)合 key 的過期時間與 incr 命令來完成限速功能,充當(dāng)限速器。注意,其無法防止 DDoS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊。

四、Hash型Value操作命令

Redis 存儲數(shù)據(jù)的 Value 可以是一個 Hash 類型。Hash 類型也稱為 Hash 表、字典等。

Hash 表就是一個映射表 Map,也是由鍵-值對構(gòu)成,為了與整體的 key 進(jìn)行區(qū)分,這里的鍵稱為 field,值稱為 value。注意,Redis 的 Hash 表中的 field-value 對均為 String 類型。

1、hset

格式:HSET key field value

功能:將哈希表 key 中的域 field 的值設(shè)為 value 。

說明:如果 key 不存在,一個新的哈希表被創(chuàng)建并進(jìn)行 HSET 操作。如果域 field 已經(jīng)存在于哈希表中,舊值將被覆蓋。如果 field 是哈希表中的一個新建域,并且值設(shè)置成功,返回 1 。如果哈希表中域 field 已經(jīng)存在且舊值已被新值覆蓋,返回 0 。

image-20230409212134039

2、hget

格式:HGET key field

功能:返回哈希表 key 中給定域 field 的值。

說明:當(dāng)給定域不存在或是給定 key 不存在時,返回 nil 。

image-20230409224311370

3、hmset

格式:HMSET key field value [field value …]

功能:同時將多個 field-value (域-值)對設(shè)置到哈希表 key 中。

說明:此命令會覆蓋哈希表中已存在的域。如果 key 不存在,一個空哈希表被創(chuàng)建并執(zhí)行 HMSET 操作。如果命令執(zhí)行成功,返回 OK 。當(dāng) key 不是哈希表(hash)類型時,返回一個錯誤。

image-20230409224637980

4、hmget

格式:HMGET key field [field …]

功能:按照給出順序返回哈希表 key 中一個或多個域的值。

說明:如果給定的域不存在于哈希表,那么返回一個 nil 值。因?yàn)椴淮嬖诘?key 被當(dāng)作一個空哈希表來處理,所以對一個不存在的 key 進(jìn)行 HMGET 操作將返回一個只帶有 nil 值的表。

image-20230409224959688

5、hgetall

格式:HGETALL key

功能:返回哈希表 key 中所有的域和值。

說明:在返回值里,緊跟每個域名(field name)之后是域的值(value),所以返回值的長度是哈希表大小的兩倍。若 key 不存在,返回空列表。若 key 中包含大量元素,則該命令可能會阻塞 Redis 服務(wù)。所以生產(chǎn)環(huán)境中一般不使用該命令,而使用 hscan 命令代替。

image-20230409225114987

6、hsetnx

格式:HSETNX key field value

功能:將哈希表 key 中的域 field 的值設(shè)置為 value ,當(dāng)且僅當(dāng)域 field 不存在。

說明:若域 field 已經(jīng)存在,該操作無效。如果 key 不存在,一個新哈希表被創(chuàng)建并執(zhí)行 HSETNX 命令。

image-20230409225248298

7、hdel

格式:HDEL key field [field …]

功能:刪除哈希表 key 中的一個或多個指定域,不存在的域?qū)⒈缓雎浴?/p>

說明:返回被成功移除的域的數(shù)量,不包括被忽略的域。

image-20230409225403125

8、hexists

格式:HEXISTS key field

功能:查看哈希表 key 中給定域 field 是否存在。

說明:如果哈希表含有給定域,返回 1 。如果不含有給定域,或 key 不存在,返回 0 。

image-20230409225550040

9、hincrby/hincrbyfloat

格式:HINCRBY key field increment

功能:為哈希表 key 中的域 field 的值加上增量 increment 。hincrby 命令只能增加整數(shù)值,而 hincrbyfloat 可以增加小數(shù)值。

說明:增量也可以為負(fù)數(shù),相當(dāng)于對給定域進(jìn)行減法操作。如果 key 不存在,一個新的哈希表被創(chuàng)建并執(zhí)行 HINCRBY 命令。如果域 field 不存在,那么在執(zhí)行命令前,域的值被初始化為 0。對一個儲存字符串值的域 field 執(zhí)行 HINCRBY 命令將造成一個錯誤。

image-20230409230136983

10、hkeys/hvals

格式:HKEYS key 或 HVALS key

功能:返回哈希表 key 中的所有域/值。

說明:當(dāng) key 不存在時,返回一個空表。

image-20230409230353847

11、hlen

格式:HLEN key

功能:返回哈希表 key 中域的數(shù)量。

說明:當(dāng) key 不存在時,返回 0 。

image-20230409230704382

12、hstrlen

格式:HSTRLEN key field

功能:返回哈希表 key 中, 與給定域 field 相關(guān)聯(lián)的值的字符串長度(string length)。

說明:如果給定的鍵或者域不存在, 那么命令返回 0 。

image-20230409230758278

13、應(yīng)用場景

Hash 型 Value 非常適合存儲對象數(shù)據(jù)。key 為對象名稱,value 為描述對象屬性的 Map,對對象屬性的修改在Redis 中就可直接完成。其不像String 型 Value 存儲對象,那個對象是序列化過的,例如序列化為 JSON 串,對對象屬性值的修改需要先反序列化為對象后再修改,修改后再序列化為JSON 串后寫入到 Redis。

五、List型Value操作命令

Redis 存儲數(shù)據(jù)的 Value 可以是一個 String 列表類型數(shù)據(jù)。即該列表中的每個元素均為 String 類型數(shù)據(jù)。列表中的數(shù)據(jù)會按照插入順序進(jìn)行排序。不過,該列表的底層實(shí)際是一個無頭節(jié)點(diǎn)的雙向鏈表,所以對列表表頭與表尾的操作性能較高,但對中間元素的插入與刪除的操作的性能相對較差。

1、lpush/rpush

格式:LPUSH key value [value …] 或 RPUSH key value [value …]

功能:將一個或多個值 value 插入到列表 key 的表頭/表尾(表頭在左表尾在右)

說明:如果有多個 value 值,對于 lpush 來說,各個 value 會按從左到右的順序依次插入到表頭;對于 rpush 來說,各個 value 會按從左到右的順序依次插入到表尾。如果 key不存在,一個空列表會被創(chuàng)建并執(zhí)行操作。當(dāng) key 存在但不是列表類型時,返回一個錯誤。執(zhí)行成功時返回列表的長度。

image-20230410195544787

2、llen

格式:LLEN key

功能:返回列表 key 的長度。

說明:如果 key 不存在,則 key 被解釋為一個空列表,返回 0 。如果 key 不是列表類型,返回一個錯誤。

image-20230410195647719

3、lindex

格式:LINDEX key index

功能:返回列表 key 中,下標(biāo)為 index 的元素。列表從 0 開始計數(shù)。

說明:如果 index 參數(shù)的值不在列表的區(qū)間范圍內(nèi)(out of range),返回 nil 。

image-20230410195918800

4、lset

格式:LSET key index value

功能:將列表 key 下標(biāo)為 index 的元素的值設(shè)置為 value 。

說明:當(dāng) index 參數(shù)超出范圍,或?qū)σ粋€空列表(key 不存在)進(jìn)行 LSET 時,返回一個錯誤。

image-20230410200147980

5、lrange

格式:LRANGE key start stop

功能:返回列表 key 中指定區(qū)間[start, stop]內(nèi)的元素,即包含兩個端點(diǎn)。

說明:List 的下標(biāo)從 0 開始,即以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個元素, -2 表示列表的倒數(shù)第二個元素,以此類推。超出范圍的下標(biāo)值不會引起錯誤。如果 start 下標(biāo)比列表的最大下標(biāo) 還要大,那么 LRANGE 返回一個空列表。如果 stop 下標(biāo)比最大下標(biāo)還要大,Redis 將 stop 的值設(shè)置為最大下標(biāo)。

image-20230410200259538

6、lpushx/rpushx

格式:LPUSHX key value 或 RPUSHX key value

功能:將值 value 插入到列表 key 的表頭/表尾,當(dāng)且僅當(dāng) key 存在并且是一個列表。

說明:當(dāng) key 不存在時,命令什么也不做。若執(zhí)行成功,則輸出表的長度。

image-20230410200413604

7、linsert

格式:LINSERT key BEFORE|AFTER pivot value

功能:將值 value 插入到列表 key 當(dāng)中,位于元素 pivot 之前或之后。

說明:當(dāng) pivot 元素不存在于列表中時,不執(zhí)行任何操作,返回-1;當(dāng) key 不存在時, key 被視為空列表,不執(zhí)行任何操作,返回 0;如果 key 不是列表類型,返回一個錯誤;如果命令執(zhí)行成功,返回插入操作完成之后,列表的長度。

image-20230410200645171

8、lpop/rpop

格式:LPOP key [count] 或 RPOP key [count]

功能:從列表 key 的表頭/表尾移除 count 個元素,并返回移除的元素。count 默認(rèn)值 1

說明:當(dāng) key 不存在時,返回 nil

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-uPdTzGAT-1681219408332)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230410200826128.png)]

9、blpop/brpop

格式:BLPOP key [key …] timeout 或 BRPOP key [key …] timeout

功能:BLPOP/BRPOP 是列表的阻塞式(blocking)彈出命令。它們是 LPOP/RPOP 命令的阻塞版本,當(dāng)給定列表內(nèi)沒有任何元素可供彈出的時候,連接將被 BLPOP/BRPOP 命令阻塞,直到等待 timeout 超時或發(fā)現(xiàn)可彈出元素為止。當(dāng)給定多個 key 參數(shù)時,按參數(shù) key的先后順序依次檢查各個列表,彈出第一個非空列表的頭元素。timeout 為阻塞時長,單位為秒,其值若為 0,則表示只要沒有可彈出元素,則一直阻塞。

說明:假如在指定時間內(nèi)沒有任何元素被彈出,則返回一個 nil 和等待時長。反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素所屬的 key ,第二個元素是被彈出元素的值。

該指令詳細(xì)介紹:Redis每日一練(26):BLPOP和BRPOP命令 - 墨天輪 ()

10、rpoplpush

格式:RPOPLPUSH source destination

功能:命令 RPOPLPUSH 在一個原子時間內(nèi),執(zhí)行以下兩個動作:

  • 將列表 source 中的最后一個元素(尾元素)彈出,并返回給客戶端。
  • 將 source 彈出的元素插入到列表 destination ,作為 destination 列表的的頭元素。如果 source 不存在,值 nil 被返回,并且不執(zhí)行其他動作。如果 source 和 destination 相同,則列表中的表尾元素被移動到表頭,并返回該元素,可以把這種特殊情況視作列 表的旋轉(zhuǎn)(rotation)操作。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-GhNRwCLj-1681218054418)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230410201242354.png)]

11、brpoplpush

格式:BRPOPLPUSH source destination timeout

功能:BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,當(dāng)給定列表 source 不為空時, BRPOPLPUSH 的表現(xiàn)和 RPOPLPUSH 一樣。當(dāng)列表 source 為空時, BRPOPLPUSH 命令將阻塞連接,直到等待超時,或有另一個客戶端對 source 執(zhí)行 LPUSH 或 RPUSH 命令為止。timeout 為阻塞時長,單位為秒,其值若為 0,則表示只要沒有可彈出元素,則一直阻塞。

說明:假如在指定時間內(nèi)沒有任何元素被彈出,則返回一個 nil 和等待時長。反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素的值,第二個元素是等待時長。

如圖:nums列表為空[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-fsjQiqNt-1681218054418)(https://typora-1259159092.cos.ap-nanjing./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 的絕對值。
  • count = 0 : 移除表中所有與 value 相等的值。

說明:返回被移除元素的數(shù)量。當(dāng) key 不存在時, LREM 命令返回 0 ,因?yàn)椴淮嬖诘?key 被視作空表(empty list)。

圖中l(wèi)ls列表不存在:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-i1kldKKZ-1681218054419)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230410202033415.png)]

13、ltrim

格式:LTRIM key start stop

功能:對一個列表進(jìn)行修剪(trim),就是說,讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。

說明:下標(biāo)(index)參數(shù) start 和 stop 都以 0 為底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個元素, -2 表示列表的倒數(shù)第二個元素,以此類推。當(dāng) key 不是列表類型時,返回一個錯誤。如果 start 下標(biāo)比列表的最大下標(biāo) end ( LLEN list 減去 1 )還要大,或者 start > stop , LTRIM 返回一個空列表,因?yàn)?LTRIM 已經(jīng)將整個列表清空。如果 stop 下標(biāo)比 end 下標(biāo)還要大,Redis 將 stop 的值設(shè)置為 end 。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-ux6oXHR2-1681218054419)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230410202145481.png)]

14、應(yīng)用場景

? Value 為 List 類型的應(yīng)用場景很多,主要是通過構(gòu)建不同的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)功能。這里僅對這些數(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)隊列

? 通過 lpush + rpop 可以實(shí)現(xiàn)隊列數(shù)據(jù)結(jié)構(gòu)效果:先進(jìn)先出。通過 lpush 從列表左側(cè)插入數(shù)據(jù),通過 rpop 從列表右側(cè)取出數(shù)據(jù)。當(dāng)然,通過 rpush + lpop 也可以實(shí)現(xiàn)相同效果,只不過操作的方向正好相反。

(3)阻塞式消息隊列

? 通過 lpush + brpop 可以實(shí)現(xiàn)阻塞式消息隊列效果。作為消息生產(chǎn)者的客戶端使用 lpush從列表左側(cè)插入數(shù)據(jù),作為消息消費(fèi)者的多個客戶端使用 brpop 阻塞式“搶占”列表尾部數(shù)據(jù)進(jìn)行消費(fèi),保證了消費(fèi)的負(fù)載均衡與高可用性。brpop 的 timeout 設(shè)置為 0,表示只要沒有數(shù)據(jù)可彈出,就永久阻塞。

(4)動態(tài)有限集合

? 通過 lpush + ltrim 可以實(shí)現(xiàn)有限集合。通過lpush 從列表左側(cè)向列表中添加數(shù)據(jù),通過 ltrim 保持集合的動態(tài)有限性。像企業(yè)的末位淘汰、學(xué)校的重點(diǎn)班等動態(tài)管理,都可通過這種動態(tài)有限集合來實(shí)現(xiàn)。當(dāng)然,通過rpush + ltrim 也可以實(shí)現(xiàn)相同效果,只不過操作的方向正好相反。

六、Set型Value操作命令

Redis 存儲數(shù)據(jù)的 Value 可以是一個 Set 集合,且集合中的每一個元素均 String 類型。Set與 List 非常相似,但不同之處是 Set 中的元素具有無序性與不可重復(fù)性,而 List 則具有有序性與可重復(fù)性。

Redis 中的 Set 集合與 Java 中的 Set 集合的實(shí)現(xiàn)相似,其底層都是value 為 null 的 hash表。也正因?yàn)榇?,才會引發(fā)無序性與不可重復(fù)性。

1、sadd

格式:SADD key member [member …]

功能:將一個或多個 member 元素加入到集合 key 當(dāng)中,已經(jīng)存在于集合的 member

元素將被忽略。

說明:假如 key 不存在,則創(chuàng)建一個只包含 member 元素作成員的集合。當(dāng) key 不是集合類型時,返回一個錯誤。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-HZ9aKIX8-1681218054420)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411192311511.png)]

2、smembers

格式:SMEMBERS key

功能:返回集合 key 中的所有成員。

說明:不存在的 key 被視為空集合。若 key 中包含大量元素,則該命令可能會阻塞 Redis服務(wù)。所以生產(chǎn)環(huán)境中一般不使用該命令,而使用 sscan 命令代替。

image-20230411192452736

3、scard

格式:SCARD key

功能:返回 Set 集合的長度

說明:當(dāng) key 不存在時,返回 0 。

image-20230411192548168

4、sismember

格式:SISMEMBER key member

功能:判斷 member 元素是否集合 key 的成員。

說明:如果 member 元素是集合的成員,返回 1 。如果 member 元素不是集合的成員,或 key 不存在,返回 0 。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-By00Kd5B-1681218054422)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411192658608.png)]

5、smove

格式:SMOVE source destination member

功能:將 member 元素從 source 集合移動到 destination 集合。

說明:如果 source 集合不存在或不包含指定的 member 元素,則 SMOVE 命令不執(zhí)行任何操作,僅返回 0 。否則, member 元素從 source 集合中被移除,并添加到 destination 集合中去,返回 1。當(dāng) destination 集合已經(jīng)包含 member 元素時, SMOVE命令只是簡單地將 source 集合中的 member 元素刪除。當(dāng) source 或 destination 不是集合類型時,返回一個錯誤。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-HeIqQuCP-1681218054422)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411192802656.png)]

6、srem

格式:SREM key member [member …]

功能:移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略,且返回成功移除的元素個數(shù)。

說明:當(dāng) key 不是集合類型,返回一個錯誤。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-tzXDyhRW-1681218054423)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411192926406.png)]

7、srandmember

格式:SRANDMEMBER key [count]

功能:返回集合中的 count 個隨機(jī)元素。count 默認(rèn)值為 1。

說明:若 count 為正數(shù),且小于集合長度,那么返回一個包含 count 個元素的數(shù)組,數(shù)組中的元素各不相同。如果 count 大于等于集合長度,那么返回整個集合。如果count 為負(fù)數(shù),那么返回一個包含 count 絕對值個元素的數(shù)組,但數(shù)組中的元素可能會出現(xiàn)重復(fù)。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-fgiGBRJ3-1681218054423)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411193102935.png)]

8、spop

格式:SPOP key [count]

功能:移除并返回集合中的 count 個隨機(jī)元素。count 必須為正數(shù),且默認(rèn)值為 1。

說明:如果 count 大于等于集合長度,那么移除并返回整個集合。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-5OJ7lWtL-1681218054424)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411193320299.png)]

9、sdiff/sdiffstore

格式:SDIFF key [key …] 或 SDIFFSTORE destination key [key …]

功能:返回第一個集合與其它集合之間的差集。差集,difference。

說明:這兩個命令的不同之處在于,sdiffstore 不僅能夠顯示差集,還能將差集存儲到指定的集合 destination 中。如果 destination 集合已經(jīng)存在,則將其覆蓋。不存在的 key 被視為空集。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-sH710fKh-1681218054425)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411193446264.png)]

10、sinter / sinterstore

格式:SINTER key [key …] 或 SINTERSTORE destination key [key …]

功能:返回多個集合間的交集。交集,intersection。

說明:這兩個命令的不同之處在于,sinterstore 不僅能夠顯示交集,還能將交集存儲到指定的集合 destination 中。如果 destination 集合已經(jīng)存在,則將其覆蓋。不存在的 key被視為空集。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-aW2vfO9Z-1681218054425)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411193629443.png)]

11、sunion/sunionstore

格式:SUNION key [key …] 或 SUNIONSTORE destination key [key …]

功能:返回多個集合間的并集。并集,union。

說明:這兩個命令的不同之處在于,sunionstore 不僅能夠顯示并集,還能將并集存儲到指定的集合 destination 中。如果 destination 集合已經(jīng)存在,則將其覆蓋。不存在的 key被視為空集。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-OuJUo2Qc-1681218054426)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411193825086.png)]

12、應(yīng)用場景
(1)動態(tài)黑名單

例如某服務(wù)器中要設(shè)置用于訪問控制的黑名單。如果直接將黑名單寫入服務(wù)器的配置文件,那么存在的問題是,無法動態(tài)修改黑名單。此時可以將黑名單直接寫入Redis,只要有客戶端來訪問服務(wù)器,服務(wù)器在獲取到客戶端IP 后先從Redis 的黑名單中查看是否存在該IP,如果存在,則拒絕訪問,否則訪問通過。

(2)有限隨機(jī)數(shù)

有限隨機(jī)數(shù)是指返回的隨機(jī)數(shù)是基于某一集合范圍內(nèi)的隨機(jī)數(shù),例如抽獎、隨機(jī)選人。通過 spop 或 srandmember 可以實(shí)現(xiàn)從指定集合中隨機(jī)選出元素。

(3)用戶畫像

社交平臺、電商平臺等各種需要用戶注冊登錄的平臺,會根據(jù)用戶提供的資料與用戶使用習(xí)慣,為每個用戶進(jìn)行畫像,即為每個用戶定義很多可以反映該用戶特征的標(biāo)簽,這些標(biāo)簽就可以使用sadd 添加到該用戶對應(yīng)的集合中。這些標(biāo)簽具有無序、不重復(fù)特征。

同時平臺還可以使用 sinter/sinterstore 根據(jù)用戶畫像間的交集進(jìn)行好友推薦、商品推薦、客戶推薦等。

七、有序Set型Value操作命令

Redis 存儲數(shù)據(jù)的Value 可以是一個有序Set,這個有序 Set 中的每個元素均String 類型。有序 Set 與 Set 的不同之處是,有序 Set 中的每一個元素都有一個分值 score,Redis 會根據(jù) score 的值對集合進(jìn)行由小到大的排序。其與 Set 集合要求相同,元素不能重復(fù),但元素的 score 可以重復(fù)。由于該類型的所有命令均是字母z 開頭,所以該 Set 也稱為 ZSet。

1、zadd

格式:ZADD key score member [[score member] [score member] …]

功能:將一個或多個 member 元素及其 score 值加入到有序集 key 中的適當(dāng)位置。

說明:score 值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。如果 key 不存在,則創(chuàng)建一個空的有序集并執(zhí)行 ZADD 操作。當(dāng) key 存在但不是有序集類型時,返回一個錯誤。如果命令執(zhí)行成功,則返回被成功添加的新成員的數(shù)量,不包括那些被更新的、已經(jīng)存在的成員。若寫入的 member 值已經(jīng)存在,但score 值不同,則新的 score 值將覆蓋老 score。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-6uazNJpi-1681218054426)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411194528792.png)]

2、zrange/zrevrange

格式:ZRANGE key start stop [WITHSCORES] 或 ZREVRANGE key start stop [WITHSCORES]

功能:返回有序集 key 中,指定區(qū)間內(nèi)的成員。zrange 命令會按 score 值遞增排序, zrevrange 命令會按score 遞減排序。具有相同 score 值的成員按字典序/逆字典序排列。可以通過使用 WITHSCORES 選項,來讓成員和它的 score 值一并返回。

說明:下標(biāo)參數(shù)從 0 開始,即 0 表示有序集第一個成員,以 1 表示有序集第二個成員,以此類推。也可以使用負(fù)數(shù)下標(biāo),-1 表示最后一個成員,-2 表示倒數(shù)第二個成員,以此類推。超出范圍的下標(biāo)并不會引起錯誤。例如,當(dāng) start 的值比有序集的最大下標(biāo)還要大,或是 start > stop 時, ZRANGE 命令只是簡單地返回一個空列表。再比如 stop 參數(shù)的值比有序集的最大下標(biāo)還要大,那么 Redis 將 stop 當(dāng)作最大下標(biāo)來處理。

若 key 中指定范圍內(nèi)包含大量元素,則該命令可能會阻塞 Redis 服務(wù)。所以生產(chǎn)環(huán)境中如果要查詢有序集合中的所有元素,一般不使用該命令,而使用 zscan 命令代替。

image-20230411194713248

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 值的成員按字典序/逆字典序排列??蛇x的 LIMIT 參數(shù)指定返回結(jié)果的數(shù)量及區(qū)間(就像 SQL 中的 SELECT LIMIT offset, count ),注意當(dāng) offset 很大時,定位 offset 的操作可能需要遍歷整個有序集,此過程效率可能會較低。可選的 WITHSCORES 參數(shù)決定結(jié)果集是單單返回有序集的成員,還是將有序集成員及其 score 值一起返回。

說明:min 和 max 的取值是正負(fù)無窮大的。默認(rèn)情況下,區(qū)間的取值使用閉區(qū)間 (小于等于或大于等于),也可以通過給參數(shù)前增加左括號“(”來使用可選的開區(qū)間 (小于或大于)。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-6u0RbrYt-1681218054427)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411195027560.png)]

4、zcard

格式:ZCARD key

功能:返回集合的長度

說明:當(dāng) key 不存在時,返回 0 。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-cfDiABPs-1681218054428)(https://typora-1259159092.cos.ap-nanjing./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./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./typora/image-20230411195405826.png)]

7、zincrby

格式:ZINCRBY key increment member

功能:為有序集 key 的成員 member 的 score 值加上增量 increment 。increment 值可以是整數(shù)值或雙精度浮點(diǎn)數(shù)。

說明:可以通過傳遞一個負(fù)數(shù)值 increment ,讓 score 減去相應(yīng)的值。當(dāng) key 不存在,或 member 不是 key 的成員時, ZINCRBY key increment member 等同于 ZADD key increment member 。當(dāng) key 不是有序集類型時,返回一個錯誤。命令執(zhí)行成功,則返回 member 成員的新 score 值。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-j9kPl1xO-1681218054430)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411195539936.png)]

8、zrank/zrevrank

格式:ZRANK key member 或 ZREVRANK key member

功能:返回有序集 key 中成員 member 的排名。zrank 命令會按 score 值遞增排序,zrevrank 命令會按 score 遞減排序。

說明:score 值最小的成員排名為 0 。如果 member 不是有序集 key 的成員,返回 nil 。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-P5KtHLr8-1681218054430)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411195712685.png)]

9、zrem

格式:ZREM key member [member …]

功能:移除有序集 key 中的一個或多個成員,不存在的成員將被忽略。

說明:當(dāng) key 存在但不是有序集類型時,返回一個錯誤。執(zhí)行成功,則返回被成功移除的成員的數(shù)量,不包括被忽略的成員。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-j3z0muca-1681218054431)(https://typora-1259159092.cos.ap-nanjing./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 表示最后一個成員,-2 表示倒數(shù)第二個成員,以此類推。命令執(zhí)行成功,則返回被移除成員的數(shù)量。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Au1pv6wx-1681218054431)(https://typora-1259159092.cos.ap-nanjing./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./typora/image-20230411200151552.png)]

12、zrangebylex

格式:ZRANGEBYLEX key min max [LIMIT offset count]

功能:該命令僅適用于集合中所有成員都具有相同分值的情況。當(dāng)有序集合的所有成員都具有相同的分值時,有序集合的元素會根據(jù)成員的字典序(lexicographical ordering)來進(jìn)行排序。即這個命令返回給定集合中元素值介于 min 和 max 之間的成員。如果有序集合里面的成員帶有不同的分值, 那么命令的執(zhí)行結(jié)果與 zrange key 效果相同。

說明:合法的 min 和 max 參數(shù)必須包含左小括號“(”或左中括號“[”,其中左小括號“(”表示開區(qū)間, 而左中括號“[”則表示閉區(qū)間。min 或max 也可使用特殊字符“+”和“-”,分別表示正無窮大與負(fù)無窮大。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-EPjONsTS-1681218054432)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411205145970.png)]

13、zlexcount

格式:ZLEXCOUNT key min max

功能:該命令僅適用于集合中所有成員都具有相同分值的情況。該命令返回該集合中元素值本身(而非score 值)介于 min 和 max 范圍內(nèi)的元素數(shù)量。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-8R7cihDj-1681218054433)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411205406092.png)]

14、zremrangebylex

格式:ZREMRANGEBYLEX key min max

功能:該命令僅適用于集合中所有成員都具有相同分值的情況。該命令會移除該集合中元素值本身介于 min 和 max 范圍內(nèi)的所有元素。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-IGF4CIPP-1681219975326)(https://typora-1259159092.cos.ap-nanjing./typora/image-20230411205517353.png)]

15、應(yīng)用場景

有序 Set 最為典型的應(yīng)用場景就是排行榜,例如音樂、視頻平臺中根據(jù)播放量進(jìn)行排序的排行榜;電商平臺根據(jù)用戶評價或銷售量進(jìn)行排序的排行榜等。將播放量作為 score,將作品 id 作為 member,將用戶評價積分或銷售量作為 score,將商家 id 作為member。使用 zincrby 增加排序 score,使用 zrevrange 獲取 Top 前幾名,使用 zrevrank 查詢當(dāng)前排名,使用 zscore 查詢當(dāng)前排序score 等。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多