专题五: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 ...
随机推荐
- Linux 虚拟机绑定静态 IP
环境介绍 Machine: NUC8i5BEK OS: macOS Catalina 10.15.6 VirtualBox: 6.1.12 r139181 (Qt5.6.3) CentOS: 8.2. ...
- 基于SpringBoot+SpringDataJpa后台管理
昨天朋友找我喝酒,说30岁了,比较焦虑,钱没赚到,整天被媳妇数落. 其实现在我们看到的不一定就事真实的情况,就算从高斯分布看,平平淡淡的人生才是大部分人的轨迹.当然抖音.知乎上的不能比,人均收入百万, ...
- 使用Azure Function玩转Serverless
Serverless&Azure Functions 通过无服务器计算,开发者无需管理基础结构,从而可以更快构建应用程序.通过无服务器应用程序,将由云服务提供商自动预配.缩放和管理运行代码所需 ...
- 基础篇:深入JMM内存模型解析volatile、synchronized的内存语义
目录 1 java内存模型,JMM(JAVA Memory Model) 2 CPU高速缓存.MESI协议 3 指令重排序和内存屏障指令 4 happen-before原则 5 synchronize ...
- js计算两个时间相差
.filter('useTime', function() { return function(val) { // if (/.(.mp4)$/gi.test(url)) { // return JS ...
- 第一次面试linux后台岗位
今天给大家分享前段时间面试linux后台的面试题目,我从里面挑了几道大家比较陌生的题目,而且要那种手写代码的题目,这方面肯定很多人在实际面试时最怕的题目! 1.请说出如何用tcp服务实现文件的断点续传 ...
- 2020武汉dotNET俱乐部分享交流活动正式启动
去年9月去上海参加了2019 .NET开发者峰会,感触良多.回来后便一直想着在武汉也组织一场这样的活动,推动一下武汉.NET的发展.由于疫情的影响,这个想法一直被搁浅,好在疫情总算是控制住了,所以我们 ...
- PHP的学习(提前学习了,业余爱好) (一)
一个函数一个函数地堆 strstr()函数 在本地测试的时候,代码与显示如下 1.代码: <?php echo strstr("I love Shanghai!123",&q ...
- 左叶子之和(sum-of-left-leaves)
LeetCode题目--左叶子之和(sum-of-left-leaves) 计算给定二叉树的所有左叶子之和. 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 ...
- spring cloud 实现基于Nacos权重的负载均衡
package com.water.step.service.user.nacos; import com.alibaba.nacos.api.exception.NacosException; im ...