zset获取指定score_Redis学习笔记-07Zset有序集合

本文详细介绍了Redis中的有序集合Zset,包括其与列表的区别、存储方式、常用命令及其应用场景,例如如何添加、删除、查询元素,以及如何进行范围操作和分数更新。此外,还演示了如何利用Zset实现TopN场景,例如记录点击数最高的文章。
摘要由CSDN通过智能技术生成

有序集合是在集合类型的基础上为集合中的每个元素都关联了一个分数,这使得可以在完成插入,删除和判断元素是否存在等基础上,还能否获得分数最高(或最低的)前N项,或一定分数范围的元素等操作。有序也就是通过这个分数而是实现的。

1 与列表的异同

特性

有序集合类型

列表类型

存储内容

至多

个字符串

至多

个字符串

有序性

唯一性

实现方式

使用散列表和跳跃表(Skip list)实现

通过链表实现

查询速度

读取中间速度也很快,时间复杂度O(log(N))

靠近两端块,中间慢

使用场景

TopN场景

“日志”类场景,很少使用中间数据

是否能调整元素位置

通过调整分值

不能调整

内存消耗

2 Java代码实现

(暂无)

可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。不能存在重复数据,如添加重复数据,则只更新score值。

3 命令

API方法名

作用

zadd

向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序

zrange

返回名称为key的zset(按score从小到大顺序)中的index从start到end的所有元素

zrem

删除名称为key的zset中的元素member

zincrby

如果在名称为key的zset中已经存在元素member,则该元素的score增加increment,否则向该集合中添加该元素,其score的值为increment

zrank

返回名称为key的zset中member元素的排名(按score从小到大排序)即下标(非scores值)

zrevrank

返回名称为key的zset中member元素的排名(按score从大到小排序)即下标

zrevrange

返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素

zrangebyscore

返回集合中score在给定区间的元素

zcount

返回集合中score在给定区间的数量

zcard

返回集合中元素个数

zremrangebyrank

删除集合中元素索引(下标)在给定区间的元素

zremrangebyscore

删除集合中score在给定区间的元素

3.1 zadd

zadd key score member [score member ...]

用来向有序集合中加入一个元素和该元素的分值,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数(不包含之前已经存在的元素)。

127.0.0.1:6378> zadd scoreboard 89 tom 67 peter 100 david

(integer) 3

127.0.0.1:6378> zrange scoreboard 0 4

1) "peter"

2) "tom"

3) "david"

127.0.0.1:6378> zrange scoreboard 0 4 withscores

1) "peter"

2) "67"

3) "tom"

4) "89"

5) "david"

6) "100"

127.0.0.1:6378> zadd scoreboard 90 peter

(integer) 0

127.0.0.1:6378> zrange scoreboard 0 4 withscores

1) "tom"

2) "89"

3) "peter"

4) "90"

5) "dav

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值