成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python--Redis實戰(zhàn):第三章:Redis命令:第五節(jié):有序集合

xinhaip / 2157人閱讀

摘要:對給定的有序集合執(zhí)行類似于集合的并集運算。用戶可以把集合作為輸入傳給和,命令會將集合看作是成員分值全為的有序集合來處理。上一篇文章實戰(zhàn)第三章命令第四節(jié)散列下一篇文章實戰(zhàn)第三章命令第六節(jié)發(fā)布與訂閱

上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第四節(jié):散列
下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第六節(jié):發(fā)布與訂閱

和散列存儲著鍵與值之間的映射類似,有序集合也存儲著成員與分值之間的映射,并且提供了分值處理命令,已經(jīng)根據(jù)分值大小有序的獲?。╢etch)和掃描(scan)成員和分值的命令。本書曾在第一章使用有序集合實現(xiàn)過基于發(fā)布時間排序的文章列表和基于投票數(shù)量排序的文章列表,還在第二章使用有序集合存儲過cookie的過期時間。

這些分值在Redis中以IEEE754雙精度點數(shù)的格式存儲。

本節(jié)將對操作有序集合的命令進行介紹,其中包括向有序集合添加新元素的命令、更細已有元素的命令、以及對有序集合進行交集運算和并集運算的命令。

下表展示了一部分常用的有序集合命令:

命令 用例 用例描述
zadd zadd key-name score memeber [score member ...] 將帶有給定分值的成員添加到有序集合里面
zrem zrem key-name member [member ...] 從有序集合里面移除給定的成員,并返回被移除成員的數(shù)量
zcard zcard key-name 返回有序集合包含的成員數(shù)量
zincrby zincrby key-name increment member 將merber成員的分值加上increment
zcount zcount key-name min max 返回分值介于min和max之間的成員數(shù)量
zrank zrank key-name member 返回成員member有序集合中的排名。
zscore zsore key-name member 返回成員member的分值
zrange zrange key-name start stop [WITHSCORES] 返回有序集合中排名介于start和stop之間的成員,如果給定了可選的WITHSCORES選項,那么命令會將成員的分值也一并返回。

實例:

import redis # 導入redis包包


# 與本地redis進行鏈接,地址為:localhost,端口號為6379
r = redis.StrictRedis(host="localhost", port=6379)

r.delete("zset-key")

print(r.zadd("zset-key",3,"a",2,"b",1,"c"))

print(r.zcard("zset-key"))

print(r.zincrby("zset-key","c",3))

print(r.zscore("zset-key","b"))

print(r.zrank("zset-key","c"))

#返回介于0-3之間的成員數(shù)量
print(r.zcount("zset-key",0,3))

print(r.zrem("zset-key","b"))

print(r.zrange("zset-key",0,-1,withscores=True))

結果:

3
3
4.0
2.0
2
2
1
[(b"a", 3.0), (b"c", 4.0)]

因為zadd、zrem、zincrby、zscore和zrange都已經(jīng)在第一章和第二章介紹過了,所以讀者應該不會對它們感到陌生。zcount命令和其他命令不太相同,它主要擁擠計算分值在給定范圍內(nèi)的成員數(shù)量。

下表展示了另外一些非常有用的有序集合命令:

有序集合的范圍型數(shù)據(jù)獲取命令和范圍型數(shù)據(jù)刪除命令,以及并集命令和交集命令:

命令 用例 用例描述
zrevrank zrevrank key-name merber 返回有序集合里面成員member的排名,成員按照分值從大到小排列
zrevrange zrevrange key-name start stop [WITHSCORES] 返回有序集合給定排名范圍內(nèi)的成員,成員按照分值從大到小排列
zrangebysocre zrangebyscore by min max [WITHSCORES] [LIMIT offset count] 返回有序集合中,分值介于min和max之間的所有成員。
zrevrangebyscore zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count] 獲取有序集合中分值介于min和max之間的所有成員,并按照分值從大到小的順序來返回它們。
zremrangebyrank zremrangebyrank key-name start stop 移除有序集合中排名介于start和stop之間的所有成員。
zremrangebyscore zremrangebyscore key-name min max 移除有序集合中分值介于min和max之間的所有成員。
zinterstore zinterstore dest-key key-count key [key ...] 對給定的有序集合執(zhí)行類似于集合的交集運算。
zunionstore zunionstore dest-key key-count key [key ...] [weights weight [weight ...]][aggregate summinmax] 對給定的有序集合執(zhí)行類似于集合的并集運算。

上表展示的命令里面,有幾個是之前沒介紹過的新命令。除了使用逆序來處理有序集合之外,zrev*命令的工作方式和相對應的非逆序命令的工作方式完全一樣(逆序就是指元素按照從大到小地排列)。

實例:

import redis # 導入redis包包


# 與本地redis進行鏈接,地址為:localhost,端口號為6379
r = redis.StrictRedis(host="localhost", port=6379)

r.delete("zset-key1")
r.delete("zset-key2")
r.delete("zset-key-i")
r.delete("zset-key-u")
r.delete("zset-key-u2")
r.delete("set-1")

#首先創(chuàng)建兩個有序集合
#a b c d
#1 2 3
# 4 1 0
print(r.zadd("zset-key1",1,"a",2,"b",3,"c"))
print(r.zadd("zset-key2",4,"b",1,"c",0,"d"))


