专题五:redis的数据类型之set
一、基本简介
现在出现了新的查询需求:存储大量数据的同时,还需要在查询方面提供更高的效率。虽然list满足存储大量的数据,也可以通过索引来进行访问,但是list底层是双向链表的结构,在查询上的效率并没有可观。
需要的存储结构:能够存储大量数据,高效的内部存储机制,便于查询。
这个时候,可能我们会联想到前面的hash,但是这里面有一个问题,我们用的是右边的value,而不是左边的名字(field)。因此,我们做一个变形:

- 本质set类型与hash存储结构完全相同,仅存储键,不存储值,并且值是不允许重复的。
二、基本操作
| 功能 | 命令 | 其他说明 |
| 添加数据 | sadd key member1 member2 ... | 添加成功返回1 |
| 获取全部数据 | smembers key | |
| 删除数据 | srem key member1 member2 ... | |
| 获取集合数据总量 | scard key | 返回数据总数 |
| 判断集合中是否包含指定数据 | sismember key member | 有返回1,没有返回0 |
三、扩展操作
3.1 set操作随机数据
场景:比方说今日头条App,当你注册后,会设置三条爱好的内容,但是为了增加用户的活跃度,兴趣点,必须让用户对其他信息类别感兴趣,增加客户的留存度,怎么实现?
方案:
- 系统分析出各个分类的最新或最热点的消息条目并组织成set集合
- 随机挑选其中部分信息
- 配合用户关注信息分类的热点信息组织成展示的全信息集合
| 功能 | 命令 | 其他说明 |
| 随机获取集合中指定数量的数据 | srandmember key [count] | 集合元素数量不变 |
| 随机获取集合中的某个数据并将该数据移出集合 | spop key | 集合元素数量改变 |
3.2 set数据交并差操作
场景:微信公共号针对关注的公共号,会显示多少好友已经关注? QQ推荐好友?
| 功能 | 命令 | 其他说明 |
| 求两个集合的交并差集 |
sinter key1 key2 sunion key1 key2 sdiff key1 key2 |
sdiff 差集A-B注意有先后顺序问题 |
| 求两个集合的交并差集并存储到指定集合中 |
sinterstore destination key1 key2 sunionstore destination key1 key2 sdiffstore destination key1 key2 |
detination意指新的集合 |
| 将指定集合从原始集合中移到目标集合中 | smove source destination member |
tips:
- redis应用于同类信息的关联检索,二度关联检索,深度关联检索
- 显示共同关注
- 显示共同好友
- 由用户A出发,获取到好友用户B的好友信息列表
- 由用户A出发,获取到好友用户B的购物车清单
四、set操作数据类型的注意事项
- set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份
- set虽然与hash的存储结构相同,但是不能当hash用,无法启用hash存储值的空间
下一篇写redis数据类型之sorted_set.
专题五:redis的数据类型之set的更多相关文章
- redis的五种基本数据类型
redis基本数据类型 redis一共分为5中基本数据类型:String,Hash,List,Set,ZSet 第一种String String类型是包含很多种类型的特殊类型,并且是二进制安全的.比如 ...
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Redis笔记(三)Redis的数据类型
前面说过,Redis的一大特性是支持丰富的数据类型, 这为更多的应用场景提供了可能. Redis有五种数据类型,包括string,list,set,sorted set和hash,注意,Redis的数 ...
- Redis常用数据类型
Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html Redis最为常用的数据类型主要有以下五种: ●Str ...
- Redis常用数据类型和事物以及并发
Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...
- Redis五大数据类型的常用操作
在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...
- redis的数据类型及使用
Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...
- Redis系列(二):Redis的数据类型及命令操作
原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...
- Redis的数据类型以及每种数据类型的使用场景
人就是很奇怪的动物,很简单的问题往往大家都容易忽略,当我们在使用分布式缓存Redis的时候,一个最简单的问题Redis的数据类型以及每种数据类型的使用场景是什么? 是不是觉得这个问题很基础?我也这么觉 ...
- Redis的数据类型及相关操作命令
redis 基础内容 —— redis的数据类型及相关操作的Linux命令.所谓大厦千层基础承载,希望大家认真学习这一讲: 一.redis 的五大数据类型: 1.String(字符串): 2.List ...
随机推荐
- CUMTCTF'2020 已做wp
三天的比赛终于结束了,不知道有没有睡10个小时,感觉像中了魔一样,但也很享受这种感觉,除了没有能和我一起琢磨题目朋友.. 就最终结果而言还是有一些可惜,明明号称擅长web和misc反而是得分比例最小的 ...
- 实现select下拉框的无限加载(懒加载)
在实际开发中我们有时无法避免select下拉功能数据过大导致页面卡顿(如在我在一次迭代中有一个select项接口返回了5000多条数据).用户体验差!结合实际开发给出了3个解决方案: 方案1.sele ...
- P2947 Look Up S
题目描述: 约翰的N(1≤N≤10^5)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向右看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可 ...
- #ifdef _DEBUG/ #define new DEBUG_NEW/ #endif的作用
转载:https://blog.csdn.net/minghui_/article/details/80748142 转自:#ifdef _DEBUG #define new DEBUG_NEW #e ...
- VS2013 C++ 生成与调用DLL(动态链接库) 需要验证
转载:https://blog.csdn.net/s978697043/article/details/82429802 一.创建动态链接库(生成.dll .lib 两个文件) 文件→新建→项目 选择 ...
- Linux中的硬链接和软连接
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节点 ...
- JWT安全性第1部分,创建令牌
下载Demo Core 2.0 - 13.2 MB 下载Demo Core 1.2 - 14 MB 介绍 JWT (JSON Web Token)作为保护Web站点和REST服务的标准越来越流行.我将 ...
- springCloud微服务调用失败【CannotGetJdbcConnectionException: Failed to obtain JDBC Connection】
详情如下: 2019-07-28 10:56:18.229 ERROR 16212 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet ...
- docker19.03限制容器使用的内存资源
一,指定内存大小的参数: [root@localhost liuhongdi]# docker run -idt --name kafka2 --hostname kafka2 -m 200M --m ...
- Ubuntu18.04中安装virtualenv和virtualenvwrapper
1.安装virtualenv和virtualenvwrapper pip3 install virtualenv pip3 install virtualenvwrapper 2.创建目录用来存放虚拟 ...