当我们进行java开发时,当遇到页面数据过多或者复杂,会有很多慢sql,此时除了优化sql外,还可以通过缓存的方式来处理:
有如下方案:
1.整个页面做缓存,key为页数,value为整个页面的数据
这个问题很明显,当我们页面的数据被更新时,数据就错了,所以此方法不可行
2.整个页面做缓存,key为页数,value为整个页面的数据,此外,当存在新增数据的时候,可以判断是第几页的数据,然后将此页以及后面页面的缓存都删除,当更新数据的时候,将此页缓存删除,当删除的时候,和新增类似,也是将相关页面的缓存删除
这个问题是,当操作数据的时候,改动过大,颗粒度控制不够细
3.我们不用整个页面做缓存,用每条数据做缓存,当我们查询出每页数据的时候,把每条数据的id(唯一标识)作为key,将一条数据作为value,当我们再次查询的时候,只查询分页数据中的id(大概率相对于查询整个数据速度会快很多),然后根据这个id去查询缓存,把整个页面的数据封装好返回给前端即可;这样新增或者删除缓存都不受影响,当更新数据的时候,只需要删除对应一条的缓存即可
这样改动最小,但是小概率会存在查询整个页面的id时间也很长的情况,这样就优先做sql优化比较好