7.Redis常用命令:ZSet

本文深入探讨了Redis中Sorted-Sets数据结构的特性与应用场景,包括成员添加、删除、更新等操作,以及如何利用分数进行高效排序和检索。通过实例展示了ZADD、ZREM、ZINCRBY等命令的使用,帮助读者理解Sorted-Sets在处理有序集合时的优势。

        Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。
  在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数。由于Sorted-Sets中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。事实上,Redis所具有的这一特征在很多其它类型的数据库中是很难实现的,换句话说,在该点上要想达到和Redis同样的高效,在其它数据库中进行建模是非常困难的。

1、ZADD key score member [score] [member]

增加多个成员

127.0.0.1:6379> zadd CountryPower 99 America 90 China 97 Russia 80 Brazil 89 Japan
(integer) 5
127.0.0.1:6379> zrange CountryPower 0 -1 withscores
 1) "Brazil"
 2) "80"
 3) "Japan"
 4) "89"
 5) "China"
 6) "90"
 7) "Russia"
 8) "97"
 9) "America"
10) "99"

2、ZREM key member [member ...]

该命令将移除参数中指定的成员,其中不存在的成员将被忽略。

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
 1) "Brazil"
 2) "80"
 3) "Japan"
 4) "89"
 5) "China"
 6) "90"
 7) "Russia"
 8) "97"
 9) "America"
10) "99"
127.0.0.1:6379> zrem CountryPower Brazil Japan
(integer) 2
127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "China"
2) "90"
3) "Russia"
4) "97"
5) "America"
6) "99"

3、ZINCRBY key increment member

为key中的member加指定分数(increment)

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "China"
2) "90"
3) "Russia"
4) "97"
5) "America"
6) "99"
127.0.0.1:6379> zincrby CountryPower 5 China  //为中国增加5点
"95"
127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "China"
2) "95"
3) "Russia"
4) "97"
5) "America"
6) "99"

4、ZSCORE key member

获取指定Key的指定成员的分数

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "China"
2) "95"
3) "Russia"
4) "97"
5) "America"
6) "99"
127.0.0.1:6379> zscore CountryPower China
"95"

5、ZRANK key member

返回成员在列表中的下标

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "China"
2) "95"
3) "Russia"
4) "97"
5) "America"
6) "99"
127.0.0.1:6379> zrank CountryPower Russia
(integer) 1

6、ZREVRANK key member 

该命令的功能和ZRANK基本相同,唯一的差别在于该命令获取的索引是从高到低排序后的位置,同样0表示第一个元素,即分数最高的成员。

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "China"
2) "95"
3) "Russia"
4) "97"
5) "America"
6) "99"
127.0.0.1:6379> zrank CountryPower America
(integer) 2
127.0.0.1:6379> zrevrank CountryPower America
(integer) 0

7、ZCARD key

成员数量

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "China"
2) "95"
3) "Russia"
4) "97"
5) "America"
6) "99"
127.0.0.1:6379> zcard CountryPower
(integer) 3

8、ZCOUNT key min max

计算分数在min与max之间的成员数量。针对min和max参数需要额外说明的是,-inf和+inf分别表示Sorted-Sets中分数的最高值和最低值。缺省情况下,min和max表示的范围是闭区间范围,即min <= score <= max内的成员将被返回。然而我们可以通过在min和max的前面添加"("字符来表示开区间,如(min max表示min < score <= max,而(min (max表示min < score < max。

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
 1) "France"
 2) "85"
 3) "German"
 4) "88"
 5) "Japan"
 6) "89"
 7) "China"
 8) "95"
 9) "Russia"
