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

  免費注冊 查看新帖 |

Chinaunix

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

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

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-06-15 22:27 |只看該作者 |倒序瀏覽

2.5          sets類型及操作
set是集合,和我們數(shù)學(xué)中的集合概念相似,對集合的操作有添加刪除元素,有對多個集合求交并差等操作,操作中key理解為集合的名字。
Redissetstring類型的無序集合。set元素最大可以包含(232次方)個元素。
set的是通過hash table實現(xiàn)的,所以添加、刪除和查找的復(fù)雜度都是O(1)。hash table會隨著添加或者刪除自動的調(diào)整大小。需要注意的是調(diào)整hash table大小時候需要同步(獲取寫鎖)會阻塞其他讀寫操作,可能不久后就會改用跳表(skip list)來實現(xiàn),跳表已經(jīng)在sorted set中使用了。關(guān)于set集合類型除了基本的添加刪除操作,其他有用的操作還包含集合的取并集(union),交集(intersection),差集(difference)。通過這些操作可以很容易的實現(xiàn)sns中的好友推薦和blogtag功能。下面詳細介紹set相關(guān)命令:
2.5.1 sadd
向名稱為keyset中添加元素
redis 127.0.0.1:6379> sadd myset "hello"
(integer) 1
redis 127.0.0.1:6379> sadd myset "world"
(integer) 1
redis 127.0.0.1:6379> sadd myset "world"
(integer) 0
redis 127.0.0.1:6379> smembers myset
1) "world"
2) "hello"
redis 127.0.0.1:6379>
本例中,我們向myset中添加了三個元素,但由于第三個元素跟第二個元素是相同的,所以第三個元素沒有添加成功,最后我們用smembers來查看myset中的所有元素。
2.5.2 srem
刪除名稱為keyset中的元素member
redis 127.0.0.1:6379> sadd myset2 "one"
(integer) 1
redis 127.0.0.1:6379> sadd myset2 "two"
(integer) 1
redis 127.0.0.1:6379> sadd myset2 "three"
(integer) 1
redis 127.0.0.1:6379> srem myset2 "one"
(integer) 1
redis 127.0.0.1:6379> srem myset2 "four"
(integer) 0
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379>
本例中,我們向myset2中添加了三個元素后,再調(diào)用srem來刪除onefour,但由于元素中沒有four所以,此條srem命令執(zhí)行失敗。
2.5.3 spop
隨機返回并刪除名稱為keyset中一個元素
redis 127.0.0.1:6379> sadd myset3 "one"
(integer) 1
redis 127.0.0.1:6379> sadd myset3 "two"
(integer) 1
redis 127.0.0.1:6379> sadd myset3 "three"
(integer) 1
redis 127.0.0.1:6379> spop myset3
"three"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379>
本例中,我們向myset3中添加了三個元素后,再調(diào)用spop來隨機刪除一個元素,可以看到three元素被刪除了。
2.5.4 sdiff
返回所有給定key與第一個key的差集
redis 127.0.0.1:6379>  smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379>  smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sdiff myset2 myset3
1) "three"
redis 127.0.0.1:6379>
本例中,我們可以看到myset2中的元素與myset3中不同的只是three,所以只有three被查出來了,而不是threeone,因為onemyset3的元素。
我們也可以將myset2myset3換個順序來看一下結(jié)果:
redis 127.0.0.1:6379> sdiff myset3 myset2
1) "one"
redis 127.0.0.1:6379>
這個結(jié)果中只顯示了,myset3中的元素與myset2中不同的元素。
2.5.5 sdiffstore
返回所有給定key與第一個key的差集,并將結(jié)果存為另一個key
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sdiffstore myset4 myset2 myset3
(integer) 1
redis 127.0.0.1:6379> smembers myset4
1) "three"
redis 127.0.0.1:6379>
2.5.6 sinter
返回所有給定key的交集
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sinter myset2 myset3
1) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2myset3的交集two被查出來了
2.5.7 sinterstore
返回所有給定key的交集,并將結(jié)果存為另一個key
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sinterstore myset5 myset2 myset3
(integer) 1
redis 127.0.0.1:6379> smembers myset5
1) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2myset3的交集被保存到myset5中了
2.5.8 sunion
返回所有給定key的并集
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sunion myset2 myset3
1) "three"
2) "one"
3) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2myset3的并集被查出來了
2.5.9 sunionstore
返回所有給定key的并集,并將結(jié)果存為另一個key
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> sunionstore myset6 myset2 myset3
(integer) 3
redis 127.0.0.1:6379> smembers myset6
1) "three"
2) "one"
3) "two"
redis 127.0.0.1:6379>
通過本例的結(jié)果可以看出, myset2myset3的并集被保存到myset6中了
2.5.10 smove
從第一個key對應(yīng)的set中移除member并添加到第二個對應(yīng)set
redis 127.0.0.1:6379> smembers myset2
1) "three"
2) "two"
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> smove myset2 myset7 three
(integer) 1
redis 127.0.0.1:6379> smembers myset7
1) "three"
redis 127.0.0.1:6379>
通過本例可以看到,myset2three被移到myset7中了
2.5.11 scard
返回名稱為keyset的元素個數(shù)
redis 127.0.0.1:6379> scard myset2
(integer) 1
redis 127.0.0.1:6379>
通過本例可以看到,myset2的成員數(shù)量為1
2.5.12 sismember
測試member是否是名稱為keyset的元素
redis 127.0.0.1:6379> smembers myset2
1) "two"
redis 127.0.0.1:6379> sismember myset2 two
(integer) 1
redis 127.0.0.1:6379> sismember myset2 one
(integer) 0
redis 127.0.0.1:6379>
通過本例可以看到,twomyset2的成員,而one不是。
2.5.13 srandmember
隨機返回名稱為keyset的一個元素,但是不刪除元素
redis 127.0.0.1:6379> smembers myset3
1) "two"
2) "one"
redis 127.0.0.1:6379> srandmember myset3
"two"
redis 127.0.0.1:6379> srandmember myset3
"one"
redis 127.0.0.1:6379>

-------------------------------------------------------------------
《MongoDB管理與開發(fā)精要》、《Redis實戰(zhàn)》作者
ChinaUnix.net專家 http://cdhongwan.blog.chinaunix.net
@CD紅丸           http://weibo.com/u/2446082491

您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP