欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

redis分页查询后增加条件处理方式  

程序员文章站 2023-12-26 21:40:27
...

说一种情况:
比如我的订单,缓存是按照pin做key来做的
突然加一个过滤条件,比如轻松购订单不显示了,有以下几种解决方式
1、数据库条件改一下,缓存查询时简单按过滤一下,问题是,分页1-10页,可能第一页有3条,所以返回前端的就是7条

缺点:不严谨,并且要看前端分页是怎样判断最后一页的,如果是根据“当前页条数”<“每页固定条数”就算最后一页,那这种做法不可取
2、还是简单过滤,如果发现当前页不足10条,继续查,补足

缺点:处理复杂,并且有可能影响一点性能
3、强制缓存失效,重新放到缓存中,要做标记,比如pin:XXXX已经做过强制更新这种

具体做法,建立缓存标记位(增加一份新缓存,但空间占用很小,只是一个标记),伪代码如下:

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、直接换key

缺点:有垃圾数据(如果有过期时间,并且较短,可以用),另外会短时间击穿缓存,直接打到数据库

3、接入其它更复杂的系统,比如es等(这种方式是不是更适合大中台概念),缺点,对于某一个系统来讲,动辄就引入es,太复杂,成本较高。

上一篇:

下一篇: