Redis學(xué)習(xí)筆記---數(shù)據(jù)類型

RedisREmote DIctionary Server(遠(yuǎn)程字典服務(wù)器)的縮寫,它以字典結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)。現(xiàn)在我們來學(xué)習(xí)它的五種鍵值數(shù)據(jù)類型。學(xué)習(xí)之前先來了解幾個(gè)基礎(chǔ)命令。

先開啟Redis服務(wù):

$ redis-server


接著開啟Redis客戶端:

$ redis-cli

獲取所有鍵:

127.0.0.1:6379> KEYS *

Redis不區(qū)分大小寫

判斷一個(gè)鍵是否存在,1 表示存在,0 表示不存在:

127.0.0.1:6379> EXISTS key

刪除鍵,可以刪除一個(gè)或多個(gè)鍵,返回值是刪除鍵的個(gè)數(shù):

127.0.0.1:6379> DEL key1 key2 key3

獲取鍵的類型:

127.0.0.1:6379> TYPE key

字符串類型

它能存儲(chǔ)任何類型的字符串,包括二進(jìn)制數(shù)據(jù)。一個(gè)字符串類型鍵允許存儲(chǔ)的數(shù)據(jù)的最大容量是512MB。

賦值與取值

當(dāng)鍵不存在時(shí),會(huì)返回空結(jié)果

127.0.0.1:6379> set key hello
OK

127.0.0.1:6379> get key
"hello"

127.0.0.1:6379> get name
(nil)

遞增數(shù)字

當(dāng)要操作的鍵不存在時(shí)會(huì)默認(rèn)鍵值為0,所以第一次遞增后的結(jié)果是1,當(dāng)鍵值不是整數(shù)時(shí) Redis會(huì)提示錯(cuò)誤:

127.0.0.1:6379> set age 23
OK

127.0.0.1:6379> incr age
(integer) 24

127.0.0.1:6379> incr num
(integer) 1

127.0.0.1:6379> incr num
(integer) 2

127.0.0.1:6379> set foo lorem
OK

127.0.0.1:6379> incr foo
(error) ERR value is not an integer or out of range

增加指定的整數(shù)

127.0.0.1:6379> incrby age 10
(integer) 34

減少指定的整數(shù)

127.0.0.1:6379> decr age 
(integer) 33

127.0.0.1:6379> decrby age 6
(integer) 27

增加指定浮點(diǎn)數(shù)

127.0.0.1:6379> incrbyfloat score 2.7
"2.7"

127.0.0.1:6379> incrbyfloat score 5E+4
"50002.69999999999999929"

向尾部增加值

APPEND作用是向鍵值的末尾追加value。如果鍵不存在則將該鍵的值設(shè)置為value,返回值是追加后字符串的總長度。

127.0.0.1:6379> append name 'jenkin'
(integer) 6

127.0.0.1:6379> append name ' wang'
(integer) 11

127.0.0.1:6379> get name 
"jenkin wang"

獲取字符串長度

STRLEN命令返回鍵值的長度,如果鍵不存在則返回0。UTF-8編碼的每個(gè)中文漢字的長度都是3,本例中則會(huì)返回 6.

127.0.0.1:6379> strlen name
(integer) 11

127.0.0.1:6379> strlen ping
(integer) 0

127.0.0.1:6379> set key 你好
OK

127.0.0.1:6379> strlen key
(integer) 6

同時(shí)獲得/設(shè)置多個(gè)鍵值

127.0.0.1:6379> mset name 'jenkin' age 24 email 'mark94@live.cn'
OK

127.0.0.1:6379> mget name age email
1) "jenkin"
2) "24"
3) "mark94@live.cn"

位操作

GETBIT key offset:獲得一個(gè)字符串類型鍵指定位置的二進(jìn)制位的值(0或1),索引從0開始,如果獲取的二進(jìn)制位的索引超出了鍵值的二進(jìn)制實(shí)際長度,則默認(rèn)位值是0
SETBIT key offset value:設(shè)置字符串類型建指定位值的二進(jìn)制位的值,返回的是該位置的舊值
BITCOUNT key [start] [end]:獲得字符串類型鍵中值是1的二進(jìn)制位個(gè)數(shù),可通過參數(shù)來限制統(tǒng)計(jì)的字節(jié)范圍
BITOP operation destkey key [key ...]:可以對(duì)多個(gè)字符串類型鍵進(jìn)行位運(yùn)算,并將結(jié)果存儲(chǔ)在destkey參數(shù)指定的鍵中,BITOP支持的運(yùn)算操作有 ANDORXORNOT

? b a r

ASCII 98 97 114

二進(jìn)制 01100010 01100001 01110010

? a a r

ASCII 98 97 114

二進(jìn)制 01100001 01100001 01110010

127.0.0.1:6379> set foo bar
OK

127.0.0.1:6379> getbit foo 0
(integer) 0

127.0.0.1:6379> getbit foo 6
(integer) 1

127.0.0.1:6379> getbit foo 1000
(integer) 0
127.0.0.1:6379> setbit foo 2 0
(integer) 1

127.0.0.1:6379> get foo
"Bar"

如果要設(shè)置的位置超過了鍵值的二進(jìn)制位的長度,SETBIT會(huì)自動(dòng)將中間的二進(jìn)制位設(shè)置為0,同理設(shè)置一個(gè)不存在的鍵的指定二進(jìn)制位的值會(huì)自動(dòng)將其前面的位賦值為0

127.0.0.1:6379> bitcount foo
(integer) 10

127.0.0.1:6379> bitcount foo 0 1
(integer) 6

127.0.0.1:6379> bitcount foo 1 2
(integer) 7
127.0.0.1:6379> set foo1 bar
OK

127.0.0.1:6379> set foo2 aar
OK

127.0.0.1:6379> bitop or dest foo1 foo2
(integer) 3

127.0.0.1:6379> get dest
"car"

散列類型

散列類型的鍵值也是一種字典結(jié)構(gòu),其存儲(chǔ)了字段和字段值的映射,但字段值只能是字符串,不支持其他數(shù)據(jù)類型。散列類型不能嵌套其它的數(shù)據(jù)類型。一個(gè)散列類型鍵可以包含至多2^32-1個(gè)字段。

除了散列類型,Redis的其他數(shù)據(jù)類型同樣不支持?jǐn)?shù)據(jù)類型嵌套,比如集合類型的每個(gè)元素都只能是字符串,不能是另一個(gè)集合或散列表等

賦值與取值

HSET key field value:不區(qū)分插入和更新操作,當(dāng)執(zhí)行的是插入操作時(shí)(即之前字段不存在)HSET命令會(huì)返回1,當(dāng)執(zhí)行的是更新操作時(shí)(即之前字段已經(jīng)存在)HSET命令會(huì)返回0.當(dāng)鍵本身不存在時(shí),HSET命令還會(huì)自動(dòng)創(chuàng)建它。
HGET key field:
HMSET key field value [field value ...]:同時(shí)設(shè)置多個(gè)字段的值
HMGET key field [field ...]
HGETALL key: 獲取鍵中所有的字段和字段值。很多語言的Redis客戶端會(huì)將HGETALL的返回結(jié)果封裝成編程語言中的對(duì)象。

127.0.0.1:6379> hset car price 500
(integer) 1

127.0.0.1:6379> hset car name BMW
(integer) 1

127.0.0.1:6379> hget car name 
"BMW"

127.0.0.1:6379> hmset student name jenkin age 24 score 100
OK

127.0.0.1:6379> hmget student name age score
1) "jenkin"
2) "24"
3) "100"

127.0.0.1:6379> hgetall student
1) "name"
2) "jenkin"
3) "age"
4) "24"
5) "score"
6) "100"

判斷字段是否存在

HEXISTS key field:如果存在則返回1,否則返回0(如果鍵不存在也會(huì)返回0)。

127.0.0.1:6379> hexists car price
(integer) 1

127.0.0.1>6379> hexists car brand
(integer) 0

當(dāng)字段不存在時(shí)賦值

HSETNX key field value:如果字段已經(jīng)存在,HSETNX命令將不執(zhí)行任何操作。HSETNX命令是原子操作,不用擔(dān)心競態(tài)條件。

127.0.0.1:6379> hgetall car
1) "price"
2) "500"
3) "name"
4) "BMW"

127.0.0.1:6379> hsetnx car price 1000
(integer) 0

127.0.0.1:6379> hget car price
"500"

127.0.0.1:6379> hsetnx car place China
(integer) 1

127.0.0.1:6379> hgetall car 
1) "price"
2) "500"
3) "name"
4) "BMW"
5) "place"
6) "China"

增加數(shù)字

HINCRBY key field increment:返回值是增值后的字段值。如果該鍵不存在,會(huì)自動(dòng)增加該鍵。散列類型沒有HINCR命令.

127.0.0.1:6379> hincrby car price 200
(integer) 700

刪除字段

HDEL key field [field ...]:可以刪除一個(gè)或多個(gè)字段,返回值是被刪除的字段個(gè)數(shù)。

127.0.0.1:6379> hdel car price
(integer) 1

127.0.0.1:6379> hdel car price
(integer) 0

只獲取字段名或字段值

127.0.0.1:6379> hkeys car
1) "name"
2) "place"

127.0.0.1:6379> hvals car
1) "BMW"
2) "China"

獲取字段數(shù)量

127.0.0.1:6379> hlen car 
(integer) 2

列表類型

列表類型可以存儲(chǔ)一個(gè)有序的字符串列表,常用的操作是向列表兩端添加元素或者獲得列表的某一個(gè)片段。列表類型內(nèi)部是使用雙向鏈表實(shí)現(xiàn)的,向列表兩端添加元素的時(shí)間復(fù)雜度為O(1),獲取越接近兩端的元素越快。一個(gè)列表類型鍵最多能容納2^32-1個(gè)元素。

向列表兩端增加元素

LPUSH key value [value …]:向列表左邊增加元素,返回值表示增加元素后列表的長度。
RPUSH key value [value …]:向列表右邊增加元素,返回值表示增加元素后列表的長度。

127.0.0.1:6379> lpush numbers 1
(integer) 1

127.0.0.1:6379> lpush numbers 2 3
(integer) 4

127.0.0.1:6379> rpush numbers 7 8 9
(integer) 7

向列表兩端彈出元素

LPOP key:從列表左邊彈出一個(gè)元素(將列表左邊的元素從列表中移除,并返回被移除的元素值)
RPOP key:從列表右邊彈出一個(gè)元素(將列表右邊的元素從列表中移除,并返回被移除的元素值)

127.0.0.1:6379> lpop numbers
"4"

127.0.0.1:6379> rpop numbers
"9"

獲取列表中元素的個(gè)數(shù)

127.0.0.1:6279> llen numbers
(integer) 5

LLEN命令的功能類似SQL語句 SELELCT COUNT(*) FROM table_name,但LLEN的時(shí)間復(fù)雜度為O(1)。

獲得列表片段

LRANGE key start stop

127.0.0.1:6379> lrange numbers 0 3
1) "3"
2) "2"
3) "1"
4) "7"

127.0.0.1:6379> lrange numbers -2 -1
1) "7"
2) "8"

127.0.0.1:6379> lrange numbers 9 10
(empty list or set)

127.0.0.1:6379> lrange numbers 1 999
1) "2"
2) "1"
3) "7"
4) "8"

如果start的索引位置比stop的索引位置靠后,則會(huì)返回空列表;

如果stop大于實(shí)際的索引范圍,則會(huì)返回到列表左右邊的元素。

刪除列表中指定的值

LREM key count value:刪除列表中前count個(gè)值為value的元素,返回值是實(shí)際刪除的元素。
1.當(dāng)count > 0 時(shí),LREM命令會(huì)從列表左邊開始刪除前count個(gè)值為value的元素;
2.當(dāng)count < 0 時(shí),LREM命令會(huì)從列表右邊開始刪除前|count|個(gè)值為value的元素;
3.當(dāng)count = 0 時(shí),LREM命令會(huì)刪除所有值為value的元素。

127.0.0.1:6379> lrange numbers 0 -1
1) "3"
2) "2"
3) "1"
4) "7"
5) "8"

127.0.0.1:6379> lrem numbers 3 1
(integer) 1

127.0.0.1:6379> lrem numbers -1 8
(integer) 1

獲得/設(shè)置指定索引的元素值

LINDEX key index:返回指定索引的元素,索引從0開始,如果index是負(fù)數(shù)表示從右邊開始計(jì)算的索引,最右邊元素索引是-1。
LSET key index value:將索引為index的元素賦值為value。

127.0.0.1:6379> lrange numbers 0 -1
1) "5"
2) "6"
3) "7"
4) "8"
5) "9"
6) "7"

127.0.0.1:6379> lindex numbers 5
"7"

127.0.0.1:6379> lindex numbers -1
"7"

127.0.0.1:6379> lset numbers -1 10
OK

127.0.0.1:6379> lindex numbers -1
"10"

只保留列表指定片段

LTRIM key start end:刪除指定索引范圍之外的所有元素。

127.0.0.1:6379> lrange numbers 0 -1
1) "10"
2) "6"
3) "7"
4) "8"
5) "9"
6) "10"

127.0.0.1:6379> ltrim numbers 1 4
OK

127.0.0.1:6379> lrange numbers 0 -1
1) "6"
2) "7"
3) "8"
4) "9"

向列表中插入元素

LINSERT key BEFORE|AFTER pivot value:先在列表中從左到右查找值為pivot的元素,然后根據(jù)第二個(gè)參數(shù)是before還是after來決定將value插入到該元素的前面還是后面。返回值是插入后列表的元素個(gè)數(shù)。

127.0.0.1:6379> lrange numbers 0 -1
1) "8"
2) "6"
3) "7"
4) "8"
5) "9"

127.0.0.1:6379> linsert numbers after 8 -2
(integer) 6

127.0.0.1:6379> lrange numbers 0 -1
1) "8"
2) "-2"
3) "6"
4) "7"
5) "8"
6) "9"

將元素從一個(gè)列表轉(zhuǎn)移到另一個(gè)列表

RPOPLPUSH source destination:先執(zhí)行RPOP命令再執(zhí)行LPUSH命令。RPOPLPUSH命令會(huì)先從source列表類型鍵的右邊彈出一個(gè)元素,然后將其加入到destination列表類型鍵的左邊,并返回這個(gè)元素的值,整個(gè)過程是原子的。

127.0.0.1:6379> rpoplpush numbers new_numbers
"9"

集合類型

集合類型在Redis內(nèi)部是使用值為空的散列表(hash table)實(shí)現(xiàn)的,所以這些操作的時(shí)間復(fù)雜度都是O(1)。在集合中的每個(gè)元素都是不同的,且沒有順序。一個(gè)集合類型(Set)鍵可以存儲(chǔ)至多2^32-1個(gè)字符串。

增加/刪除元素

SADD key member [member …]:向集合增加一個(gè)或多個(gè)元素,如果鍵不存在則會(huì)自動(dòng)創(chuàng)建。
SREM key member [member …]:從集合中刪除一個(gè)或多個(gè)元素,并返回刪除成功的個(gè)數(shù)。

127.0.0.1:6379> sadd letters a
(integer) 1

127.0.0.1:6379> sadd letters a b c
(integer) 2

127.0.0.1:6379> srem letters c d
(integer) 1

獲得集合中的所有元素

SMEMBERS key:返回集合中的所有元素。

127.0.0.1:6379> smembers letters
1) "b"
2) "a"

判斷元素是否在集合中

SISMEMEBER key member:判斷一個(gè)元素是否在集合中,時(shí)間復(fù)雜度是O(1)。當(dāng)值存在時(shí)返回1,當(dāng)值不存在或鍵不存在時(shí)返回0.

