缓存穿透

来源:互联网 发布:疾病数据库设计 编辑:程序博客网 时间:2024/04/29 11:01

        在项目中使用缓存,请求数据在缓存中没有查询到,就会去持久层(DB)查询,然后在返回数据给请求方的同时,会将数据同步存放在缓存中,以便下次相同数据请求的时候,快速响应并减轻持久层的压力。但是如果该请求数据在持久层也没有查询到,就不会有返回结果存放到缓存中,因此该请求每次都会重复的到持久层查询,使缓存没有起到应有的效果,从而加重了整个系统的压力,并且增大了响应时间,降低了系统的处理速度。

        为了防止缓存穿透,可以将空的响应请求设定成特殊的值(&&...等)保存在缓存中,这样就解决了每次都去持久层查询的问题。但是如果每次请求Key的查询结果为空,都保存特殊值到缓存中,缓存就会变得很大,还有一个问题是可能过段时间后,持久层更新了,有该请求Key的返回,所以需要给这些空Key在缓存中设置存活时间,时间一到就应该移出缓存,并重新到持久层查询。

        当然,在实际项目中,需要仔细分析这些请求Key查询不到响应值的原因,比如是持久层数据录入不全还是请求方使用的无用的请求Key。
0 0