Redis 的 Set 集合数据 , 与 List 列表功能相似 , 唯一的区别是 Set 集合中的元素 是 不允许重复的 ;
该 Set 集合 是一个 无序集合 , 存储 String 类型数据 ;
Set 集合底层是由 Hash 表实现 的 , 本质是 字典结构 , 其 添加 , 删除 , 查找 元素的 时间复杂度 是 O(1) ;
Java 的 HashSet 集合 内部由 HashMap 实现 , 所有的 值 Value 都指向同一个实例对象 ;
Redis 的 Set 集合 内部也是由 Hash 实现 , 所有的 值 Value 都指向同一个值 ;
执行
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>
执行
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>
执行
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>
执行
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>
执行
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>
执行
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>
执行
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>
执行
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>
执行
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>
执行
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>
执行
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>