数据类型-sorted_set 带有权重的任务管理 | 学习笔记

简介: 快速学习数据类型-sorted_set 带有权重的任务管理

开发者学堂课程【Redis 入门到精通(基础篇)数据类型-sorted_set 带有权重的任务管理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/764/detail/13394


数据类型-sorted_set 带有权重的任务管理

 

sorted_set 类型应用场景

业务场景

任务/消息权重设定应用

当任务或者消息待处理,形成了任务队列或消息队列时,对于高优先级的任务要保障对其优先处理,如何实现任务权重管理。

现在如果要做任务队列或者消息队列,我们一般按照list来做,按照一个顺序来进行,但是如果加上权重怎么解决,任务队列消息队列用list是无法区分的,这个时候只能用编程做区分,模型方面可以解决,用sorted_set的score属性,利用这个特征来做。

解决方案
●对于带有权重的任务,优先处理权重高的任务,采用score记录权重即可

添加几个任务,zadd tasks 4 order:id:005,然后zadd task 1 order:id:425,zadd tasks 9 order:id:345,添加进去后,进行排序,zrange taks 0 -1 withscores,就看到了依次需要处理的任务,这样仅仅是看了全部,怎样移掉呢,就需要用zrevrange tasks 0 0,取出第一个,然后zrem tasks order:id:345,

然后查询zrange taks 0 -1 withscores就缺少了去掉的那一个,在操作时,由于无法保证原子性操作,就可能会出问题,在移除时并没有去掉我们要去的数据,或者说过程中插队进来了,那么就比较麻烦,

我们讲到的事务就可以解决这个问题,然后reids也可加一个模型在sorted_set里面,加一个api接口,能够从某一端剔除数据,多一个pop的操作,然后我们带有权限的任务队列消息队列就完成了。

多条件任务权重设定

如果权重条件过多时,需要对排序score值进行处理,保障score值能够兼容2条件或者多条件,例如外贸订单优先于国内订单,总裁订单优先于员工订单,经理订单优先于员工订单
●因score长度受限, 需要对数据进行截断处理,尤其是时间设置为小时或分钟级即可(折算后)
●先设定订单类别,后设定订单发起角色类别,整体score长度必须是统的,不足位补0。第一排序规则首位不得是0
●例如外贸101,国内102,经理004,员工008。
●员工下的外贸单score值为101008 (优先)
●经理下的国内单score值为102004

如果任务权限不是一个值组成的,我们就使用多个值组合进行,提供一个场景,有一些任务单要处理,优先规则是外贸订单优先于国内订单,总裁订单优先于员工订单,经理订单优先于员工订单;

有这样一个分绩,因为score有限,我们就需要做截断,按时间排列,就需要把权重规则截成若干部分,比方说时间十位,截取到只剩六位,如果可以就使用,不可以使用就后八位决定,有一定截断,然后最后连接在一起,连接有一个坑,就是补0操作,接下来进行一个模拟。

去模拟环境,zadd tt 102004 order:id:1,然后 zadd tt 101008 order:id:2,zrevrange tt 0 -1 withscores,得到排列顺序,根据我们的权重规则,进行一个排列优先级,zrange tt 0 -1,这个时候有一个坑,zadd ts 14 order:id:3,然后zadd ts 1332 order:id:4,此时没有按位比对的问题,现在就出现了问题,就要进行补位,变成相同的位数,空位补0,优先级是怎样排列。

相关文章
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
NoSQL Redis
Redis set数据类型命令使用及应用场景使用总结
Redis set数据类型命令使用及应用场景使用总结
187 1
|
消息中间件 JSON NoSQL
Redis深度解析:核心数据类型之hash、list、set
Redis深度解析:核心数据类型之hash、list、set
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型list&set()
本文介绍了Python中list和set两种数据类型的使用,包括它们的创建、取值、增删改查操作、排序以及内置函数的使用,还探讨了list的比较函数和set的快速去重功能。
292 0
|
存储 Java Redis
redis-学习笔记(Jedis set 简单命令)
redis-学习笔记(Jedis set 简单命令)
166 1
|
NoSQL Java Redis
redis-学习笔记(string , hash , list , set , zset 前置知识)
redis-学习笔记(string , hash , list , set , zset 前置知识)
174 0
redis-学习笔记(string , hash , list , set , zset 前置知识)
|
存储 C++ 容器
【C++】学习笔记——map和set
【C++】学习笔记——map和set
143 0
|
搜索推荐
redis-学习笔记(set)
redis-学习笔记(set)
132 0
|
SQL NoSQL Java
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO