亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2193 | 回復(fù): 0
打印 上一主題 下一主題

[Redis] [原創(chuàng)] Redis實(shí)戰(zhàn)《紅丸出品》2.6 sorted sets類型及操作 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-06-18 21:44 |只看該作者 |倒序?yàn)g覽
本帖最后由 cd紅丸 于 2012-06-18 21:46 編輯

2.6          sorted sets類型及操作
sorted setset的一個(gè)升級(jí)版本,它在set的基礎(chǔ)上增加了一個(gè)順序?qū)傩,這一屬性在添加修改元素的時(shí)候可以指定,每次指定后,zset會(huì)自動(dòng)重新按新的值調(diào)整順序。可以理解為有兩列的mysql表,一列存value,一列存順序。操作中key理解為zset的名字。
set一樣sorted set也是string類型元素的集合,不同的是每個(gè)元素都會(huì)關(guān)聯(lián)一個(gè)double類型的score。sorted set的實(shí)現(xiàn)是skip listhash table的混合體。
當(dāng)元素被添加到集合中時(shí),一個(gè)元素到score的映射被添加到hash table中,所以給定一個(gè)元素獲取score的開銷是O(1),另一個(gè)score到元素的映射被添加到skip list,并按照score排序,所以就可以有序的獲取集合中的元素。添加,刪除操作開銷都是O(log(N))skip list的開銷一致,redisskip list實(shí)現(xiàn)用的是雙向鏈表,這樣就可以逆序從尾部取元素。sorted set最經(jīng)常的使用方式應(yīng)該是作為索引來使用.我們可以把要排序的字段作為score存儲(chǔ),對(duì)象的id當(dāng)元素存儲(chǔ)。下面是sorted set相關(guān)命令
2.6.1 zadd
向名稱為keyzset中添加元素memberscore用于排序。如果該元素已經(jīng)存在,則根據(jù)score更新該元素的順序
redis 127.0.0.1:6379> zadd myzset 1 "one"
(integer) 1
redis 127.0.0.1:6379> zadd myzset 2 "two"
(integer) 1
redis 127.0.0.1:6379> zadd myzset 3 "two"
(integer) 0
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
redis 127.0.0.1:6379>

本例中我們向myzset中添加了onetwo,并且two被設(shè)置了2次,那么將以最后一次的設(shè)置為準(zhǔn),最后我們將所有元素都顯示出來并顯示出了元素的score。
2.6.2 zrem
刪除名稱為keyzset中的元素member
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "3"
redis 127.0.0.1:6379> zrem myzset two
(integer) 1
redis 127.0.0.1:6379> zrange myzset 0 -1 withscores
1) "one"
2) "1"
redis 127.0.0.1:6379>

可以看到two被刪除了
2.6.3 zincrby
如果在名稱為keyzset中已經(jīng)存在元素member,則該元素的score增加increment;否則向集合中添加該元素,其score的值為increment
redis 127.0.0.1:6379> zadd myzset2 1 "one"
(integer) 1
redis 127.0.0.1:6379> zadd myzset2 2 "two"
(integer) 1
redis 127.0.0.1:6379> zincrby myzset2 2 "one"
"3"
redis 127.0.0.1:6379> zrange myzset2 0 -1 withscores
1) "two"
2) "2"
3) "one"
4) "3"
redis 127.0.0.1:6379>

本例中將onescore1增加了2,增加到了3
2.6.4 zrank
返回名稱為keyzsetmember元素的排名(score從小到大排序)即下標(biāo)
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
"5"
redis 127.0.0.1:6379> zrank myzset3 two
(integer) 1
redis 127.0.0.1:6379>

本例中將two的下標(biāo)是1,我這里取的是下標(biāo),而不是score
2.6.5 zrevrank
返回名稱為keyzsetmember元素的排名(score從大到小排序)即下標(biāo)
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
"5"
redis 127.0.0.1:6379> zrevrank myzset3 two
(integer) 2
redis 127.0.0.1:6379>

按從大到小排序的話two是第三個(gè)元素,下標(biāo)是2
2.6.6 zrevrange
返回名稱為keyzset(按score從大到小排序)中的indexstartend的所有元素
redis 127.0.0.1:6379> zrevrange myzset3 0 -1 withscores
1) "five"
2) "5"
3) "three"
4) "3"
5) "two"
6) "2"
7) "one"
"1"
redis 127.0.0.1:6379>

首先按score從大到小排序,再取出全部元素
2.6.7 zrangebyscore
返回集合中score在給定區(qū)間的元素
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
"5"
redis 127.0.0.1:6379> zrangebyscore myzset3 2 3 withscores
1) "two"
2) "2"
3) "three"
4) "3"
redis 127.0.0.1:6379>

本例中,返回了score2~3區(qū)間的元素
2.6.8 zcount
返回集合中score在給定區(qū)間的數(shù)量
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
"5"
redis 127.0.0.1:6379> zcount myzset3 2 3
(integer) 2
redis 127.0.0.1:6379>

本例中,計(jì)算了score2~3之間的元素?cái)?shù)目
2.6.9 zcard
返回集合中元素個(gè)數(shù)
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
"5"
redis 127.0.0.1:6379> zcard myzset3
(integer) 4
redis 127.0.0.1:6379>

從本例看出myzset3這個(gè)集全的元素?cái)?shù)量是4
2.6.10 zscore
返回給定元素對(duì)應(yīng)的score
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
"5"
redis 127.0.0.1:6379> zscore myzset3 two
"2"
redis 127.0.0.1:6379>

此例中我們成功的將twoscore取出來了。
2.6.11 zremrangebyrank
刪除集合中排名在給定區(qū)間的元素
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
7) "five"
"5"
redis 127.0.0.1:6379> zremrangebyrank myzset3 3 3
(integer) 1
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
redis 127.0.0.1:6379>

在本例中我們將myzset3中按從小到大排序結(jié)果的下標(biāo)為3的元素刪除了。
2.6.12 zremrangebyscore
刪除集合中score在給定區(qū)間的元素
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
redis 127.0.0.1:6379> zremrangebyscore myzset3 1 2
(integer) 2
redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores
1) "three"
2) "3"
redis 127.0.0.1:6379>

在本例中我們將myzset3中按從小到大排序結(jié)果的score1~2之間的元素刪除了。
-------------------------------------------------------------------
《MongoDB管理與開發(fā)精要》、《Redis實(shí)戰(zhàn)》作者
ChinaUnix.net專家 http://cdhongwan.blog.chinaunix.net
@CD紅丸           http://weibo.com/u/2446082491



您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP