redis数据结构之Set

本文介绍了Redis中的Set数据结构,它是一个无序且不允许重复元素的集合。讨论了包括`sadd`、`smembers`、`srem`等在内的多种Set操作命令,并提到了Jedis客户端如何进行相应操作。Set的重要特性在于支持高效的集合运算,如并集、交集和差集,这些操作都在服务器端完成,提升效率并减少网络IO。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis数据结构之Set

概述

在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间是常量时间。Set可包含的最大元素数是4294967295。
和List类型不同的是,Set集合中不允许出现重复的元素。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销

Set相关功能(Redis客户端命令)

1)sadd key value1、value2…:

向set中添加数据,如果该key的值已有则不会重复添加

2)smembers key:

获取set中所有的成员

3)scard key:

获取set中成员的数量

4)sismember key member:

判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或者该key本身就不存在

5)srem key member1、member2…:

删除一个或者多个成员,如果成员不存在则忽略

6)srandmember key:

随机返回set中的一个成员

7)sdiff first-key key1 key2…:

返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集。不存在的集合 key 将视为空集。

8)sdiffstore destination key1 key2:

将key1、key2相差的成员存储在destination上

9)sinter key[key1,key2…]:

返回交集。

10)sinterstore destination key1 key2:

将返回的交集存储在destination上

11)sunion key1、key2:

返回并集。

12)sunionstore destination key1 key2:

将返回的并集存储在destination上

13)spop key

随机弹出一个成员

14)smove source desition member

移动一个成员到指定的set中

Set相关功能(Jedis客户端API)

Redis java 客户端jedis

java测试代码如下,(maven项目的创建与pom.xml配置,还有jedis对象的创建都在redis数据结构之String

/**
     *Set类型数据的API测试
     */
    @Test
    public void testSet(){
        //创建一条set类型的数据并插入一些members
        Long sadd = jedis.sadd("jedis-set-key-01", "java", "c", "c++", "Python", "js");
        System.out.println("创建了一个set类型的数据,并且插入"+sadd+"个成员");

        //获取一条set类型的数据的成员
        Set<String> smembers = jedis.smembers("jedis-set-key-01");
        System.out.println("获取到的成员为:");
        for(String m:smembers){
            System.out.println(m);
        }

        jedis.sadd("jedis-set-key-02", "c#", "c", ",net", "Python", "ruby");

        //求两个集合的差集
        Set<String> set12 = jedis.sdiff("jedis-set-key-01", "jedis-set-key-02");
        System.out.println("set01减去set02的差集结果为:");

        for(String s:set12){
            System.out.println(s);
        }

        Set<String> set21 = jedis.sdiff("jedis-set-key-02", "jedis-set-key-01");
        System.out.println("set02减去set01的差集结果为:");
        for (String s :set21){
            System.out.println(s);
        }

        //求两个集合的并集
        Set<String> sunion12 = jedis.sunion("jedis-set-key-01", "jedis-set-key-02");
        System.out.println("set01和set02的并集结果为:");
        for(String s:sunion12){
            System.out.println(s);
        }

        //求两个集合的交集

        Set<String> sinter = jedis.sinter("jedis-set-key-01", "jedis-set-key-02");
        System.out.println("set01和set02的交集结果为:");
        for (String s:sinter){
            System.out.println(s);
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值