zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    安全编码1
    VPP tips
    VPP概述汇总
    C语言安全编码摘录
    TCP-proxy
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.4. Matplotlib: plotting
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.3. NumPy: creating and manipulating numerical data
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.1. Python scientific computing ecosystem
    25马5跑道,求最快的五匹马的需要比赛的次数
  • 原文地址:https://www.cnblogs.com/tdws/p/5785939.html
Copyright © 2011-2022 走看看