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 集合数据 | 查询操作 | 查询所有值 | 随机获取值 | 获取交集并集差集 | 增操作 | 删操作 | 修改操作 )的主要内容,如果未能解决你的问题,请参考以下文章

python基础

69期-Java SE-016_集合-2-001-002

Redis基础

RedisRedis 有序集合 Zset 操作 ( 简介 | 查询操作 | 增加操作 | 删除操作 | 修改操作 )

RedisRedis简述

RedisRedis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )