【redis】5种数据类型—— set(集合)

Set(集合)特点:无序、无重复元素
    1、 插入一条set数据
        redis 127.0.0.1:6379> sadd  frieds:zhangsan "bingbing" "baby" "fengjie" "furong"  "ruhua" "xiaxia"
        (integer) 6
        redis 127.0.0.1:6379> scard  frieds:zhangsan   #获取Set中成员的数量
        (integer) 6
        redis 127.0.0.1:6379>
 
    2、获取一条set数据的所有members
        redis 127.0.0.1:6379> smembers  frieds:zhangsan
        1) "fengjie"
        2) "baby"
        3) "furong"
        4) "bingbing"
        5) "feifei"
        6) "ruhua"
 
    3、判断一个成员是否属于某条指定的set数据(true为1,false为0)
        redis 127.0.0.1:6379> sismember  frieds:zhangsan  "baby"      #如果是,则返回1
        (integer) 1
        redis 127.0.0.1:6379> sismember  frieds:zhangsan  "liuyifei"     #如果不是,则返回0
        (integer) 0
 
    4、求两个set数据的差集
        (1)求差集,返回数据列表。
            redis 127.0.0.1:6379> sdiff  frieds:zhangsan  friends:xiaotao
            1) "furong"
            2) "fengjie"
            3) "ruhua"
            4) "feifei"
 
        (2)求差集,并将结果存入到另一个set集合"zhangsan-xiaotao"中,返回数值。
            redis 127.0.0.1:6379> sdiffstore  zhangsan-xiaotao  frieds:zhangsan  friends:xiaotao
            (integer) 4
          查看差集结果
            redis 127.0.0.1:6379> smembers  zhangsan-xiaotao
            1) "furong"
            2) "fengjie"
            3) "ruhua"
            4) "feifei"
 
    5、 求交集
        (1)求交集,返回数据列表。
            redis 127.0.0.1:6379> sinter  frieds:zhangsan  friends:xiaotao
        (2)求交集,存入另一set集合,返回数值。
            redis 127.0.0.1:6379> sinterstore  zhangsan^xiaotao  frieds:zhangsan  friends:xiaotao
          查看交集结果
            redis 127.0.0.1:6379> smembers  zhangsan^xiaotao
 
    6.、求并集,用法同上
        (1)求并集,返回数据列表。
            redis 127.0.0.1:6379> sunion  frieds:zhangsan  friends:xiaotao
        (2)求并集,存入另一set集合,返回数值。
            redis 127.0.0.1:6379> sunionstore  zhangsan+xiaotao  frieds:zhangsan  friends:xiaotao
          查看差集结果
            redis 127.0.0.1:6379> smembers  zhangsan+xiaotao

与list区别
        redis中,set可看作为没有排序的字符集合,和list类型一样,是一个列表的功能,可以在该类型数值上执行添加、删除或判断某一元素是否存在等操作。但是与list不同的是:1、不会出现重复的数据,2、提供了可判断某个成员是否在一个set集合内的接口。3、在服务器端完成多个sets之间的聚合计算操作,如:unions、intersections。所以效率很快。

应用
        1、在微博应用中,将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。由于redis还为集合提供了求交集、并集、叉集等操作,所以非常方便的实现如共同关注、共同喜欢、二度好友等功能;在购物方面应用:所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,若想获取有哪些客户同时购买了这两种商品时,Set的叉集命令就可以充分发挥它的方便和效率的优势了。

        2、跟踪一些唯一性数据,如访问某一博客的唯一IP地址信息。对于此场景,仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。

具体实现
        set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,也是set能提供判断一个成员是否在集合内的原因。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值