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中的设计思路,和关系型数据库稍有不同,多思考使用场景,对转换思想好处多多。

欢迎关注,蜗牛将持续发博分享,明天将会补充集合命令,下一篇将会简单介绍有序集合,如果你学会了这个简单的设计,请为自己点赞!

时间: 2024-10-05 05:04:52

Redis命令拾遗四(集合类型)—包含简单搜索筛选商品设计实例。的相关文章

Redis命令拾遗四——集合类型(命令补充)

补充下上篇文章集合的命令. 上篇地址 博客园蜗牛 http://www.cnblogs.com/tdws/p/5785939.html SCARD Key获得执行集合中元素的数量. SDIFFSTORE 目标键 keys ...  将集合做DIFF差集操作,并存储在目标键中. 另外同样有SINTERSTORE,SUNIONSTORE.对于集合还不了解的童鞋,请看上篇文章. 最后一个要介绍的命令就是SRANDMEMBER Key.从目标键中取随机一个元素.他是很有趣的. 目前SetA中有十个元素,

使用 redis (sort set排序集合类型操作)

sort set排序集合类型 释义: sort set 是 string 类型的集合 sort set 的每个元素 都会关联一个 权 通过 权值 可以有序的获取集合中的元素 应用场合: 获取热门帖子(回复量)信息: select * from message order by backnum desc limit 5; // 利用 sort set 实现最热门的前 5 贴信息 帖子id            回复量(万条) 11                102        12     

Swift 笔记 (四) —— 集合类型

集合类型 Swift 提供了两种集合类型, Array, Dictionary Array与Dictionary 都须要存同样类型的数据  //实际測试的时候发现能够混杂类型,以下有样例 Array 是有序的, Dictionary 是无序的 Dictionary须要一组无唯一的索引用于查找,也就是key Array 原型: Array<SomeType>, SomeType指的是要放在Array里的数据类型 var myArray: String[] = ["var1",

Redis命令拾遗一(字符串类型)

文章归博客园和作者“蜗牛”共同所有 .转载和爬虫请注明原文Redis系列链接 http://www.cnblogs.com/tdws/tag/NoSql/ Redis有五种基本数据类型.他们分别是字符串,散列,列表,集合,有序集合.实际上,后四种,在我们表面上理解看来,是以不同的形式来组织字符串键值. 你可以用其存储任何你所希望的一块整体数据,是整体数据哟.如果是文章的标题,标签,内容,评论这样的数据,虽然你可以将其对象序列化为Json存储,但是不建议使用字符串.因为作为一个整体存储,当你想获得

Redis命令拾遗三(列表List类型)

Redis五种数据类型之列表类型 Redis五种数据类型之列表类型.你可以存储一个有序的字符串列表一类数据.比如你想展示你所存储的所有文章中的前十条,当分页取下一页的时候,你也可以取接下来的十条.所以建议你维护一个文章ID的列表.其内部使用双向链表实现,这意味着在你获取一段头部和尾部的数据是极快的,但是在数据量大时获取列表中间部分的数据稍慢.因为链表通过索引访问数据.比如微信的朋友圈,我们关注的大部分只是最新的数据,所以这样的场景很合适.同时,在插入数据时,也是在左右两端插入,效率也不会受到影响

Redis 的数据类型 - Zset 集合类型:有序集合

ZADD:将元素及其分数添加到集合中 语法:ZADD key courseScore member [courseScore member] ZADD courseScore 100 tom ZADD courseScore 99 jerry 88 mario 77 jack 66 lucy 55 chris ZADD courseScore 60 tom 67 apple 56 cherry #这里 tom 已经存在了,直接略过不执行,返回值为 2 # ZADD courseScore 12.

Redis ---------- Sort Set排序集合类型

sortset是(list)和(set)的集中体现 与set的相同点: string类型元素的集合 不同点: sortset的元素:值+权 适合场合 获得最热门前5个帖子的信息 例如 select *from message order by backnum desc limit 5; 11 102 12  141 13 159 14 72 15 203 16  189 17 189 18  395 19 184 原文地址:https://www.cnblogs.com/zhouxingzhi/

Redis常用命令入门4:集合类型

集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易的在Redis中执行差集运算.交集运算.并集运算. 首先我们先介绍一下集合类型和列表类型的区别,其实学过面向对象的语言的同学应该都能猜到这些类型有什么不同. ①集合类型和列表类型还是都能存储2^32-1个字符串 ②集合类型是无序的,列表类型是有序的 ③集合类型是唯一的,列表类型的值是不唯一的 下面我

Redis研究(四)—散列类型

散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型. 散列类型不能嵌套其他的数据类型.一个散列类型键可以包含至多2^32-1个字段. 一.介绍 散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值. 如果要关系数据中存储汽车对象: 数据是以二维表的形式存储的,这就要求所有的记录都有同样的属性,无法单独为某条记录增减属性.如果想要为ID为1的汽车增加生产日期属性,就需要把数据表更改