Redis Set
Set是Redis中的数据类型,与Redis的Zset有所区分:
Set中文描述为“无序集合” 特点是:
- 集合中的元素是无序的
- 集合中的元素不能重复,是唯一的
与ZSet相比缺少了分数(point),所以无法排序。
新增数据
使用add()
方法批量增加数据。
redisTemplate.opsForSet().add("ranks", personalRecord1, personalRecord2);
既然是操作 Set,那么方法自然是 opsForSet()
,每种数据类型都有自己的操作方法。
add()
方法第一个参数是 Key;后面就是 Java 实例对象。
删除数据操作
使用 remove()
方法删除一个数据元素:
redisTemplate.opsForSet().remove("ranks", personalRecord);
remove()
方法第一个参数是 Key;第二个参数是待删除的数据对象。删除与添加是对应的,添加的是自定义对象,删除的时候也要传入相同的自定义对象。(先查询再删除)
千万不要理解为,添加的是 personalRecord 实例对象,然后用 personalRecordId 删除。不能跟 MySQL 混淆了。
修改数据操作
不存在修改这个说法。或者说,修改等同于:先删除旧数据,再加入新数据
基本查询
查询方法不是常见的 getXX 而是 members()
:
Set<PersonalRecord> datas = redisTemplate.opsForSet().members("ranks");
通过 Key 查询集合中的所有数据元素。返回值的泛型,就是新增数据的类型,往 Set 缓存里放了什么数据,拿出来就是什么数据。
多集合操作
使用 Set 一般来说并不是用于数据对象的缓存,因为无序,实际上操作很不方便,不能像列表一样精确查询。
使用 Set 多用于集合间的操作。所以,推荐 Set 存储简单的数据,比如 Java 的字符串或数字,而不要在 Set 中存入复杂的 Java 自定义对象。
比如只存入个人战绩的 id 值而不是整个对象。
多集合的操作主要有:
求并集
给定两个集合A,B,把他们所有的元素合并在一起组成的集合,叫做集合A与集合B的并集。大家应该学习过并集的概念。
union()
方法用于求多个集合的并集:
List<String> keys = new ArrayList<>();
keys.add("ranks1");
keys.add("ranks2");
keys.add("ranks3");
Set<Long> unionDatas = redisTemplate.opsForSet().union(keys);
求交集
集合论中,设A,B是两个集合,由所有属于集合A且属于集合B的元素所组成的集合,叫做集合A与集合B的交集
intersect()
方法用于求多个集合的交集:
List<String> keys = new ArrayList<>();
keys.add("ranks1");
keys.add("ranks2");
keys.add("ranks3");
Set<Long> interDatas = redisTemplate.opsForSet().intersect(keys);
intersect()
方法返回给定所有给定集合的交集。
不存在的集合 key 被视为空集。当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
求差集
设A,B是两个集合,以属于A而不属于B的元素为元素的集合成为A与B的差集
difference()
方法用于求一个集合与其它集合的差集:
List<String> otherkeys = new ArrayList<>();
otherkeys.add("ranks2");
otherkeys.add("ranks3");
Set<Long> diffDatas = redisTemplate.opsForSet().difference("ranks1", otherkeys);
difference()
方法返回第一个集合与其他集合之间的差异,也可以认为说第一个集合中独有的元素。不存在的集合 key 将视为空集。