【攻克Redis】集合类型

集合

​ 集合不允许有重复元素,并且结合中的元素是无序的,不能通过索引下标直接获取,Redis支持集合内的增删改查,支持多个集合取交集、并集、差集

命令

集合内操作
#添加元素,返回结果为添加成功的个数
sadd key element [element ...]
#删除元素,返回结果为删除成功的个数
srem key element [element ...]
#计算元素个数,使用redis内部变量,不会遍历集合所有元素,时间复杂度为O(1)
scard key
#判断元素是否在集合中,存在返回1,反之返回0
sismember key element
#随机从集合返回指定个数元素,[count]是可选参数,如果不写默认为1,返回的元素不会真实的从集合中删除
srandmember key [count]
#从集合随机弹出元素,真实的从集合中移除元素
spop key
#获取所有元素(无序)
smembers key
集合间的操作

前提:

  • 有两个集合:是user:1:follow和user:2:follow

  • 集合添加元素,如下:

    127.0.0.1:6379> sadd user:1:follow it music his sports 
    (integer) 4 
    127.0.0.1:6379> sadd user:2:follow it news ent sports 
    (integer) 4

实践:

#求两个集合的交集
sinter user:1:follow user:2:follow
#求多个集合的并集
suinon key [key ...]
#求多个集合的差集
sdiff key [key ...]

这里写图片描述

#将交集、并集、差集的结果保存
sinterstore destination key [key ...] 
suionstore  destination key [key ...] 
sdiffstore  destination key [key ...]

举例说明:

127.0.0.1:6379> sinterstore user:1_2:inter user:1:follow user:2:follow (integer) 2 
127.0.0.1:6379> type user:1_2:inter 
set 
127.0.0.1:6379> smembers user:1_2:inter 
1) "it" 
2) "sports"

这里写图片描述

内部编码

intset(整数集合):当集合中的元素都是整数且元素个数小于set-maxintset-entries配置(默认512个)
hashtable(哈希表):当集合类型无法满足intset的条件时,Redis会使 用hashtable作为集合的内部实现

使用场景

  1. 添加用户赞数
  2. 取消用户赞数
  3. 展示获取赞数最多的十个用户
  4. 展示用户信息以及用户分数
命令 描述
zadd user:ranking:2016_03_15 mike count mike用户添加指定赞数
zrem user:ranking:2016_03_15 mike 删除mike用户赞数
zrevrangebyrank user:ranking:2016_03_15 0 9 展示获取赞数最多的十个用户
zscore user:ranking:2016_03_15 mike 用户分数
zrank user:ranking:2016_03_15 mike 用户排名

猜你喜欢

转载自blog.csdn.net/zlt995768025/article/details/81872482