Redis是REmote 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柱衔、OR、XOR愉棱、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)AGGREGATE是SUM時(shí)(也就是默認(rèn)值)迂曲,destination鍵中元素的分?jǐn)?shù)是每一個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的和靶橱。
2.當(dāng)AGGREGATE是MIN時(shí),destination鍵中元素的分?jǐn)?shù)是每一個(gè)參與計(jì)算的集合中該元素分?jǐn)?shù)的最小值路捧。
3.當(dāng)AGGREGATE是MAX時(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入門指南(第二版)》李子驊 編著