场景: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),没有的则再用接口拿剩下的部分;

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

原文地址:http://www.cnblogs.com/silentdoer/p/16815879.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性