本文版權,歸博客園和作者吳雙共同所有。轉載和爬蟲請註明博客園蝸牛Redis系列文章地址 http://www.cnblogs.com/tdws/tag/NoSql/ Redis數據類型之集合(Set)。 單個集合中最多允許存儲2的三十二次方減1個元素。內部使用hash table散列表實現。 SAD ...
本文版權,歸博客園和作者吳雙共同所有。轉載和爬蟲請註明博客園蝸牛Redis系列文章地址 http://www.cnblogs.com/tdws/tag/NoSql/
Redis數據類型之集合(Set)。單個集合中最多允許存儲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中的設計思路,和關係型資料庫稍有不同,多思考使用場景,對轉換思想好處多多。
歡迎關註,蝸牛將持續發博分享,明天將會補充集合命令,下一篇將會簡單介紹有序集合,如果你學會了這個簡單的設計,請為自己點贊!