天天看點

Redis實戰(6)資料類型四Sets

set是集合,和我們數學中的集合概念相似,對集合的操作有添加删除元素,有對多個集合求交并差等操作,操作中key了解為集合的名字。

set的是通過hash table實作的,是以添加、删除和查找的複雜度都是O(1)。hash table會随着添加或者删除自動的調整大小。需要注意的是調整hash table大小時候需要同步(擷取寫鎖)會阻塞其他讀寫操作,可能不久後就會改用跳表(skip list)來實作,跳表已經在sorted set中使用了。關于set集合類型除了基本的添加删除操作,其他有用的操作還包含集合的取并集(union),交集(intersection),差集(difference)。通過這些操作可以很容易的實作sns中的好友推薦和blog的tag功能。下面詳細介紹set相關指令:

sadd:

向名稱為key的set中添加元素

<a href="http://blog.51cto.com/attachment/201312/220210517.png" target="_blank"></a>

本例中,我們向myset中添加了三個元素,但由于第三個元素跟第二個元素是相同的,是以第三個元素沒有添加成功,最後我們用smembers來檢視myset中的所有元素。

srem:

删除名稱為key的set中的元素member

<a href="http://blog.51cto.com/attachment/201312/220351361.png" target="_blank"></a>

本例中,我們向myset2中添加了三個元素後,再調用srem來删除one和four,但由于元素中沒有four是以,此條srem指令執行失敗。

spop:

随機傳回并删除名稱為key的set中一個元素

<a href="http://blog.51cto.com/attachment/201312/220622751.png" target="_blank"></a>

本例中,我們向myset3中添加了三個元素後,再調用spop來随機删除一個元素,可以看到one元素被删除了。

sdiff:

傳回所有給定key與第一個key的差集

<a href="http://blog.51cto.com/attachment/201312/221011529.png" target="_blank"></a>

本例中,我們可以看到myset2中的元素與myset3中不同的隻是one,但是one是myset3的元素,是以不會别傳回,颠倒順序取差集,可以看到one被傳回了。

sdiffstore:

傳回所有給定key與第一個key的差集,并将結果存為另一個key

<a href="http://blog.51cto.com/attachment/201312/221403794.png" target="_blank"></a>

sinter:

傳回所有給定key的交集

<a href="http://blog.51cto.com/attachment/201312/221506921.png" target="_blank"></a>

sinterstore:

傳回所有給定key的交集,并将結果存為另一個key

<a href="http://blog.51cto.com/attachment/201312/221619851.png" target="_blank"></a>

sunion:

傳回所有給定key的并集

<a href="http://blog.51cto.com/attachment/201312/221739356.png" target="_blank"></a>

sunionstore:

傳回所有給定key的并集,并将結果存為另一個key

<a href="http://blog.51cto.com/attachment/201312/221849469.png" target="_blank"></a>

smove:

從第一個key對應的set中移除member并添加到第二個對應set中

<a href="http://blog.51cto.com/attachment/201312/222040495.png" target="_blank"></a>

scard:

傳回名稱為key的set的元素個數

<a href="http://blog.51cto.com/attachment/201312/222201949.png" target="_blank"></a>

sismember:

測試member是否是名稱為key的set的元素

<a href="http://blog.51cto.com/attachment/201312/222306424.png" target="_blank"></a>

srandmember:

随機傳回名稱為key的set的一個元素,但是不删除元素

<a href="http://blog.51cto.com/attachment/201312/222419980.png" target="_blank"></a>

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1337870,如需轉載請自行聯系原作者

繼續閱讀