网站集约化建设意见和建议,苏州建设交通招聘信息网站,微信微商城怎么进入,代写文案的软件Redis 入门到精通#xff08;一#xff09;数据类型#xff08;4#xff09;
一、redis 数据类型–sorted_set实现时效性任务管理
1、sorted_set 类型数据操作的注意事项 score 保存的数据存储空间是64位#xff0c;如果是整数范围是-9007199254740992~9007199254740992…Redis 入门到精通一数据类型4
一、redis 数据类型–sorted_set实现时效性任务管理
1、sorted_set 类型数据操作的注意事项 score 保存的数据存储空间是64位如果是整数范围是-9007199254740992~9007199254740992。 score 保存的数据也可以是一个双精度的 double 值基于双精度浮点数的特征可能会丢失精度使用时候要慎重。 sorted_set 底层存储还是基于 set 结构的因此数据不能重复如果重复添加相同的数据score 值将被反复覆盖保留最后一次修改的结果。
127.0.0.1:6379 zadd test1 11 aa
(integer) 1
127.0.0.1:6379 zrange test1 0 -1 withscores
1) aa
2) 11
127.0.0.1:6379 zadd test1 22 aa
(integer) 0
127.0.0.1:6379 zrange test1 0 -1 withscores
1) aa
2) 22
127.0.0.1:6379 zadd test1 33 aa
(integer) 0# 虽然返回失败但是修改成功保底最后一次的修改结果。
127.0.0.1:6379 zrange test1 0 -1 withscores
1) aa
2) 33
127.0.0.1:63792、sorted_set 类型应用场景–业务场景
基础服务增值服务类网站会设定各位会员的试用让用户充分体验会员优势。例如观影试用VIP、游戏VIP体验、云盘下载体验VIP、数据查看体验VIP。当VIP体验到期后如果有效管理此类信息。即便对于正式VIP用户也存在对应的管理方式。
网站会定期开启投票、讨论限时进行逾期作废。如何有效管理此类过期信息。
3、sorted_set 类型应用场景–解决方案 对于基于时间线限定的任务处理将处理时间记录为 score 值利用排序功能区分处理的先后顺序。 记录下一个要处理的时间当到期后处理对应任务移除redis中的记录并记录下一个要处理的时间 当新任务加入时判定并更新当前下一个要处理的任务时间。 为提升 sorted set 的性能通常将任务根据特征存储成若干个 sorted set。例如1小时内1天内周内月内季内年度等操作时逐级提升将即将操作的若干个任务纳入到1小时内处理的队列中。 获取当前系统时间: time
4、redis 实际模拟操作–sorted_set 实现时效性任务管理
# 添加数据
127.0.0.1:6379 zadd ts 1509802345 uid:001
(integer) 1
127.0.0.1:6379 zadd ts 1509802390 uid:007
(integer) 1
127.0.0.1:6379 zadd ts 1510384284 uid:888
(integer) 1# 有序排列
127.0.0.1:6379 zrange ts 0 -1 withscores
1) uid:001
2) 1509802345
3) uid:007
4) 1509802390
5) uid:888
6) 1510384284# 获取当前时间
127.0.0.1:6379 time
1) 1720706679
2) 248469
127.0.0.1:6379 time
1) 1720706681
2) 558810
127.0.0.1:63795、redis 应用场景
1redis 用于控制数据库表主键 id为数据库表主键提供生成策略保障数据库表的主键唯一性此方案适用于所有数据库且支持数据库集群。
2redis 控制数据的生命周期通过数据是否失效控制业务行为适用于所有具有时效性限定控制的操作。
3redis 可应用于各种结构型和非结构型高热度数据访问加速。
4redis 应用于购物车数据存储设计。
5redis 应用于抢购限购类、限量发放优惠卷、激活码等业务的数据存储设计。
6redis 应用于具有操作先后顺序的数据控制。
7redis 应用于最新消息展示。
8redis 应用于随机推荐类信息检索例如热点歌单推荐热点新闻推荐热卖旅游线路应用APP推荐大V推荐等。
9set 类型数据的扩展操作
redis 应用于同类信息的关联搜索二度关联搜索深度关联搜索。显示共同关注(一度)。显示共同好友(一度)。由用户A出发获取到好友用户B的好友信息列表(一度)。由用户A出发获取到好友用户B的购物清单列表(二度)。由用户A出发获取到好友用户B的游戏充值列表(二度)。
10redis 应用于同类型不重复数据的合并操作。
11redis 应用于同类型数据的快速去重。
12redis 应用于基于黑名单与白名单设定的服务控制。
13redis 应用于计数器组合排序功能对应的排名
14redis 应用于定时任务执行顺序管理或任务过期管理
二、redis 数据类型-- sorted_set 带有权重的任务管理
1、sorted_set 类型应用场景–业务场景
任务/消息权重设定应用
当任务或者消息待处理形成了任务队列或消息队列时对于高优先级的任务要保障对其优先处理如何实现任务权重管理。
2、sorted_set 类型应用场景–解决方案 对于带有权重的任务优先处理权重高的任务采用 score 记录权重即可。 多条件任务权重设定 如果权重条件过多时需要对排序 score 值进行处理保障 score 值能够兼容2条件或者多条件例如外贸订单优先于国内订单总裁订单优先于员工订单经理订单优先于员工订单。 因 score 长度受限需要对数据进行截断处理尤其是时间设置为小时或分钟级即可(折算后)。 先设定订单类别后设定订单发起角色类别整体 score 长度必须是统一的不足位补0。第一排序规则首位不得是0。 例如外贸101国内102经理004员工008员工下的外贸单score值为101008(优先)经理下的国内单score值为102004
3、redis 实际模拟操作–sorted_set 带有权重的任务管理
# 添加数据任务按权重排序
127.0.0.1:6379 zadd tasks 1 order:id:425
(integer) 1
127.0.0.1:6379 zadd tasks 9 order:id:345
(integer) 1
127.0.0.1:6379 zadd tasks 4 order:id:005
(integer) 1# 任务按权重排序显示
127.0.0.1:6379 zrevrange tasks 0 -1 withscores
1) order:id:345
2) 9
3) order:id:005
4) 4
5) order:id:425
6) 1# 获取权重最高的任务
127.0.0.1:6379 zrevrange tasks 0 0
1) order:id:345# 移除权重最高的任务
127.0.0.1:6379 zrem tasks order:id:345
(integer) 1
127.0.0.1:6379 zrevrange tasks 0 -1 withscores
1) order:id:005
2) 4
3) order:id:425
4) 1
127.0.0.1:6379# 添加数据
127.0.0.1:6379 zadd tt 102004 order:id:1
(integer) 1
127.0.0.1:6379 zadd tt 101008 order:id:2
(integer) 1# 反向排序
127.0.0.1:6379 zrevrange tt 0 -1 withscores
1) order:id:1
2) 102004
3) order:id:2
4) 101008# 正向排序
127.0.0.1:6379 zrange tt 0 -1
1) order:id:2
2) order:id:1
127.0.0.1:63794、redis 应用场景
1redis 用于控制数据库表主键 id为数据库表主键提供生成策略保障数据库表的主键唯一性此方案适用于所有数据库且支持数据库集群。
2redis 控制数据的生命周期通过数据是否失效控制业务行为适用于所有具有时效性限定控制的操作。
3redis 可应用于各种结构型和非结构型高热度数据访问加速。
4redis 应用于购物车数据存储设计。
5redis 应用于抢购限购类、限量发放优惠卷、激活码等业务的数据存储设计。
6redis 应用于具有操作先后顺序的数据控制。
7redis 应用于最新消息展示。
8redis 应用于随机推荐类信息检索例如热点歌单推荐热点新闻推荐热卖旅游线路应用APP推荐大V推荐等。
9set 类型数据的扩展操作
redis 应用于同类信息的关联搜索二度关联搜索深度关联搜索。显示共同关注(一度)。显示共同好友(一度)。由用户A出发获取到好友用户B的好友信息列表(一度)。由用户A出发获取到好友用户B的购物清单列表(二度)。由用户A出发获取到好友用户B的游戏充值列表(二度)。
10redis 应用于同类型不重复数据的合并操作。
11redis 应用于同类型数据的快速去重。
12redis 应用于基于黑名单与白名单设定的服务控制。
13redis 应用于计数器组合排序功能对应的排名
14redis 应用于定时任务执行顺序管理或任务过期管理
15redis 应用于即时任务/消息队列执行管理
三、redis 数据类型-- 案例按次结算的服务控制
1、数据类型实践案例–业务场景
人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术百度自研用户评价语义识别服务免费开放给企业试用同时训练百度自己的模型。现对试用用户的使用行为进行限速限制每个用户每分钟最多发起10次调用 2、数据类型实践案例–解决方案
设计计数器记录调用次数用于控制业务执行次数。以用户id作为 key使用次数作为 value。在调用前获取次数判断是否超过限定次数 不超过次数的情况下每次调用计数1 业务调用失败计数-1为计数器设置生命周期为指定周期例如1秒/分钟自动清空周期内使用次数。 3、redis 实际模拟操作–案例按次结算的服务控制
# 先获取值看是否存在不存在设定为初始1
127.0.0.1:6379 get 415
(nil)# 设置 60秒内计数器开始计数10次以内超过10次重新计数
127.0.0.1:6379 setex 415 60 1
OK
127.0.0.1:6379 get 415
1
127.0.0.1:6379 incr 415
(integer) 2
127.0.0.1:6379 incr 415
(integer) 2# 超过60秒清空重新开始
127.0.0.1:6379 get 415
(nil)
127.0.0.1:63794、数据类型实践案例–解决方案改良
不要让每次都判断上限 10 次到了没有让程序最后一次性判断到10次了没。 5、数据类型实践案例–解决方案改良
取消最大值的判定利用 incr 操作超过最大值抛出异常的形式替代每次判断是否大于最大值。判断是否为 nil 如果是设置为 Max-次数 如果不是计数1 业务调用失败计数-1遇到异常即操作超过上限视为使用达到上限。 6、redis 实际模拟操作–案例按次结算的服务控制改良
# 先获取值看是否存在不存在设定为初始1
127.0.0.1:6379 get 415
(nil)# 设置 60秒内计数器开始计数利用 incr 操作超过最大值
127.0.0.1:6379 setex 415 60 9223372036854775797
OK
127.0.0.1:6379 get 415
9223372036854775797
127.0.0.1:6379 incr 415
(integer) 9223372036854775798
127.0.0.1:6379 incr 415
(integer) 9223372036854775799
127.0.0.1:6379 incr 415
(integer) 9223372036854775800
127.0.0.1:6379 incr 415
(integer) 9223372036854775801
127.0.0.1:6379 incr 415
(integer) 9223372036854775802
127.0.0.1:6379 incr 415
(integer) 9223372036854775803
127.0.0.1:6379 incr 415
(integer) 9223372036854775804
127.0.0.1:6379 incr 415
(integer) 9223372036854775805
127.0.0.1:6379 incr 415
(integer) 9223372036854775806
127.0.0.1:6379 incr 415
(integer) 9223372036854775807# 到达10次抛出异常
127.0.0.1:6379 incr 415
(error) ERR increment or decrement would overflow
127.0.0.1:6379 incr 415
(error) ERR increment or decrement would overflow
127.0.0.1:63797、redis 应用场景
1redis 用于控制数据库表主键 id为数据库表主键提供生成策略保障数据库表的主键唯一性此方案适用于所有数据库且支持数据库集群。
2redis 控制数据的生命周期通过数据是否失效控制业务行为适用于所有具有时效性限定控制的操作。
3redis 可应用于各种结构型和非结构型高热度数据访问加速。
4redis 应用于购物车数据存储设计。
5redis 应用于抢购限购类、限量发放优惠卷、激活码等业务的数据存储设计。
6redis 应用于具有操作先后顺序的数据控制。
7redis 应用于最新消息展示。
8redis 应用于随机推荐类信息检索例如热点歌单推荐热点新闻推荐热卖旅游线路应用APP推荐大V推荐等。
9set 类型数据的扩展操作
redis 应用于同类信息的关联搜索二度关联搜索深度关联搜索。显示共同关注(一度)。显示共同好友(一度)。由用户A出发获取到好友用户B的好友信息列表(一度)。由用户A出发获取到好友用户B的购物清单列表(二度)。由用户A出发获取到好友用户B的游戏充值列表(二度)。
10redis 应用于同类型不重复数据的合并操作。
11redis 应用于同类型数据的快速去重。
12redis 应用于基于黑名单与白名单设定的服务控制。
13redis 应用于计数器组合排序功能对应的排名。in
14redis 应用于定时任务执行顺序管理或任务过期管理。
15redis 应用于即时任务/消息队列执行管理。
16redis 应用于限时按次结算的服务控制。
四、redis 数据类型-- 案例微信接收消息顺序控制
1、数据类型实践案例–业务场景
使用微信的过程中当微信接收消息后会默认将最近接收的消息置顶当多个好友及关注的订阅号同时发送消息时该排序会不停的进行交替。同时还可以将重要的会话设置为置顶。一旦用户离线后再次打开微信时消息该按照什么样的顺序显示?
2、数据类型实践案例–业务分析 3、数据类型实践案例–解决方案
依赖 list 的数据具有顺序的特征对消息进行管理将 list 结构作为栈使用。对置顶与普通会话分别创建独立的 list 分别管理。当某个 list 中接收到用户消息后将消息发送方的 id 从 list 的一侧加入 list(此处设定左侧)。多个相同 id 发出的消息反复入栈会出现问题在入栈之前无论是否具有当前 id 对应的消息先删除对应 id 。推送消息时先推送置顶会话 list再推送普通会话 list推送完成的 list 清除所有数据。消息的数量也就是微信用户对话数量采用计数器的思想另行记录伴随 list 操作同步更新。
4、redis 实际模拟操作–案例微信接收消息顺序控制
# 在接收方 100 对象中先删除一次200由于第一次没有200删除肯定是失败的
127.0.0.1:6379 lrem 100 1 200
(integer) 0# 在接收方 100 对象中放入消息200
127.0.0.1:6379 lpush 100 200
(integer) 1# 在接收方 100 对象中先删除一次300由于第一次没有300删除肯定是失败的
127.0.0.1:6379 lrem 100 1 300
(integer) 0# 在接收方 100 对象中放入消息300
127.0.0.1:6379 lpush 100 300
(integer) 2# 在接收方 100 对象中先删除一次400由于第一次没有400删除肯定是失败的
127.0.0.1:6379 lrem 100 1 400
(integer) 0# 在接收方 100 对象中放入消息400
127.0.0.1:6379 lpush 100 400
(integer) 3# 在接收方 100 对象中先删除一次200由于是第二次接收消息200删除成功
127.0.0.1:6379 lrem 100 1 200
(integer) 1# 在接收方 100 对象中放入消息200
127.0.0.1:6379 lpush 100 200
(integer) 3# 在接收方 100 对象中先删除一次300由于是第二次接收消息300删除成功
127.0.0.1:6379 lrem 100 1 300
(integer) 1# 在接收方 100 对象中放入消息300
127.0.0.1:6379 lpush 100 300
(integer) 3# 此时查询接收方100内的消息队列为
127.0.0.1:6379 lrange 100 0 -1
1) 300
2) 200
3) 400
127.0.0.1:63795、redis 应用场景
1redis 用于控制数据库表主键 id为数据库表主键提供生成策略保障数据库表的主键唯一性此方案适用于所有数据库且支持数据库集群。
2redis 控制数据的生命周期通过数据是否失效控制业务行为适用于所有具有时效性限定控制的操作。
3redis 可应用于各种结构型和非结构型高热度数据访问加速。
4redis 应用于购物车数据存储设计。
5redis 应用于抢购限购类、限量发放优惠卷、激活码等业务的数据存储设计。
6redis 应用于具有操作先后顺序的数据控制。
7redis 应用于最新消息展示。
8redis 应用于随机推荐类信息检索例如热点歌单推荐热点新闻推荐热卖旅游线路应用APP推荐大V推荐等。
9set 类型数据的扩展操作
redis 应用于同类信息的关联搜索二度关联搜索深度关联搜索。显示共同关注(一度)。显示共同好友(一度)。由用户A出发获取到好友用户B的好友信息列表(一度)。由用户A出发获取到好友用户B的购物清单列表(二度)。由用户A出发获取到好友用户B的游戏充值列表(二度)。
10redis 应用于同类型不重复数据的合并操作。
11redis 应用于同类型数据的快速去重。
12redis 应用于基于黑名单与白名单设定的服务控制。
13redis 应用于计数器组合排序功能对应的排名。in
14redis 应用于定时任务执行顺序管理或任务过期管理。
15redis 应用于即时任务/消息队列执行管理。
16redis 应用于限时按次结算的服务控制。
17redis 应用于基于时间顺序的数据操作而不关注具体时间。
上一节关联链接请点击 # Redis 入门到精通一数据类型3