在高并发系统中,Redis是最常见的缓存系统。但是如果Redis使用稍有不慎,就可能引起缓存击穿、缓存穿透、缓存雪崩等问题。本文分别分析引起上述问题的原因及部分方案。
1,缓存击穿
问题原因:针对热点数据,设置了过期时间,数据在某时刻批量过期缓存击穿,导致大部分用户请求都直接落在数据库上。
解决办法:针对热点数据,不设置过期时间;或者在访问数据的时候,重新更新数据的过期时间;
2,缓存穿透
问题原因:系统频繁访问一个不存在的数据(缓存层和数据库层),每次访问redis,发现数据都不存在,然后再去数据库访问,依旧不存在。导致redis没起到缓存作用。由于数据库不存在数据,返回空值缓存击穿,而在redis缓存中,不存储空结果。
解决办法1:在缓存系统中将空对象缓存起来,同时设置合理过期时间;
解决办法2:使用布隆迪过滤器,将查询的参数都存储到一个bitmap中。在查询缓存前,在里面对参数进行验证。如果验证的bitmap中存在,则进行底层缓存的数据查询,如果bitmap中不存在查询参数,则进行拦截,不再进行缓存的数据查询。
3,缓存雪崩
问题原因:在redis缓存中,大量的key集体过期失效,所有并发流量直接打到数据库,导致数据库层请求暴增,用不了多久,数据库服务就会崩溃。
解决办法1:合理设置缓存的失效时间,在失效时间的基础上,加一个随机数,避免缓存统一时间失效;
解决办法2:数据库设置合理的过载保护或者应用层限流;
解决办法3:多级缓存,redis缓存、本地缓存等;
限时特惠:本站每日持续更新海量各大内部网赚创业教程,会员可以下载全站资源点击查看详情
站长微信:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...