数据类型-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,优先级是怎样排列。

相关文章
|
6天前
|
SQL NoSQL Java
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
Redis数据类型 Hash Set Zset Bitmap HyperLogLog GEO
18 0
|
6天前
|
存储 C++ 容器
set容器一自定义数据类型指定排序规则讲解
set容器一自定义数据类型指定排序规则讲解
25 1
|
6天前
|
存储 NoSQL Java
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】
61 0
|
6天前
|
存储 JavaScript
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
26 0
|
9月前
|
存储 NoSQL Redis
无序集合的利器:深入了解 Redis 的 Set 数据类型
在现代的应用程序中,对于处理独特值、快速判断成员关系等需求,无序集合是一种重要的数据结构。Redis,作为一款高性能的内存数据库,提供了多种数据类型来满足不同的需求。在本文中,我们将着重介绍 Redis 的 Set 数据类型,探讨其特性、用法以及在实际应用中的优势。
125 0
|
6天前
|
NoSQL Redis 索引
⑤【Sorted Set】Redis常用数据类型: ZSet [使用手册]
⑤【Sorted Set】Redis常用数据类型: ZSet [使用手册]
113 0
|
6天前
|
NoSQL Redis
④【Set】Redis常用数据类型: Set [使用手册]
④【Set】Redis常用数据类型: Set [使用手册]
44 0
|
7月前
|
存储 索引 Python
python-tuple(元组)-set(集合)-list(列表)-dictionary(字典)和Python数据类型转换函数
python-tuple(元组)-set(集合)-list(列表)-dictionary(字典)和Python数据类型转换函数
|
8月前
|
存储 NoSQL 搜索推荐
【Redis从头学-7】Redis中的Set数据类型实战场景之用户画像去重、共同关注、专属粉丝
【Redis从头学-7】Redis中的Set数据类型实战场景之用户画像去重、共同关注、专属粉丝
185 0
|
9月前
|
前端开发
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
前端学习笔记202305学习笔记第二十五天-什么是对象结构 set map之5
34 0