127.0.0.1:6379> sismember letters b
(integer) 1

127.0.0.1:6379> sismember letters f
(integer) 0

127.0.0.1:6379> sismember letter b
(integer) 0

集合間運(yùn)算

SDIFF key [key …]:對(duì)多個(gè)集合進(jìn)行差集運(yùn)算
SINTER key [key ...]:對(duì)多個(gè)集合執(zhí)行交集運(yùn)算
SUNION KEY [KEY …]:對(duì)多個(gè)集合執(zhí)行并集運(yùn)算

127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB
1) "1"
127.0.0.1:6379> sdiff setB setA
1) "4"
127.0.0.1:6379> sadd setC 2 3
(integer) 2
127.0.0.1:6379> sdiff setA setB setC
1) "1"

127.0.0.1:6379> sinter setA setB
1) "2"
2) "3"
127.0.0.1:6379> sinter setA setB setC
1) "2"
2) "3"

127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sunion setA setB setC
1) "1"
2) "2"
3) "3"
4) "4"

獲取元素中集合個(gè)數(shù)

SCARD key:獲取集合中的元素個(gè)數(shù)。

127.0.0.1:6379> smembers letters
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> scard letters
(integer) 3

進(jìn)行集合運(yùn)算并將結(jié)果存儲(chǔ)

SDIFFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]

127.0.0.1:6379> sdiffstore setAB setA setB
(integer) 1
127.0.0.1:6379> smembers setAB
1) "1"

127.0.0.1:6379> sinterstore setAinB setA setB
(integer) 2
127.0.0.1:6379> smembers setAinB
1) "2"
2) "3"

127.0.0.1:6379> sunionstore setAandB setA setB
(integer) 4
127.0.0.1:6379> smembers setAandB
1) "1"
2) "2"
3) "3"
4) "4"

隨機(jī)獲取集合中的元素

SRANDMEMBER key [count]:隨機(jī)從集合中獲取一個(gè)元素
1.當(dāng)count為正數(shù)時(shí),SRANDMEMBER 會(huì)隨機(jī)從集合里獲得count個(gè)不重復(fù)的元素。如果count的值大于集合中的元素個(gè)數(shù),則返回全部元素。
2.當(dāng)count為負(fù)數(shù)時(shí),SRANDMEMBER會(huì)隨機(jī)從集合里獲得|count|個(gè)的元素,這些元素有可能相同。

127.0.0.1:6379> srandmember letters
"a"

127.0.0.1:6379> srandmember letters 2
1) "a"
2) "b"
127.0.0.1:6379> srandmember letters -2
1) "a"
2) "a"
127.0.0.1:6379>

從集合中彈出一個(gè)元素

SPOP key:從集合中隨機(jī)選擇一個(gè)元素彈出。

127.0.0.1:6379> spop letters
"c"

有序集合類型

在集合類型的基礎(chǔ)上有序集合類型為集合中的每一個(gè)元素都關(guān)聯(lián)了一個(gè)分?jǐn)?shù)。有序集合類型是使用散列表和跳躍表
實(shí)現(xiàn)的,時(shí)間復(fù)雜度為O(log(n))。有序集合比列表類型更耗費(fèi)內(nèi)存。

增加元素

ZADD key score member [score member ...] :向有序集合中加入一個(gè)元素和該元素的分?jǐn)?shù),如果該元素已經(jīng)存在則會(huì)用新的分?jǐn)?shù)替換原有的分?jǐn)?shù)。返回值是新加入到集合中的元素個(gè)數(shù)(不包含之前已經(jīng)存在的元素)。分?jǐn)?shù)不僅可以是整數(shù),還可以是雙精度浮點(diǎn)數(shù)。

127.0.0.1:6379> zadd scoreboard 89 Tom 67 Peter 100 Jenkin
(integer) 3
127.0.0.1:6379> zadd scoreboard 76 Peter
(integer) 0
127.0.0.1:6379> zadd testboard +inf c
(integer) 1
127.0.0.1:6379> zadd testboard -inf d
(integer) 1

+inf 表示正無窮,-inf表示負(fù)無窮。

獲得元素的分?jǐn)?shù)

ZSCORE key member

127.0.0.1:6379> zscore scoreboard Jenkin
"100"

獲取排名在某個(gè)范圍的元素列表

ZRANGE key start stop [WITHSCORES]:按照元素分?jǐn)?shù)從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)。時(shí)間復(fù)雜度為O(log n+m) (其中n為有序集合的基數(shù),m為返回的元素個(gè)數(shù))。如果兩個(gè)元素的分?jǐn)?shù)相同則會(huì)按照字典順序(0<9<A<Z<a<z)進(jìn)行排序。ZRANGE與LRANGE命令十分相似。
ZREVRANGE key start stop [WITHSCORES]:按照元素分?jǐn)?shù)從大到小的順序給出結(jié)果。

127.0.0.1:6379> zrange scoreboard 0 2
1) "Peter"
2) "Tom"
3) "Jenkin"

127.0.0.1:6379> zrange scoreboard 1 -1
1) "Tom"
2) "Jenkin"

127.0.0.1:6379> zrange scoreboard 0 -1 withscores
1) "Peter"
2) "76"
3) "Tom"
4) "89"
5) "Jenkin"
6) "100"

127.0.0.1:6379> zrevrange scoreboard 0 -1 withscores
1) "Jenkin"
2) "100"
3) "Tom"
4) "89"
5) "Peter"
6) "76"

獲得指定分?jǐn)?shù)范圍的元素

ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count]:按照元素分?jǐn)?shù)從小到大的順序返回分?jǐn)?shù)在min和max之間的元素。LIMIT offset count與SQL中的用法基本相同,即在獲得的元素列表的基礎(chǔ)上向后偏移offset個(gè)元素,并且只獲取前count個(gè)元素。

27.0.0.1:6379> zrange scoreboard 0 -1 withscores
 1) "Jerry"
 2) "56"
 3) "Danny"
 4) "67"
 5) "Peter"
 6) "76"
 7) "Tom"
 8) "89"
 9) "Wenddy"
10) "92"
11) "Jenkin"
12) "100"

127.0.0.1:6379> zrangebyscore scoreboard 80 100
1) "Tom"
2) "Wenddy"
3) "Jenkin"

127.0.0.1:6379> zrangebyscore scoreboard 80 (100
1) "Tom"
2) "Wenddy"

127.0.0.1:6379> zrangebyscore scoreboard (80 +inf
1) "Tom"
2) "Wenddy"
3) "Jenkin"

127.0.0.1:6379> zrangebyscore scoreboard 60 +inf limit 1 3
1) "Peter"
2) "Tom"
3) "Wenddy"

127.0.0.1:6379> zrevrangebyscore scoreboard 100 0 limit 0 3
1) "Jenkin"
2) "Wenddy"
3) "Tom"

增加某個(gè)元素的分?jǐn)?shù)

ZINCRBY key increment member:增加一個(gè)元素的分?jǐn)?shù),返回值是更改后的分?jǐn)?shù)。如果指定的元素不存在,Redis在執(zhí)行命令前會(huì)先建立它并將它的分?jǐn)?shù)賦為0再執(zhí)行操作。

127.0.0.1:6379> zincrby scoreboard 100 Jenkin
"200"
127.0.0.1:6379> zincrby scoreboard -100 Jenkin
"100"

獲取集合中元素的數(shù)量

ZCARD key

127.0.0.1:6379> zcard scoreboard
(integer) 6

獲得指定分?jǐn)?shù)范圍內(nèi)的元素個(gè)數(shù)

ZCOUNT key min max

127.0.0.1:6379> zcount scoreboard 80 100
(integer) 3
127.0.0.1:6379> zcount scoreboard 80 (100
(integer) 2

刪除一個(gè)或多個(gè)元素

ZREM key member [member ...]:命令返回值是成功刪除的元素?cái)?shù)量(不包含本來就不存在的元素)。