#zinterstore和zunionstore默認使用的聚合函數(shù)為sum,這個函數(shù)會把各個有序集合的成員的分值都加起來
print(r.zinterstore("zset-key-i",["zset-key1","zset-key2"]))

print(r.zrange("zset-key-i",0,-1,withscores=True))

#用戶可以在執(zhí)行并集運算和交集運算的時候傳入不同的聚合函數(shù),共有sum、min、max三個聚合函數(shù)可選。
print(r.zunionstore("zset-key-u",["zset-key1","zset-key2"],aggregate="min"))

print(r.zrange("zset-key-u",0,-1,withscores=True))

print(r.sadd("set-1","a","d"))

#用戶可以把集合作為輸入傳給zinterstore和zunionstore,命令會將集合看作是成員分值全為1的有序集合來處理。
print(r.zunionstore("zset-key-u2",["zset-key1","zset-key2","set-1"]))

print(r.zrange("zset-key-u2",0,-1,withscores=True))

結果:

3
3
2
[(b"c", 4.0), (b"b", 6.0)]
4
[(b"d", 0.0), (b"a", 1.0), (b"c", 1.0), (b"b", 2.0)]
2
4
[(b"d", 1.0), (b"a", 2.0), (b"c", 4.0), (b"b", 6.0)]

有序集合的并集運算和交集運算在剛開始接觸時可能會比較難懂,我們將以表格來展示交集運算和并集運算的執(zhí)行過程。

對兩個輸入有序集合執(zhí)行【交集】運算并得到輸出有序集合

這次交集運算使用的是默認的聚合函數(shù)sum,所有輸出有序集合成員的分值都是通過加法計算得到的。

zset-key1:

a b c d
1 2 3

zset-key2

a b c d
4 1 0

zset-key-i

a b c d
6 4
執(zhí)行r.zinterstore("zset-key-i",["zset-key1","zset-key2"]),將使得同時存在于zset-key1和zset-key2里面的元素被添加到z-set-key-i中。
對兩個輸入有序集合執(zhí)行【并集】運算并得到輸出有序集合

并集運算和交集運算不同,只要某個成員存在于至少一個輸入有序集合里面,那么這個成員就會被包含在輸出有序集合里面。下表展示了使用聚合函數(shù)min執(zhí)行并集運算的過程,min函數(shù)在多個輸入有序集合都包含同一個成員的情況下,會將最小的那個分值設置Wie這個成員的輸出有序集合的分值。

zset-key1

a b c d
1 2 3

zset-key2

a b c d
4 1 0

zset-key-u

a b c d
1 2(取小的那個) 1(取小的那個) 0
執(zhí)行r.zunionstore("zset-key-u",["zset-key1","zset-key2"],aggregate="min"),會將存在于zset-key1或者zset-key2里面的元素通過min函數(shù)組合到zset-key-u里面。
使用zunionstore命令來將兩個有序集合和一個集合組合成一個有序集合

zset-key1

a b c d
1 2 3

zset-key2

a b c d
4 1 0

set-1

a d

zset-key-u2

a b c d
2 6 4 1
執(zhí)行r.zunionstore("zset-key-u2",["zset-key1","zset-key2","set-1"]),將使得所有存在于zset-key1、zset-key2或者set-1里面的元素都被添加到zset-key-u2里面

后面講使用zinterstore和zunionstore來構建幾個不同類型的搜索系統(tǒng),并說明如果通過可選的weights參數(shù)來以幾種不同的防暑組合有序集合的分值,從而使得集合和有序集合可以用于解決更多問題。

讀者在開發(fā)應用的過程中,也許曾經(jīng)聽說過發(fā)布與訂閱(publish、subscribe)模式,又稱pub/sub模式,Redis也實現(xiàn)了這種模式,接下來的一節(jié)將對其進行介紹。

上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第四節(jié):散列
下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第六節(jié):發(fā)布與訂閱

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/44872.html

相關文章

  • Python--Redis實戰(zhàn):第二章:使用Redis構建Web應用:五節(jié):網(wǎng)頁分析

    摘要:每個分值,函數(shù)就會刪除所有排名在名之后的商品,并將刪除之后剩余的所有商品的瀏覽次數(shù)減半。上一篇文章實戰(zhàn)第二章使用構建應用第四節(jié)數(shù)據(jù)行緩存下一篇文章實戰(zhàn)第三章命令第一節(jié)字符串 上一篇文章:Python--Redis實戰(zhàn):第二章:使用Redis構建Web應用:第四節(jié):數(shù)據(jù)行緩存下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第一節(jié):字符串 網(wǎng)站可以從用戶的訪問、交互、...

    rubyshen 評論0 收藏0
  • Python--Redis實戰(zhàn)三章Redis命令:第四節(jié):散列

    摘要:實例導入包包與本地進行鏈接,地址為,端口號為和字符串一樣,對散列中一個尚未存在的鍵執(zhí)行自增操作時,會將鍵的值當作來處理。 上一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第三節(jié):集合下一篇文章:Python--Redis實戰(zhàn):第三章:Redis命令:第五節(jié):有序集合 第一章提到過,Redis的散列可以讓用戶將多個鍵值對存儲到一個Redis里面。從功能上來說,Red...

    waterc 評論0 收藏0

發(fā)表評論

0條評論

xinhaip

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<