缓存穿透

本文探讨了在软件系统中使用缓存时遇到的缓存穿透问题,即查询空值时持续访问数据库导致的压力增大。文章提出了通过在缓存中存储空值标记并设置过期时间来缓解这一问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值