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,如需轉載請自行聯系原作者