【DB系列】Redis之Set数据结构使用姿势

文章目录
  1. I. 基本使用
    1. 1. 新增元素
    2. 2. 删除元素
    3. 3. 判断是否存在
    4. 4. 获取所有的value
    5. 5. 集合运算
  2. II. 其他
    1. 0. 项目
    2. 1. 一灰灰Blog
    3. 2. 声明
    4. 3. 扫描关注

Redis的五大数据结构,前面讲述了String和List,Hash的使用姿势,接下来就是Set集合,与list最大的区别就是里面不允许存在重复的数据

I. 基本使用

在开始之前,序列化的指定需要额外处理,上一篇已经提及,相关内容可以参考:

1. 新增元素

新增元素时,可以根据返回值来判断是否添加成功, 如下面的单个插入时,如果集合中之前就已经有数据了,那么返回0,否则返回1

1
2
3
4
5
6
7
8
9
10

/**
* 新增一个 sadd
*
* @param key
* @param value
*/
public void add(String key, String value) {
redisTemplate.opsForSet().add(key, value);
}

2. 删除元素

因为list是有序的,所以在list的删除需要指定位置;而set则不需要

1
2
3
4
5
6
7
8
9
/**
* 删除集合中的值 srem
*
* @param key
* @param value
*/
public void remove(String key, String value) {
redisTemplate.opsForSet().remove(key, value);
}

3. 判断是否存在

set一个最大的应用场景就是判断某个元素是否有了,从而决定怎么执行后续的操作, 用的是 isMember方法,来判断集合中是否存在某个value

1
2
3
4
5
6
7
8
9
/**
* 判断是否包含 sismember
*
* @param key
* @param value
*/
public void contains(String key, String value) {
redisTemplate.opsForSet().isMember(key, value);
}

4. 获取所有的value

set无序,因此像list一样获取某个范围的数据,不太容易,更常见的方式就是全部获取出来

1
2
3
4
5
6
7
8
9
/**
* 获取集合中所有的值 smembers
*
* @param key
* @return
*/
public Set<String> values(String key) {
return redisTemplate.opsForSet().members(key);
}

5. 集合运算

set还提供了另外几个高级一点的功能,就是集合的运算,如求并集,交集等操作,虽然在我有限的业务应用中,并没有使用到这些高级功能,下面依然个给出使用的姿势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 返回多个集合的并集 sunion
*
* @param key1
* @param key2
* @return
*/
public Set<String> union(String key1, String key2) {
return redisTemplate.opsForSet().union(key1, key2);
}

/**
* 返回多个集合的交集 sinter
*
* @param key1
* @param key2
* @return
*/
public Set<String> intersect(String key1, String key2) {
return redisTemplate.opsForSet().intersect(key1, key2);
}

/**
* 返回集合key1中存在,但是key2中不存在的数据集合 sdiff
*
* @param key1
* @param key2
* @return
*/
public Set<String> diff(String key1, String key2) {
return redisTemplate.opsForSet().difference(key1, key2);
}

II. 其他

0. 项目

1. 一灰灰Blog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals


打赏 如果觉得我的文章对您有帮助,请随意打赏。
分享到