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

RedisREmote DIctionary Server(遠(yuǎn)程字典服務(wù)器)的縮寫,它以字典結(jié)構(gòu)存儲數(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

字符串類型

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

賦值與取值

當(dāng)鍵不存在時(shí)寸爆,會返回空結(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í)會默認(rèn)鍵值為0礁鲁,所以第一次遞增后的結(jié)果是1盐欺,當(dāng)鍵值不是整數(shù)時(shí) Redis會提示錯(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粉洼,本例中則會返回 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 ...]:可以對多個(gè)字符串類型鍵進(jìn)行位運(yùn)算挫剑,并將結(jié)果存儲在destkey參數(shù)指定的鍵中去扣,BITOP支持的運(yùn)算操作有 AND柱衔、ORXOR愉棱、NOT

? 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會自動將中間的二進(jìn)制位設(shè)置為0,同理設(shè)置一個(gè)不存在的鍵的指定二進(jìn)制位的值會自動將其前面的位賦值為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)奔滑,其存儲了字段和字段值的映射艾岂,但字段值只能是字符串,不支持其他數(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命令會返回1钞啸,當(dāng)執(zhí)行的是更新操作時(shí)(即之前字段已經(jīng)存在)HSET命令會返回0.當(dāng)鍵本身不存在時(shí),HSET命令還會自動創(chuàng)建它喇潘。
HGET key field:
HMSET key field value [field value ...]:同時(shí)設(shè)置多個(gè)字段的值
HMGET key field [field ...]
HGETALL key: 獲取鍵中所有的字段和字段值体斩。很多語言的Redis客戶端會將HGETALL的返回結(jié)果封裝成編程語言中的對象。

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(如果鍵不存在也會返回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:返回值是增值后的字段值。如果該鍵不存在粱栖,會自動增加該鍵话浇。散列類型沒有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

列表類型

列表類型可以存儲一個(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的索引位置靠后鳖枕,則會返回空列表惠奸;

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

刪除列表中指定的值

LREM key count value:刪除列表中前count個(gè)值為value的元素佛南,返回值是實(shí)際刪除的元素梗掰。
1.當(dāng)count > 0 時(shí),LREM命令會從列表左邊開始刪除前count個(gè)值為value的元素嗅回;
2.當(dāng)count < 0 時(shí)及穗,LREM命令會從列表右邊開始刪除前|count|個(gè)值為value的元素;
3.當(dāng)count = 0 時(shí)妈拌,LREM命令會刪除所有值為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命令會先從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)鍵可以存儲至多2^32-1個(gè)字符串逼争。

增加/刪除元素

SADD key member [member …]:向集合增加一個(gè)或多個(gè)元素,如果鍵不存在則會自動創(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 …]:對多個(gè)集合進(jìn)行差集運(yùn)算
SINTER key [key ...]:對多個(gè)集合執(zhí)行交集運(yùn)算
SUNION KEY [KEY …]:對多個(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é)果存儲

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 會隨機(jī)從集合里獲得count個(gè)不重復(fù)的元素歉备。如果count的值大于集合中的元素個(gè)數(shù),則返回全部元素匪燕。
2.當(dāng)count為負(fù)數(shù)時(shí)蕾羊,SRANDMEMBER會隨機(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)存在則會用新的分?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ù)相同則會按照字典順序(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í)行命令前會先建立它并將它的分?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é)果存儲在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ù)會被乘上該集合 的權(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)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市章姓,隨后出現(xiàn)的幾起案子佳遣,更是在濱河造成了極大的恐慌,老刑警劉巖凡伊,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件零渐,死亡現(xiàn)場離奇詭異,居然都是意外死亡窗声,警方通過查閱死者的電腦和手機(jī)相恃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拦耐,你說我怎么就攤上這事耕腾。” “怎么了杀糯?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵扫俺,是天一觀的道長。 經(jīng)常有香客問我固翰,道長狼纬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任骂际,我火速辦了婚禮疗琉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歉铝。我一直安慰自己盈简,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布太示。 她就那樣靜靜地躺著柠贤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪类缤。 梳的紋絲不亂的頭發(fā)上臼勉,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天,我揣著相機(jī)與錄音餐弱,去河邊找鬼宴霸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛岸裙,可吹牛的內(nèi)容都是我干的猖败。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼降允,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了艺糜?” 一聲冷哼從身側(cè)響起剧董,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎破停,沒想到半個(gè)月后翅楼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡真慢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年毅臊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黑界。...
    茶點(diǎn)故事閱讀 38,687評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡管嬉,死狀恐怖皂林,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蚯撩,我是刑警寧澤础倍,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站胎挎,受9級特大地震影響沟启,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犹菇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一德迹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揭芍,春花似錦浦辨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至列另,卻和暖如春芽腾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背页衙。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工摊滔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人店乐。 一個(gè)月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓艰躺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眨八。 傳聞我的和親對象是個(gè)殘疾皇子腺兴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評論 2 349

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