redis sortedSet

zset 和set 相比:

zset 类型和set类型一样,不允许有重复的元素。zset是有序的,zset 有一个double类型的分数,这个分数可以重复,zset正是通过这个分数对集合中的元素从小到大排序的。

zset 和list 相比:

zset 和list 都是有序的,list是通过在链表实现的,两头取值快,中间取值慢;zet是用哈希表和跳跃表(二叉树)来实现的,两头中间添加删除查找都很快。

我们可以按照zset 的分数score进行排序和过滤查询


// 添加元素

zadd zset 1 c 2 i 5 o 9 p 3 a 

zadd zset 4 u // 插入元素

zadd zset 10 c  // 修改元素c的分数为10,返回0,表示没有插入新的元素 ——> zadd key score element,这个命令即可以添加元素,也可以修改已有元素的分数

zadd zset ch 15 c // 修改元素的分数的15,返回1,表示有一个分数被修改

zadd zset nx 20 c  // nx 不更新,只添加,如果元素存在,无效

zadd zset xx 20 c  // xx 只更新,不添加,如果元素不存在,无效

zadd zset incr 2 c  // 指定元素分数增加2


查询元素

zrange zset  0 -1 [withscores]  // 按照下标查询

zrevrange zset 0 1 [withscores] // 按照下标查询,反序,即最后一个元素的下标是0,倒数第二个元素的下标是1

zrangebyscore zset 2 4 [withscores]  [LIMIT offset count]    // 按照分数查询

zrevrangebyscore zset 2 2 [withscores] // 按照分数查询,反序 


查询分数

zscore zset y // 返回指定成员的分数


查询元素索引

zrank zset p // 返回指定成员的索引,从小到大

zrevrank zset p // 返回指定成员的索引,从大到小


查询元素个数

zcard zset  // 返回元素个数

zcount zset 1 2  // 返回分数1到2之间的元素个数


修改分数

zincrby zset 3 c  // 分数加上3


删除元素

zrem zset p // 删除p 元素

zremrangebyrank zset 4 10  // 根据下标删除元素

zremrangebyscore zset 4 5  // 根据分数删除元素

原文地址:https://www.cnblogs.com/Mike_Chang/p/9560567.html