10) "97"
11) "America"
12) "99"
127.0.0.1:6379> zcount CountryPower 90 +inf   //从90分到最高分
(integer) 3
127.0.0.1:6379> zcount CountryPower -inf 90  //从最低分到90分
(integer) 3
127.0.0.1:6379> zcount CountryPower 85 89  //从85分(包含)到89分(包含)
(integer) 3
127.0.0.1:6379> zcount CountryPower (85 (89  //从85分(不包含)到89分(不包含)
(integer) 1

----------------------  范围筛选  ----------------------  

9、ZRANGE key start stop [WITHSCORES] 

截取范围内的成员(自选带分数)

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
 1) "France"
 2) "85"
 3) "German"
 4) "88"
 5) "Japan"
 6) "89"
 7) "China"
 8) "95"
 9) "Russia"
10) "97"
11) "America"
12) "99"

10、ZREVRANGE key start stop [WITHSCORES]

该命令的功能和ZRANGE基本相同,唯一的差别在于该命令是通过反向排序获取指定位置的成员,即从高到低的顺序。

127.0.0.1:6379> zrevrange CountryPower 0 -1 withscores
 1) "America"
 2) "99"
 3) "Russia"
 4) "97"
 5) "China"
 6) "95"
 7) "Japan"
 8) "89"
 9) "German"
10) "88"
11) "France"
12) "85"

11、ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 

返回分数满足表达式min <= score <= max的成员,其中返回的成员是按照其分数从低到高的顺序返回,如果成员具有相同的分数,则按成员的字典顺序返回。LIMIT用于限制返回成员的数量范围。可选参数offset表示从符合条件的第offset个成员开始返回,同时返回count个成员。参数中min和max的规则可参照命令ZCOUNT

127.0.0.1:6379> zrevrange CountryPower 0 -1 withscores
 1) "America"
 2) "99"
 3) "Russia"
 4) "97"
 5) "China"
 6) "95"
 7) "Japan"
 8) "89"
 9) "German"
10) "88"
11) "France"
12) "85"
127.0.0.1:6379> zrangebyscore CountryPower 90 99 withscores  //95 97 99
1) "China"
2) "95"
3) "Russia"
4) "97"
5) "America"
6) "99"
127.0.0.1:6379> zrangebyscore CountryPower 90 99 withscores limit 1 2 //从取得的结果,从下标为1开始取,取2个  
1) "Russia"
2) "97"
3) "America"
4) "99"

12、ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

该命令除了排序方式是基于从高到低的分数排序之外,其它功能和参数含义均与ZRANGEBYSCORE相同。

127.0.0.1:6379> zrevrangebyscore CountryPower 99 90 withscores
1) "America"
2) "99"
3) "Russia"
4) "97"
5) "China"
6) "95"
127.0.0.1:6379> zrevrangebyscore CountryPower 99 90 withscores limit 0 2
1) "America"
2) "99"
3) "Russia"
4) "97"

-------------  批量删除 -------------

13、ZREMRANGEBYRANK key start stop

删除索引位置位于start和stop之间的成员,start和stop都是0-based,即0表示分数最低的成员,-1表示最后一个成员,即分数最高的成员。

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
 1) "France"
 2) "85"
 3) "German"
 4) "88"
 5) "Japan"
 6) "89"
 7) "China"
 8) "95"
 9) "Russia"
10) "97"
11) "America"
12) "99"
127.0.0.1:6379> zremrangebyrank CountryPower 0 1
(integer) 2
127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "Japan"
2) "89"
3) "China"
4) "95"
5) "Russia"
6) "97"
7) "America"
8) "99"

14、ZREMRANGEBYSCORE key min max

删除分数在min和max之间的所有成员,即满足表达式min <= score <= max的所有成员。对于min和max参数,可以采用开区间的方式表示,具体规则参照ZCOUNT。

127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "Japan"
2) "89"
3) "China"
4) "95"
5) "Russia"
6) "97"
7) "America"
8) "99"
127.0.0.1:6379> zremrangebyscore CountryPower -inf 95  //删除95分(含)以下的
(integer) 2
127.0.0.1:6379> zrange CountryPower 0 -1 withscores
1) "Russia"
2) "97"
3) "America"
4) "99"

 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值