首页 > 数据库 >redis缓存时间范围数据用法

redis缓存时间范围数据用法

时间:2022-10-22 12:33:09浏览次数:56  
标签:10 缓存 key 22 51 redis KKK 用法 2022

场景:A系统需要根据业务系统名(比如业务系统就叫KKK)以及时间范围如2022-10-22 10:01到2022-10-22 10:31请求B系统,B系统会返回10:01到10:31这30个分钟的数据;

这个数据需要缓存起来,好下次请求2022-10-22 10:21到2022-10-22 10:51的时候,可以只请求10:32到10:51的数据即可;

因此我们可以将key用KKK:timestamp来保存(timestamp就是比如2022-10-22 10:01这个分钟的timestamp,本来可以用hash,但是hash不支持内部key的过期策略,timestamp在这个场景可以用字符串方便后续用keys判断是否存在哪些分钟的数据,比如KKK:202210221001,KKK:202210221002...KKK:202210221031);

缓存了上诉30个分钟点数据后,然后来了请求KKK业务系统的2022-10-22 10:21到2022-10-22 10:51的数据,也是先拆成30个key,然后用exists 这三个个key来判断;

但是很遗憾,exists只能判断这些key有多少个是在redis里已经有,而不能判断具体是哪个有哪个没有;

所以这里用keys来判断(keys要慎用,千万不能用keys *这种写法,否则因为redis是单线程处理,这个操作可能耗时十分长导致其他redis请求hung住【可以考虑scan,但是获取的key可能会有重复,需要客户端去重】),即比如要获取的是2022-10-22 10:21到2022-10-22 10:51,那么就可以用keys KKK:2022102210??来获取所有的key(因为这里有匹配模式,我们清楚的知道这里获取的key最多只会有几十个),然后再用这个数据和新的请求要拿到的数据进行对比,得出哪些还没缓存的,再去拿缺失的部分;

当然,也可以直接把2022-10-22 10:21到2022-10-22 10:51转换为key后,直接拿这些数据(32到51的就会返回nil),没有的则再用接口拿剩下的部分;

如果剩下的部分是连续的时间段还好,不连续就看和接口提供方沟通下看能否提供可以设置多个时间段的方式;

标签:10,缓存,key,22,51,redis,KKK,用法,2022
From: https://www.cnblogs.com/silentdoer/p/16815879.html

相关文章

  • Redis笔记8
    (ObjectivelyDown)stateonlyifatleast<quorum>sentinelsagree. #(客观下降)仅状态至少法定人数同意。 NotethatwhateveristheODOWNquorum,aSentinelw......
  • Redis笔记8
    (ObjectivelyDown)stateonlyifatleast<quorum>sentinelsagree. #(客观下降)仅状态至少法定人数同意。 NotethatwhateveristheODOWNquorum,aSentinelw......
  • Redis常见问题
    一.Redis的持久化方式?RDB:定时对数据内存做快照存储AOF:记录执行的命令默认开启RDB,AOF需手动设置开启使用;实际的应用中,采取RDB+AOF结合使用二者区别RDBAOF数......
  • 基于Redis实现用户签到、UV统计的功能
    用户签到在Redis中使用位图(BitMap)来存储签到信息,可以大大减小开销。同时在设计redis数据结构时,在key中加上时间、用户id等信息,可以统计该用户在某个时间段内的签到情况。(b......
  • vue 中 slot 的使用方式,以及作用域插槽的用法
     使用场景:vue提供组件插槽能力,允许开发者在封装组件时,把不确定的部分定义为插槽‘<slot>夹着内容默认显示内容,如果不给插槽slot传东西,则使用<slot>夹着的内容在......
  • 移位运算用法总结
    参考链接:https://blog.csdn.net/qq_34364995/article/details/80544465比如1<<left,看怎么移位的1的二进制为0000000000000001,比如当left=2时,即1要左移2位,变成000000......
  • JavaScript中的Generator生成器的基本用法
    ES6入门-阮一峰:Generator函数1.介绍Generator生成器是ES6提供的一种异步编程解决方案。是一个极为灵活的结构,拥有在函数块中暂停和恢复代码执行的能力。执行Gen......
  • Redis搭建Sentinel实验环境
    环境准备在物理机上启动3台物理机,IP地址分别为:192.168.56.4,192.168.56.5,192.168.56.6。1.确保3台虚拟机的网络是相互联通的。2.确保已经在3台虚拟机上安装了redis(本示例......
  • 基于Redis实现好友动态推送、附近商铺功能
    好友动态推送基于推模式实现探店笔记,一个人发布blog,在将blog保存到数据库的同时将blog发送到每个粉丝的收信箱中;收信箱按时间戳进行排序(类似于朋友圈);收信箱查询数据时按滚......
  • Go语言channel用法总结
    channel的基本操作和注意事项channel存在3种状态:nil,未初始化的状态,只进行了声明,或者手动赋值为nilactive,正常的channel,可读或者可写closed,已关闭,关闭的channel并不是n......