本文版權,歸博客園和作者吳雙共同所有。轉載和爬蟲請注明博客園蝸牛Redis系列文章地址 http://www.cnblogs.com/tdws/tag/NoSql/
單個集合中最多允許存儲2的三十二次方減1個元素。內部使用hash table散列表實現。
SADD Key members.....,向集合中增加多個元素,返回成功個數。另外由於集合中不允許有重復元素,所以當添加重復元素時,會忽略不計,當然也不計影響個數。
SMEMBERS Key 獲取目標集合Key下的所有元素。
SREM Key members 從目標集合中移除多個元素。
SISMEMBER Key Member,判斷指定元素 是否在指定集合中存在。時間復雜度O(1)
首先提醒一點,多個集合運算,是按照順序,一路算下去的結果。
SDIFF Keys計算差集。
請注意Result位置,和兩次差集結果Result。
SINTER Keys 計算並集。注意Result位置。
SUNION 計算交集。
比如在天貓或者京東當中,篩選商品,你想要七天包退換,貨到付款,可分期這樣的商品。我們先把這樣的標記叫做標簽(Tag),
GoodsId | GoodsTag |
Goods:1 | 新上架馬蓉版充XX娃 |
Goods:2 | 新上架《淘寶這十年XXX》 |
Goods:3 | 新上架VR眼鏡 |
Tag:Id | Tag:Name |
Tag:1 | 七天包退換 |
Tag:2 | 貨到付款 |
Tag:3 | 可分期 |
Tag:Id | Goods:Id |
Tag:1 | Goods:1,Goods:2,Goods:3 |
Tag:2 | Goods:1.Goods:2 |
Tag:3 | Goods:1 |
那么我們需要維護並設計的Redis數據“存儲結構”如上,三個“表”。當然這是我的隨意設計,還算是比較合理。並不了解人家JD,ALi是如何設計的。那么現在你就可以對你需要的符合七天包退換,貨到付款,可分期這三種Tag的商品進行篩選咯。很顯然,解決辦法就是計算最后一個表的,Tag1,Tag2,Tag3這三種標簽所擁有的商品Id的並集,並集之后的結果也就是Goods:1,對應的商品是“新上架馬蓉版充XX娃”。
值得注意的是,NoSql中的設計思路,和關系型數據庫稍有不同,多思考使用場景,對轉換思想好處多多。
歡迎關注,蝸牛將持續發博分享,明天將會補充集合命令,下一篇將會簡單介紹有序集合,如果你學會了這個簡單的設計,請為自己點贊!
集合命令補充 http://www.cnblogs.com/tdws/p/5789440.html