RedisTemplate-Set 使用
添加
//set是无序不可重复的,这里模拟添加重复数据时,过滤掉
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
查询
根据key查询
Set set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............获取key中的值:[8号, 5号, 2号, 7号, 6号, 1号, 10号, 4号, 3号, 9号]
根据key查询集合长度
Long size = redisTemplate.opsForSet().size("set:key1");
//控制台输出结果:
//..............获取key对应集合的长度:10
根据key随机获取集合中的一个元素
Object obj = redisTemplate.opsForSet().randomMember("set:key1");
//控制台输出结果:
//..............随机获取key对应的集合中的元素-1:3号
obj = redisTemplate.opsForSet().randomMember("set:key1");
//控制台输出结果:
//..............随机获取key对应的集合中的元素-2:7号
根据key随机获取集合中的指定个数(不去重)
1、个数不受集合中已有数量限制
2、随机出来的数据有重复
3、个数为0时返回空
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
List list = redisTemplate.opsForSet().randomMembers("set:key1", 2);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素1:[3号, 7号]
list = redisTemplate.opsForSet().randomMembers("set:key1", 5);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素2:[5号, 7号, 1号, 7号, 2号]
list = redisTemplate.opsForSet().randomMembers("set:key1", 11);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素3:[4号, 3号, 4号, 4号, 5号, 6号, 10号, 8号, 8号, 5号, 4号]
list = redisTemplate.opsForSet().randomMembers("set:key1", 0);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素4:[]
根据key随机获取集合中的指定个数(去重)
去重后的个数受集合中的总个数限制
例如:总计10个数,指定11个,最多返回10个
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
set = redisTemplate.opsForSet().distinctRandomMembers("set:key1", 2);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素,并且去重-1:[1号, 6号]
set = redisTemplate.opsForSet().distinctRandomMembers("set:key1", 5);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素,并且去重-2:[10号, 1号, 7号, 9号, 8号]
set = redisTemplate.opsForSet().distinctRandomMembers("set:key1", 11);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素,并且去重-3:[8号, 9号, 2号, 1号, 4号, 5号, 3号, 7号, 6号, 10号]
set = redisTemplate.opsForSet().distinctRandomMembers("set:key1", 0);
//控制台输出结果:
//..............随机获取key对应集合中指定个数的元素,并且去重-4:[]
判断key是否包含某个值
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
Boolean member = redisTemplate.opsForSet().isMember("set:key1", "5号");
//控制台输出结果:
//..............判断key对应的集合中是否包含元素5号:true
member = redisTemplate.opsForSet().isMember("set:key1", "11号");
//控制台输出结果:
//..............判断key对应的集合中是否包含元素11号:false
删除
随机删除key中的一个元素
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
Set set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............当前集合中的值:[1号, 8号, 5号, 2号, 7号, 6号, 10号, 4号, 3号, 9号]
Object boj = redisTemplate.opsForSet().pop("set:key1");
//控制台输出结果:
//..............随机弹出key对应集合中的一个元素:9号
set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............当前集合中的值:[1号, 5号, 8号, 10号, 4号, 3号, 2号, 6号, 7号]
随机删除key中的count个元素
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
Set set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............当前集合中的值:[1号, 8号, 5号, 2号, 7号, 6号, 10号, 4号, 3号, 9号]
List list = redisTemplate.opsForSet().pop("set:key1", 1);
//控制台输出结果:
//..............随机移除key对应集合中的count个元素:[6号]
set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............删除后集合中的元素:[1号, 5号, 8号, 10号, 4号, 3号, 9号, 2号, 7号]
批量删除key中的指定元素
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
Set set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............当前集合中的值:[1号, 8号, 5号, 2号, 7号, 6号, 10号, 4号, 3号, 9号]
redisTemplate.opsForSet().remove("set:key1", "9号", "10号");
set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............批量移除key对应集合中指定的元素后,剩余的值:[2号, 7号, 6号, 1号, 5号, 8号, 4号, 3号]
集合处理-转移
key1 的元素转移到key2
key2不存在直接新增
v1不存在,转移失败返回false
redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
Set set = redisTemplate.opsForSet().members("set:key1");
//控制台输出结果:
//..............当前集合中的值:[1号, 8号, 5号, 2号, 7号, 6号, 10号, 4号, 3号, 9号]
Boolean move = redisTemplate.opsForSet().move("set:key1", "1号", "set:key2");
//输出结果............................将key1对应集合中的值v1,转移到key2集合中(重复):true
set = redisTemplate.opsForSet().members("set:key1");
//输出结果............................转移后key1的值:[8号, 5号, 2号, 7号, 6号, 10号, 4号, 3号, 9号]
set = redisTemplate.opsForSet().members("set:key2");
//输出结果..............转移后key2的值:[1号]
集合处理-交集
获取两个集合中的交集元素
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号", "4号");
Set set = redisTemplate.opsForSet().members("set:key1");
redisTemplate.opsForSet().add("set:key2", "2号","3号", "4号", "5号");
set = redisTemplate.opsForSet().members("set:key2");
set = redisTemplate.opsForSet().intersect("set:key1", "set:key2");
log.info("..............获取两个集合中的交集元素:" + set);
//输出结果..............获取两个集合中的交集元素:[4号, 3号, 2号]
获取多个key对应集合之间的交集
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号");
redisTemplate.opsForSet().add("set:key2", "2号","3号", "4号");
redisTemplate.opsForSet().add("set:key3", "3号","4号", "5号");
List list = new ArrayList();
list.add("set:key2");
list.add("set:key3");
Set set = redisTemplate.opsForSet().intersect("set:key1", list);
log.info("..............获取多个key对应集合之间的交集:" + set);
//输出结果..............获取多个key对应集合之间的交集:[3号]
获取key集合与另一个otherKey集合之间的交集元素,并将其放入指定的destKey集合中
没有获取到交集元素时,注意:若指定集合destKey存在,它的值将会被覆盖
//场景1:
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号");
redisTemplate.opsForSet().add("set:key2", "2号","3号", "4号");
redisTemplate.opsForSet().add("set:key3", "3号","4号", "5号");
Long aLong = redisTemplate.opsForSet().intersectAndStore("set:key1", "set:key2", "set:key3");
//输出结果..............aLong:2
Set set = redisTemplate.opsForSet().members("set:key3");
//输出结果..............key3的值:[3号, 2号]
//场景2:
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号");
redisTemplate.opsForSet().add("set:key2", "4号","5号", "6号");
Long aLong = redisTemplate.opsForSet().intersectAndStore("set:key1", "set:key2", "set:key3");
//输出结果..............aLong:0
Set set = redisTemplate.opsForSet().members("set:key3");
//输出结果..............key3的值:[]
获取key集合与其他otherKeys集合之间的交集元素,并将其放入指定的destKey集合中
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号");
redisTemplate.opsForSet().add("set:key2", "2号","3号", "4号");
redisTemplate.opsForSet().add("set:key3", "3号","4号", "5号");
//没有获取到交集元素时,注意:若指定集合destKey存在,它将会被删除
//获取key集合与其他otherKeys集合之间的交集元素,并将其放入指定的destKey集合中
List list = new ArrayList();
list.add("set:key1");
list.add("set:key2");
Long aLong = redisTemplate.opsForSet().intersectAndStore("set:key1", list, "set:key4");
//输出结果..............aLong:2
Set set = redisTemplate.opsForSet().members("set:key4");
//输出结果..............key4的值:[3号, 2号]
集合处理-差集
获取key与另一个otherKey所对应的集合之间的差值,并将结果存入指定的destKey中
destKey存在,它原本集合中的所有值会被清空并且替换为获取的差值
destKey不存在,直接新增
key与otherKey没有获取到差值,destKey如果存在,会被删除
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号", "4号");
redisTemplate.opsForSet().add("set:key2", "4号", "5号", "6号", "7号", "8号");
Long aLong = redisTemplate.opsForSet().differenceAndStore("set:key1","set:key2" , "set:key3");
//输出结果..............aLong:3
set = redisTemplate.opsForSet().members("set:key3");
//输出结果..............key3的值:[3号, 2号, 1号]
获取key与另外一些otherKeys集合之间的差值,并将结果存入指定的destKey中
destKey存在,它原本集合中的所有值会被清空并且替换为获取的差值
destKey不存在,直接新增
key与otherKeys没有获取到差值,destKey如果存在,会被删除
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号", "4号");
redisTemplate.opsForSet().add("set:key2", "2号","3号", "4号", "5号");
redisTemplate.opsForSet().add("set:key3", "3号", "4号", "5号", "6号");
List list = new ArrayList();
list.add("set:key2");
list.add("set:key3");
Long longValue = redisTemplate.opsForSet().differenceAndStore("set:key1", list, "set:key4");
//输出结果..............longValue:1
set = redisTemplate.opsForSet().members("set:key4");
log.info("..............key4的值:" + set);
//输出结果..............key4的值:[1号]
集合处理-并集
获取两个集合的并集,并且去重
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号");
redisTemplate.opsForSet().add("set:key2", "2号","3号", "4号");
Set set = redisTemplate.opsForSet().union("set:key1", "set:key2");
//输出结果..............获取两个集合的合集,并且去重:[2号, 1号, 3号, 4号]
获取多个集合的并集,并且去重
redisTemplate.opsForSet().add("set:key1", "1号", "2号", "3号");
redisTemplate.opsForSet().add("set:key2", "2号","3号", "4号");
redisTemplate.opsForSet().add("set:key3", "3号","4号", "5号");
List list = new ArrayList();
list.add("set:key2");
list.add("set:key3");
redisTemplate.opsForSet().unionAndStore("set:key1", list, "set:key4");
Set set = redisTemplate.opsForSet().members("set:key4");
//输出结果..............key4的值:[3号, 4号, 1号, 5号, 2号]
集合处理-对象操作
public class UserInfo {
private String phone;
private String username;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
List<UserInfo> userList = new ArrayList<>();
UserInfo user = new UserInfo();
user.setPhone("13111111111");
user.setUsername("赵云");
userList.add(user);
user = new UserInfo();
user.setPhone("13222222222");
user.setUsername("关羽");
userList.add(user);
redisTemplate.opsForSet().add("set:key1", JSON.toJSONString(userList), "bb", "cc");
Set set = redisTemplate.opsForSet().members("set:key1");
//输出结果..............list对象存储后的值:[cc, [{"phone":"13111111111","username":"赵云"},{"phone":"13222222222","username":"关羽"}], bb]