7、Redis五大数据类型---集合(Set)
一、集合(Set)简介
- Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
- Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
- 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
二、常用命令
1、sadd sadd <key><value1><value2> 将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> sadd myset a b c d #往myset集合了添加值
(integer) 4 #返回4
127.0.0.1:6379> sadd myset a b c d #往myset集合了添加重复值
(integer) 0 #返回0
127.0.0.1:6379>
2、smembers smembers <key>取出该集合的所有值。
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> smembers myset #取出myset集合中所有的值
1) "c"
2) "d"
3) "b"
4) "a"
127.0.0.1:6379>
3、sismember sismember <key><value>判断集合是否为含有该值,有1,没有0
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> smembers myset #查看当前集合中所有的值
1) "c"
2) "d"
3) "b"
4) "a"
127.0.0.1:6379> sismember myset d #判断当前集合是否存在d,存在返回1
(integer) 1
127.0.0.1:6379> sismember myset h #判断当前集合是否存在h,不存在返回0
(integer) 0
127.0.0.1:6379>
4、scard scard <key>返回该集合的元素个数。
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> smembers myset #查看当前集合元素个数
1) "c"
2) "d"
3) "b"
4) "a"
127.0.0.1:6379> scard myset
(integer) 4
5、srem srem <key><value1><value2> .... 删除集合中的某个元素。
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> smembers myset
1) "c"
2) "d"
3) "b"
4) "a"
127.0.0.1:6379> srem myset b #移除集合中存在的值
(integer) 1
127.0.0.1:6379> srem myset h #移除集合中不存在的值。返回0
(integer) 0
127.0.0.1:6379>
6、spop spop <key> 随机从该集合中吐出一个值。
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> smembers myset
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> spop myset 1 #在当前集合随机弹出一个值
1) "c"
127.0.0.1:6379> spop myset 2 #再当前集合随机弹出两个值
1) "a"
2) "b"
127.0.0.1:6379> smembers myset #查看当前集合剩余的值
1) "d"
7、srandmember srandmember <key><n>随机从该集合中取出n个值。不会从集合中删除 。
127.0.0.1:6379> keys *
1) "myset"
127.0.0.1:6379> smembers myset
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> srandmember myset 2 #随机在集合中去取出2个值
1) "b"
2) "a"
127.0.0.1:6379> smembers myset #查看值是否被删除
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379>
8、smove smove <source> <destination> value把集合中一个值从一个集合移动到另一个集合
127.0.0.1:6379> sadd source a b c d #在source里添加值
(integer) 4
127.0.0.1:6379> sadd destination 1 2 3 4 #在目标destination添加值
(integer) 4
127.0.0.1:6379> smembers source
1) "d"
2) "c"
3) "b"
4) "a"
127.0.0.1:6379> smembers destination
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> smove source destination a #将source里面的a移动到destination集合里
(integer) 1
127.0.0.1:6379> smembers source #查看source集合
1) "d"
2) "c"
3) "b"
127.0.0.1:6379> smembers destination #查看destination集合里的元素
1) "4"
2) "3"
3) "2"
4) "1"
5) "a"
127.0.0.1:6379>
9、sinter sinter <key1><key2>返回两个集合的交集元素。
127.0.0.1:6379> sadd k1 1 2 3 a b c
(integer) 6
127.0.0.1:6379> sadd k2 a b c 4 5 6
(integer) 6
127.0.0.1:6379> smembers k1
1) "a"
2) "1"
3) "3"
4) "c"
5) "b"
6) "2"
127.0.0.1:6379> smembers k2
1) "4"
2) "b"
3) "a"
4) "6"
5) "c"
6) "5"
127.0.0.1:6379> sinter k1 k2 #返回两个集合公共的元素
1) "a"
2) "c"
3) "b"
10、sunion sunion <key1><key2>返回两个集合的并集元素。
127.0.0.1:6379> sadd k1 1 2 3 a b c
(integer) 6
127.0.0.1:6379> sadd k2 a b c 4 5 6
(integer) 6
127.0.0.1:6379> smembers k1
1) "a"
2) "1"
3) "3"
4) "c"
5) "b"
6) "2"
127.0.0.1:6379> smembers k2
1) "4"
2) "b"
3) "a"
4) "6"
5) "c"
6) "5"
127.0.0.1:6379> sunion k1 k2 #k1与k2的并集
1) "c"
2) "4"
3) "b"
4) "2"
5) "a"
6) "1"
7) "6"
8) "5"
9) "3"
11、 sdiff sdiff <key1><key2>返回两个集合的差集元素(key1中的,不包含key2中的)
127.0.0.1:6379> sadd k1 1 2 3 a b c
(integer) 6
127.0.0.1:6379> sadd k2 a b c 4 5 6
(integer) 6
127.0.0.1:6379> smembers k1
1) "a"
2) "1"
3) "3"
4) "c"
5) "b"
6) "2"
127.0.0.1:6379> smembers k2
1) "4"
2) "b"
3) "a"
4) "6"
5) "c"
6) "5"
127.0.0.1:6379> sdiff k1 k2 #返回k1集合与k2集合的差集(用k1集合减去k1与k2的交集)
1) "1"
2) "2"
3) "3"
三、总结
- Redis 的集合相当于 Java 语言里面的 HashSet,它内部的键值对是无序的唯一的。它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL。
- 当集合中最后一个元素移除之后,数据结构自动删除,内存被回收。set 结构可以用来存储活动中奖的用户 ID,因为有去重功能,可以保证同一个用户不会中奖两次。
- set有交集、并集和补集,可以实现好友像好友推荐功能。
- list集合不具有唯一性,set是不重复的,保证唯一性。
7、Redis五大数据类型---集合(Set)的更多相关文章
- Redis五大数据类型的常用操作
在上一篇博文<centos安装redis>中,已经详细介绍了如何在centos上安装redis,今天主要介绍下Redis五大数据类型及其五大数据类型的相关操作. Redis支持五种数据类型 ...
- 一文搞定Redis五大数据类型及应用场景
本文学习知识点 redis五大数据类型数据类型:string.hash.list.set.sorted_set 五大类型各自的应用场景 @TOC 1. string类型 1-1 string类型数据的 ...
- redis 五大数据类型使用
redis 五大数据类型使用 字符串str 单个值 127.0.0.1:6379> set name pp # 设置键值[O(1)] OK 127.0.0.1:6379> setex na ...
- 《Redis入门指南(第二版)》读书思考总结之Redis五大数据类型
热身:系统级命令 1. 获得符合规则的键名列表 KEYS pattern 模式匹配 产品的缓存:product+"."+....; => keys product* 订单的 ...
- Redis五大数据类型详解
关于Redis的五大数据类型,它们分别为:String.List.Hash.Set.SortSet.本文将会从它的底层数据结构.常用操作命令.一些特点和实际应用这几个方面进行解析.对于数据结构的解析, ...
- redis五大数据类型以及常用操作命令
Redis的五大数据类型 String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value.string类型是二进制安全的.意 ...
- 四:Redis五大数据类型
Redis的五大数据类型 1.string(字符串) string是Redis最基本的类型,你可以理解成与menmcached一模一样的类型,一个key对应一个value string类型是二进制安全 ...
- 细谈Redis五大数据类型
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上一篇文章有提到,Redis中使用最频繁的有5种数据类型:String.List.Hash.Set.SortS ...
- Redis五大数据类型以及操作
目录: 一.redis的两种链接方式 二.redis的字符串操作(string) 三.redis的列表操作(list) 四.redis的散列表操作(类似于字典里面嵌套字典) 五.redis的集合操作( ...
随机推荐
- SpringCloud升级之路2020.0.x版-34.验证重试配置正确性(3)
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们继续上一节针对我们的重试进行测试 验证针对可重试的方法响应超时异常重试正确 我们可以通 ...
- Django笔记&教程 总目录
本篇博客只有目录,正文内容在目录章节链接的博客里 除目录本身外,没有链接的章节,说明内容还没开始编辑 本项目笔记仍在不断创作中,还有些内容会根据自身所学不断更新完善 本项目主要为markdwon文档, ...
- Dapr-状态管理
前言: 前一篇对Dapr的服务调用方式进行了解,本篇继续对状态管理进行了解. 一.状态管理-解决的问题 在分布式应用程序中跟踪状态存在一下问题: 应用程序可能需要不同类型的数据存储. 访问和更新数据时 ...
- [bzoj2400]Optimal Marks
首先肯定每一位单独考虑,对于每一位,源点连向该位点权为0的节点inf的边,点权为1的节点连向汇点inf的边,每一条无向边拆成两条流量为1的有向边,跑最小割. 考虑一组割,一定将原图划分成源点和汇点两部 ...
- [loj3364]植物比较
结论:设$b_{i}$满足该限制,则$a_{i}$合法当且仅当$\forall i\ne j,a_{i}\ne a_{j}$且$\forall |i-j|<k,[a_{i}<a_{j}]= ...
- 面向对象中static的理解(2) (单例模式)
作用:只产生一个对象 1 class Yoshi { 2 public: 3 //外界只能通过这种方式调用这一个对象,返回必须是引用 4 static Yoshi& getInstance() ...
- HarmonyOS 3.0.0开发者预览版全新发布
2021年10月22日在华为开发者大会HDC.Together 2021 主题演讲上,我们发布了HarmonyOS 3.0.0开发者预览版,主要内容包括:Harmony设计系统.ArkUI 3.0.A ...
- 【Lua】实现代码执行覆盖率统计工具
一.如何评估测试过程的测试情况? 很多时候完成功能测试后就会发布上线,甚至交叉和回归都没有足够的时间去执行,然后通过线上的补丁对遗漏的问题进行修复.如果可以在发布前了解本次测试过程所覆盖代码执行的比例 ...
- springboot 配置多数据源实例代码(分包方式)
目录 1.数据库 2.pom与yml 2.1.pom中的依赖部分 2.2.yml数据库配置部分 3.数据源配置类 DataSourceConfig 3.1.DataSourceConfig1.java ...
- 洛谷 P7163 - [COCI2020-2021#2] Svjetlo(树形 dp)
洛谷题面传送门 神仙级别的树形 dp. u1s1 这种代码很短但巨难理解的题简直是我的梦魇 首先这种题目一看就非常可以 DP 的样子,但直接一维状态的 DP 显然无法表示所有情况.注意到对于这类统计一 ...