查询条件变更后的缓存数据怎样处理

查询条件变更后的缓存数据怎样处理


在公司的项目里,负责过个人中心模块,需要向用户展示订单列表,因为涉及到性能问题,所以直接将最新的100条订单缓存到redis中,结构非常简单,key是用户pin,值是顺序的订单list。
突然产品提出,需要将自助收银的订单过滤掉,这时该怎么做呢,数据库使用条件查询就过滤出来了,但是缓存数据怎样处理
0、直接在读出缓存列表,使用程序过滤不满足条件的订单,这种方式一般不考虑,如果前100条都不满足,可能就直接吐出空了,要考虑更多的机制弥补。
1、如果考虑到业务的急迫性和严格性不高,无需立刻下线所有人的,缓存有效期是7天,这样,根本不用动,反正7天后所有人的订单列表都是根据数据库查询出来的,都不会再有自助收银的单子(从业务的角度考虑就能方便解决问题)
2、使用程序扫数据,强制所有缓存过期,重新覆盖,这种优缺点明显,优点简单求,缺点,面对千万甚至上亿的数据量时数据库和缓存压力山大。(满足小数据量情况)
3、建立缓存标记位(增加一份新缓存,但空间占用很小,只是一个标记),伪代码如下
orderList = null;
if(redis.get(pin+“flag”)==null){
//强制更新缓存
orderList = dao.from(db);
redis.set(pin,orderList,TimeOutA)
redis.set(pin+“flag”,true,TimeOutB)
}else{
redis.get(pin)
}
return orderList;

其中TimeOutB<=TimeOutA
这种方案,只在用户使用列表时,才更新缓存,比较平缓,缺点,需要额外逻辑处理,容易让人不解,并占用一定缓存空间
4、接入其它更复杂的系统,比如es等(这种方式是不是更适合大中台概念),缺点,对于某一个系统来讲,动辄就引入es,太复杂,成本较高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值