01 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中
@# 举例
2.7 交集
[key ...],取所有集合交集部分
SINTERSTORE destination key [key ...],将交集结果存储在目标key中
# 举例
2.8 并集
SUNION key [key ...],取所有集合并集
SUNIONSTORE destination key [key ...],将并集结果存储在目标key中
# 举例
03 SortedSet有序集合
- 类似Set集合
- 有序的、去重的
- 元素是字符串类型
- 每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同
- 最多包含2^32-1元素
3.1 增加一个或多个元素
# 如果元素已经存在,则使用新的score
ZADD key score member [score member ...]
# 举例
3.2 移除一个或者多个元素
# 元素不存在,自动忽略
ZREM key member [member ...]
# 举例
3.3 显示分值
ZSCORE key member
# 举例
3.4 增加或者减少分值
# increment为负数就是减少
ZINCRBY key increment member
#举例
3.5 返回元素的排名(索引)
ZRANK key member
#举例
3.6 返回元素的逆序排名
ZREVRANK key member
#举例
3.7 返回指定索引区间元素
# 如果score相同,则按照字典序lexicographical order 排列
# 默认按照score从小到大,如果需要score从大到小排列,使用
ZRANGE key start stop [WITHSCORES]
ZREVRANGE
#举例
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
# 返回指定分值区间元素
# 返回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
3.9 移除指定排名范围的元素
ZREMRANGEBYRANK key start stop
# 举例
3.10 移除指定分值范围的元素
ZREMRANGEBYSCORE key min max
# 举例
3.11 返回集合中元素个数
ZCARD key
# 返回指定分值范围中元素的个数
ZCOUNT key min max
ZCOUNT fruits 4 7
ZCOUNT fruits (4 7
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'