RedisRedis 集合 Set 操作 ( Set 集合数据 | 查询操作 | 查询所有值 | 随机获取值 | 获取交集并集差集 | 增操作 | 删操作 | 修改操作 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RedisRedis 集合 Set 操作 ( Set 集合数据 | 查询操作 | 查询所有值 | 随机获取值 | 获取交集并集差集 | 增操作 | 删操作 | 修改操作 )相关的知识,希望对你有一定的参考价值。
文章目录
一、Set 集合数据
Redis 的 Set 集合数据 , 与 List 列表功能相似 , 唯一的区别是 Set 集合中的元素 是 不允许重复的 ;
该 Set 集合 是一个 无序集合 , 存储 String 类型数据 ;
Set 集合底层是由 Hash 表实现 的 , 本质是 字典结构 , 其 添加 , 删除 , 查找 元素的 时间复杂度 是 O(1) ;
Java 的 HashSet 集合 内部由 HashMap 实现 , 所有的 值 Value 都指向同一个实例对象 ;
Redis 的 Set 集合 内部也是由 Hash 实现 , 所有的 值 Value 都指向同一个值 ;
二、查询操作
1、获取集合的所有值
执行
smembers key
命令 , 可以 获取 集合的 所有值 ;
代码示例 :
127.0.0.1:6379> sadd name Tom Jerry Jack
(integer) 3
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379>
2、判断键是否包含值
执行
sismember key value
命令 , 可以 判断 key 键中 是否存在 value 值 ;
代码示例 : 查询 Tom 存在 返回 1 , 查询 Bill 不存在 返回 0 ;
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> sismember name Tom
(integer) 1
127.0.0.1:6379> sismember name Bill
(integer) 0
127.0.0.1:6379>
3、获取集合元素个数
执行
scard key
命令 , 可以 获取集合元素个数 ;
代码示例 : 获取集合的元素个数为 3 ;
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> sismember name Tom
(integer) 1
127.0.0.1:6379> sismember name Bill
(integer) 0
127.0.0.1:6379> scard name
(integer) 3
127.0.0.1:6379>
4、随机获取若干元素
执行
srandmember key n
命令 , 可以 从 Set 集合中 随机获取 n 个元素
代码示例 :
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> srandmember name 2
1) "Jerry"
2) "Jack"
127.0.0.1:6379> srandmember name 2
1) "Jerry"
2) "Jack"
127.0.0.1:6379>
5、获取两个集合的交集
执行
sinter key1 key2
命令 , 可以 获取两个集合的交集 ;
代码示例 :
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> smembers age
1) "Tom"
2) "22"
3) "18"
4) "16"
127.0.0.1:6379> sinter name age
1) "Tom"
127.0.0.1:6379>
6、获取两个集合的并集
执行
sunion key1 key2
命令 , 可以 获取两个集合的并集 ;
代码示例 :
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> smembers age
1) "Tom"
2) "22"
3) "18"
4) "16"
127.0.0.1:6379> sinter name age
1) "Tom"
127.0.0.1:6379> sunion name age
1) "22"
2) "Tom"
3) "Jack"
4) "16"
5) "Jerry"
6) "18"
127.0.0.1:6379>
7、获取两个集合的差集
执行
sdiff key1 key2
命令 , 可以 获取两个集合的差集 , 在 key1 中存在 , key2 中不存在的 ;
代码示例 :
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> smembers age
1) "Tom"
2) "22"
3) "18"
4) "16"
127.0.0.1:6379> sinter name age
1) "Tom"
127.0.0.1:6379> sunion name age
1) "22"
2) "Tom"
3) "Jack"
4) "16"
5) "Jerry"
6) "18"
127.0.0.1:6379> sdiff name age
1) "Jerry"
2) "Jack"
127.0.0.1:6379>
三、增操作
1、插入值
执行
sadd key value1 value2 ...
命令 , 向 key 键存储多个值 ; 如果插入重复的元素 , 重复的元素会被忽略 , 其它没有重复的元素则成功插入 ;
代码示例 :
127.0.0.1:6379> sadd name Tom Jerry Jack
(integer) 3
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379>
四、删操作
1、删除元素
执行
srem key value1 value2
命令 , 可以 删除 集合 中的某些元素 ;
代码示例 : 删除集合中的 2 个元素 ;
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> srem name Tom Jerry
(integer) 2
127.0.0.1:6379> smembers name
1) "Jack"
127.0.0.1:6379>
2、删除列表指定个数的指定值
执行
spop key
命令 , 可以 随机从集合中获取某个值 , 该值会在集合中删除 ;
代码示例 :
127.0.0.1:6379> sadd name Tom Jerry Jack
(integer) 2
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> spop name
"Tom"
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Jack"
127.0.0.1:6379>
五、修改操作
1、Set 集合之间移动值
执行
smove key1 key2 value
命令 , 可以 将 key1 集合的 value 值 移动到 key2 集合 ;
代码示例 :
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Tom"
3) "Jack"
127.0.0.1:6379> smembers age
1) "16"
2) "18"
3) "22"
127.0.0.1:6379> smove name age Tom
(integer) 1
127.0.0.1:6379> smembers name
1) "Jerry"
2) "Jack"
127.0.0.1:6379> smembers age
1) "Tom"
2) "22"
3) "18"
4) "16"
127.0.0.1:6379>
以上是关于RedisRedis 集合 Set 操作 ( Set 集合数据 | 查询操作 | 查询所有值 | 随机获取值 | 获取交集并集差集 | 增操作 | 删操作 | 修改操作 )的主要内容,如果未能解决你的问题,请参考以下文章
RedisRedis 有序集合 Zset 操作 ( 简介 | 查询操作 | 增加操作 | 删除操作 | 修改操作 )
RedisRedis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )