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


    RedisTemplate-Set 使用

    添加

    //set是无序不可重复的,这里模拟添加重复数据时,过滤掉
    redisTemplate.opsForSet().add("set:key1", "1号", "1号", "2号", "3号", "4号", "5号", "6号", "7号", "8号", "9号", "10号");
    
    • 1
    • 2

    查询

    根据key查询

    Set set = redisTemplate.opsForSet().members("set:key1");
    //控制台输出结果:
    //..............获取key中的值:[8号, 5号, 2号, 7号, 6号, 1号, 10号, 4号, 3号, 9号]
    
    • 1
    • 2
    • 3

    根据key查询集合长度

    Long size = redisTemplate.opsForSet().size("set:key1");
    //控制台输出结果:
    //..............获取key对应集合的长度:10
    
    • 1
    • 2
    • 3

    根据key随机获取集合中的一个元素

    Object obj = redisTemplate.opsForSet().randomMember("set:key1");
    //控制台输出结果:
    //..............随机获取key对应的集合中的元素-1:3号
    obj = redisTemplate.opsForSet().randomMember("set:key1");
    //控制台输出结果:
    //..............随机获取key对应的集合中的元素-2:7号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    根据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:[]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    根据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:[]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    判断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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    删除

    随机删除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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    随机删除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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    批量删除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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    集合处理-转移

    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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    集合处理-交集

    获取两个集合中的交集元素

    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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    获取多个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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    获取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的值:[]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    获取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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    集合处理-差集

    获取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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    获取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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    集合处理-并集

    获取两个集合的并集,并且去重

    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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    获取多个集合的并集,并且去重

    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号]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    集合处理-对象操作

    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]
    
    • 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
    • 33
    • 34
  • 相关阅读:
    Spark转换、执行、shuffle等常用算子归类
    java springboot儿童医药评价系统网站python
    c盘中temp可以删除吗?appdata\local\temp可以删除吗?
    动态的创建对象去调用方法和属性
    ASEMI快恢复二极管RS1M、US1M和US1G能相互代换吗
    RTC-实时音视频通信技术介绍与应用
    linux部署运维3——centos7.9离线安装部署配置涛思taos2.6时序数据库TDengine以及java项目链接问题处理(二)
    用 Redis 做一个可靠的延迟队列
    HTML期末学生大作业-节日网页作业html+css+javascript
    Raft 共识算法
  • 原文地址:https://blog.csdn.net/u011077966/article/details/126703409