0
点赞
收藏
分享

微信扫一扫

Redis数据模型——Set、SortedSet集合


01 Redis数据模型

Redis数据模型——Set、SortedSet集合_redis

02 Set集合

  • 无序的、去重的
  • 元素是字符串类型
  • 最多包含2^32-1元素

2.1 增加一个元素

SADD key member [member ...]
# 如果元素已经存在,则自动忽略

# 举例

2.2 移除一个元素

# 元素不存在,自动忽略
SREM key member [member ...]

# 举例

2.3 返回集合包含的所有元素

# 如果集合元素过多,例如百万个,需要遍历,可能会造成服务器阻塞,生产环境应避免使用
SMEMBERS key

# 检查给定元素是否存在于集合中
SISMEMBER key member

2.4 随机返回集合中指定个数的

# 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合  最多返回整个集合 count>=0
# 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值 count < 0 长度为count绝对值,元素可能重复
# 如果 count 为 0,返回空
# 如果 count 不指定,随机返回一个元素
SRANDMEMBER key [count]

# 举例
SADD friend "peter" "jack" "tom" "john" "may" "ben"

2.5 返回集合中元素的个数

# 键的结果会保存信息,集合长度就记录在里面,所以不需要遍历
SCARD key

# 随机从集合中移除并返回这个被移除的元素
SPOP key
# 把元素从源集合移动到目标集合
SMOVE source

2.6 差集

SDIFF key [key ...],从第一个key的集合中去除其他集合和自己的交集部分
SDIFFSTORE destination key [key ...],将差集结果存储在目标key中

@# 举例

Redis数据模型——Set、SortedSet集合_并集_02

2.7 交集

[key ...],取所有集合交集部分
SINTERSTORE destination key [key ...],将交集结果存储在目标key中

# 举例

Redis数据模型——Set、SortedSet集合_redis_03

2.8 并集

SUNION key [key ...],取所有集合并集
SUNIONSTORE destination key [key ...],将并集结果存储在目标key中


# 举例

Redis数据模型——Set、SortedSet集合_结果集_04

03 SortedSet有序集合

  • 类似Set集合
  • 有序的、去重的
  • 元素是字符串类型
  • 每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同
  • 最多包含2^32-1元素

3.1 增加一个或多个元素

# 如果元素已经存在,则使用新的score
ZADD key score member [score member ...]

# 举例

Redis数据模型——Set、SortedSet集合_结果集_05

3.2 移除一个或者多个元素

# 元素不存在,自动忽略
ZREM key member [member ...]

# 举例

Redis数据模型——Set、SortedSet集合_redis_06

3.3 显示分值

ZSCORE key member
# 举例

3.4 增加或者减少分值

# increment为负数就是减少
ZINCRBY key increment member

#举例

3.5 返回元素的排名(索引)

ZRANK key member

#举例

Redis数据模型——Set、SortedSet集合_结果集_07

3.6 返回元素的逆序排名

ZREVRANK key member

#举例

Redis数据模型——Set、SortedSet集合_结果集_08

3.7 返回指定索引区间元素

# 如果score相同,则按照字典序lexicographical order 排列
# 默认按照score从小到大,如果需要score从大到小排列,使用
ZRANGE key start stop [WITHSCORES]
ZREVRANGE

#举例

Redis数据模型——Set、SortedSet集合_redis_09

3.8 返回指定分值区间元素

# 返回score默认属于[min,max]之间,元素按照score升序排列,score相同字典序 
# LIMIT中offset代表跳过多少个元素,count是返回几个。类似于Mysql
# 使用小括号,修改区间为开区间,例如(5、(10、5)
# -inf和+inf表示负无穷和正无穷
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

# 举例
ZRANGEBYSCORE fruits 4.0 7.0
ZRANGEBYSCORE fruits (4 7
ZRANGEBYSCORE fruits -inf +inf

Redis数据模型——Set、SortedSet集合_结果集_10

# 返回指定分值区间元素
# 返回score默认属于[min,max]之间,元素按照score降序排列,score相同字典降序
# LIMIT中offset代表跳过多少个元素,count是返回几个。类似于Mysql
# 使用小括号,修改区间为开区间,例如(5、(10、5)
# -inf和+inf表示负无穷和正无穷
ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

# 举例
ZREVRANGEBYSCORE fruits 7.0 4.0
ZRANGEBYSCORE fruits 7 (4
ZRANGEBYSCORE fruits +inf -inf

Redis数据模型——Set、SortedSet集合_redis_11

3.9 移除指定排名范围的元素

ZREMRANGEBYRANK key start stop

# 举例

Redis数据模型——Set、SortedSet集合_redis_12

3.10 移除指定分值范围的元素

ZREMRANGEBYSCORE key min max

# 举例

Redis数据模型——Set、SortedSet集合_结果集_13

3.11 返回集合中元素个数

ZCARD key

# 返回指定分值范围中元素的个数
ZCOUNT key min max
ZCOUNT fruits 4 7
ZCOUNT fruits (4 7

Redis数据模型——Set、SortedSet集合_并集_14

3.12 并集

# numkeys指定key的数量,必须
# WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
# AGGREGATE选项,指定并集结果的聚合方式
# SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score值
# MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值
# MAX:将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

# 案例

3.13 交集

# numkeys指定key的数量,必须
# WEIGHTS选项,与前面设定的key对应,对应key中每一个score都要乘以这个权重
# AGGREGATE选项,指定并集结果的聚合方式
# SUM:将所有集合中某一个元素的score值之和作为结果集中该成员的score值
# MIN:将所有集合中某一个元素的score值中最小值作为结果集中该成员的score值
# MAX:将所有集合中某一个元素的score值中最大值作为结果集中该成员的score值
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]

3.14 新浪微博反页

# 新闻网站、博客、论坛、搜索引擎,页面列表条目多,都需要分页
blog这个key中使用时间戳作为score
ZADD blog 1407000000 '今天天气不错'
ZADD blog 1450000000 '今天我们学习Redis'
ZADD blog 1560000000 '几个Redis使用示例'

3.15 京东图书畅销榜

'java' 1500 'Redis' 2000 'hadoop'
ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'hadoop'
ZADD bookboard-003 1620 'java' 1510 'Redis' 3000 'hadoop'
ZUNIONSTORE bookboard-001:003 3 bookboard-001 bookboard-002 bookboard-003


# 并集,使用max
# 注意:参与并集运算的集合较多,会造成Redis服务器阻塞,因此最好放在空闲时间或者备用服务器上进行计算
ZADD bookboard-001 1000 'java' 1500 'Redis' 2000 'haoop'
ZADD bookboard-002 1020 'java' 1500 'Redis' 2100 'haoop'
ZADD bookboard-003 1620 'java' 1510 'Redis' 3000 'haoop'


举报

相关推荐

0 条评论