127.0.0.1:6379> zrem scoreboard Wenddy
(integer) 1
127.0.0.1:6379> zcard scoreboard
(integer) 5

按照排名范圍刪除元素

ZREMRANGEBYRANK key start stop:按照元素分?jǐn)?shù)從小到大的順序刪除處在指定排名范圍內(nèi)的所有元素,并返回刪除的元素?cái)?shù)量。

127.0.0.1:6379> zadd testRem 1 a 2 b 3 c 4 d 5 e 6 f
(integer) 6
127.0.0.1:6379> zremrangebyrank testRem 0 2
(integer) 3

127.0.0.1:6379> zrange testRem 0 -1
1) "d"
2) "e"
3) "f"

按照分?jǐn)?shù)范圍刪除元素

ZREMRANGEBYSCORE key min max:刪除指定范圍內(nèi)的所有元素。

127.0.0.1:6379> zremrangebyscore testRem (4 5
(integer) 1
127.0.0.1:6379> zrange testRem 0 -1
1) "d"
2) "f"

獲得元素的排名

ZRANK key member:按照元素分?jǐn)?shù)從下到大的順序獲得指定的元素排名
ZREVRANK member:分?jǐn)?shù)最大的元素排名為0.

127.0.0.1:6379> zrange scoreboard 0 -1 withscores
 1) "Jerry"
 2) "56"
 3) "Danny"
 4) "67"
 5) "Peter"
 6) "76"
 7) "Tom"
 8) "89"
 9) "Jenkin"
10) "100"
127.0.0.1:6379> zrank scoreboard Jenkin
(integer) 4
127.0.0.1:6379> zrevrank scoreboard Jenkin
(integer) 0

計(jì)算有序集合的交集

ZINTERSTORE destination numkeys key [key ...][WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]:計(jì)算多個(gè)有序集合的交集并將結(jié)果存儲(chǔ)在destination鍵中,返回值為destination鍵中的元素個(gè)數(shù)。destination鍵中元素的分?jǐn)?shù)是由AGGREGATE參數(shù)決定的。
1.當(dāng)AGGREGATESUM時(shí)(也就是默認(rèn)值),destination鍵中元素的分?jǐn)?shù)是每一個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的
2.當(dāng)AGGREGATEMIN時(shí),destination鍵中元素的分?jǐn)?shù)是每一個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的最小值
3.當(dāng)AGGREGATEMAX時(shí),destination鍵中元素的分?jǐn)?shù)是每一個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的最大值
ZINTERSTORE還能夠通過WEIGHTS參數(shù)設(shè)置每個(gè)集合的權(quán)重,每個(gè)集合在參與計(jì)算時(shí)元素的分?jǐn)?shù)會(huì)被乘上該集合 的權(quán)重。

127.0.0.1:6379> zadd sortedSets1 1 a 2 b
(integer) 2
127.0.0.1:6379> zadd sortedSets2 10 a 20 b
(integer) 2

127.0.0.1:6379> zinterstore sortedSetsResults 2 sortedSets1 sortedSets2
(integer) 2

127.0.0.1:6379> zrange sortedSetsResults 0 -1 withscores
1) "a"
2) "11"
3) "b"
4) "22"

127.0.0.1:6379> zinterstore sortedSetsResult 2 sortedSets1 sortedSets2 aggregate min
(integer) 2

127.0.0.1:6379> zrange sortedSetsResult 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"

127.0.0.1:6379> zinterstore sortedSetsResult 2 sortedSets1 sortedSets2 aggregate max
(integer) 2
127.0.0.1:6379> zrange sortedSetsResult 0 -1 withscores
1) "a"
2) "10"
3) "b"
4) "20"

127.0.0.1:6379> zinterstore sortedSetsResults 2 sortedSets1 sortedSets2 weights 1 0.1
(integer) 2
127.0.0.1:6379> zrange sortedSetsResults 0 -1 withscores
1) "a"
2) "2"
3) "b"
4) "4"

個(gè)人博客:https://jenkinwang.github.io/

參考書籍:《Redis入門指南(第二版)》李子驊 編著

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容