Redis命令拾遺四(集合類型)—包含簡單搜索篩選商品設計實例。


本文版權,歸博客園和作者吳雙共同所有。轉載和爬蟲請注明博客園蝸牛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中的設計思路,和關系型數據庫稍有不同,多思考使用場景,對轉換思想好處多多。
歡迎關注,蝸牛將持續發博分享,明天將會補充集合命令,下一篇將會簡單介紹有序集合,如果你學會了這個簡單的設計,請為自己點贊!
集合命令補充 http://www.cnblogs.com/tdws/p/5789440.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM