无序集合类型(用值为空的散列表实现,支持集合的差、交、并运算,加入、删除、判断存在等操作的时间复杂度均为O(1))
可以使用tagSet id1 .. idn来通过集合运算实现“取出指定条件标签的文章”
增加集合元素
sadd [key] [member]
删除集合元素
srem [key] [member]
得到所有元素
smembers [key]
判断元素是否在集合中
sismember [key]
随机获得指定数量集合元素(正数获得不重复值,且当count超过长度时返回全部元素,负数则会返回足够的元素,可能重复)
srandmember [key] [count]
获得集合长度
scard [key]
弹出集合元素(由于集合元素无序,弹出元素随机)
Spop [key]
差运算(属于A不属于B)
sdiff [keya] [keyb] .. [keyc]
//返回 集合a - 集合 b - 集合c
sdiffStore [resultS] [keya] [keyb] [keyc]
//将结果存储到结果集中
交运算(结果集属于A也属于B)
sinter [keya] [keyb] .. [keyc]
//返回 集合a 交 集合 b 交 集合c
sinterStore [resultS] [keya] [keyb] [keyc]
//将结果存储到结果集中
并运算(结果集属于A或属于B)
sUnion [keya] [keyb] .. [keyc]
//返回 集合a 交 集合 b 交 集合c
sUnion [resultS] [keya] [keyb] [keyc]
//将结果存储到结果集中
有序集合类型
每个集合成员有分数的集合,成员名不能相同,成员分数可以相同,默认按分数顺序排列,分数相同时,按照成员名字典顺序排列
列表 散列 有序集合
实现 链表 散列? 散列表、跳跃表
访问中间元素的速度 慢 快 快O(log(N))
调整中间元素的位置 复杂 无法调整顺序 简单(改变成员分数)
耗费内存 少 多 多
获得段值 能 能(多种方式字典、分数、次序)
增加元素
zadd [key] [score] [member] [score2] [member2] ... ...
获得元素的分数
zscore [key] [member]
获得元素排名
zrank [key] [member]
按范围获得元素列表,得到分数等附加项在此处不声明
zrange [key] start stop
//按照排序后的索引号 ..limit start count
//在zrang筛选结果的第start位开始取count个
zrangebyScore [key] min max
//按照排序后的分数范围
zrangebyLex [key] min max
//按照字典顺序排序后的成员名 参数前或许需要[
增加成员分数,如果member不存在,则赋值为0
zincrby [key] [num] [member]
获取集合中元素数量
zcard [key]
获得指定范围内元素个数
zcount [key] [min] [max]
删除一个或多个元素
zrem [key] [member] [member2]
按照范围删除元素
在按范围获取元素命令的基础上,将类似指令改为zremrangebyrank
集合计算并储存,对于成员的分数,可以指定集合的权重、取值(求和或最小值或最大值)
zinterstore [store set] [keys count] [key keyName... ] [weight position weight1 position2 weight2] [aggerate sum|min|max]