Redis数据类型-Set-基本使用

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java&ly

感谢支持,请小编喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值