专题五: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 ...
随机推荐
- 小白使用Hystrix
Hystrix是什么东西?百度一下: 没错,hystrix是豪猪的意思,作为SpringCloud微服务系统中保持服务稳定的重要组件,正如它的名字一样,它对整个系统起到了保护的作用. 在许多文章当中把 ...
- git 查看本地分支和切换本地分支的命令
查看本地分支,和当前所在的分支 git branch -vv git checkout developer 切换到developer分支
- Informatic 内些坑
1. 工作流调用工作流(可实现无规则时间点自由调度) pmcmd startworkflow -sv 集成服务名称 -d 配置域名称 -u Administrator -p Administrato ...
- linq 整理(前序)
前言 对linq进行整理,分为前序.中序和后序. 前序就是一些简单的概念和模拟. 中序的话就是深挖一些思想. 后序对其进行解刨. 正文 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# ...
- 题解:CF593D Happy Tree Party
题解:CF593D Happy Tree Party Description Bogdan has a birthday today and mom gave him a tree consistin ...
- c3算法
# L(G) = [G] + [O] # G = [O] # = GO # L[E] = EO # L[F] = [F] + [GO] # F = [GO] # = FGO # L[B] = [B] ...
- day18 Pyhton学习 内置函数最后七个
1. enumerate 枚举函数 for i in enumerate(['a','b','c'],1): print(i)#(1, 'a')(2, 'b')(3, 'c') goods_lst= ...
- MySQL数据库规范 (设计规范+设计规范+操作规范)
I 文档定义 1.1 编写目的 为了在软件生命周期内规范数据库相关的需求分析.设计.开发.测试.运维工作,便于不同团队之间的沟通协调,以及在相关规范上达成共识,提升相关环节的工作效率和系统的可维护性. ...
- Windows 上的苹果 mac Time Machine 时间机器免费替代品 FreeFileSync 操作指南
Windows 上的苹果 mac Time Machine 时间机器免费替代品 FreeFileSync 操作指南 前言:为什么不用 Windows 10 自带的备份还原呢?因为不稳定,不能很好的备份 ...
- 【矩阵乘优化DP】涂色游戏
题目大意 用 \(p\) 种颜色填 \(n\times m\) 的画板,要求任意相邻两列的颜色数都不少于 \(q\) ,求方案数. 数据范围 \(1\leq n\leq 100,1\leq m\leq ...