缓存雪崩和缓存穿透解决方案

缓存雪崩和缓存穿透解决方案

缓存雪崩和缓存穿透
缓存雪崩:简单的说就是缓存失效,原本该访问缓存的数据直接访问数据库,从而造成数据库和内存压力大,严重的可能导致数据库宕机、服务器崩溃。
解决方案:
1.使用分布式锁或者对列控制读数据库写缓存的线程数,保证这有一个个线程进行操作。缺 点降低了系统的吞吐量
2.redis中的key 失效时间尽量设置分布均匀
3.使用mq来解决缓存雪崩效应。
当大量请求访问redis中没有值,把查询参数投放在消息队列,消费者接收到消息查询数据库得到结果使用同步方式返回给生成者。
消息中间件具有缓存消息的功能
4.设置一级二级缓存。如果一级缓存失效的时候,让访问请求二级缓存,需要注意二级缓存失效时间最好比一级缓存失效时间长一点。
5.如果是某一台redis服务器宕机,可以搭建redis主备 进行高可用。

缓存上一级还可以设置服务降级、隔离、容错、熔断等防止雪崩。—-springcloud服务治理框架,服务容错机制hystrix

缓存穿透:
缓存的流程:用户查询数据的时候先查询缓存,如果缓存没有,在查询数据库,把查询得到的结果放入一份在缓存中,下次在查询的时候如果缓存中有数据,就直接返回给客户端从而降低数据库的压力。
缓存穿透:用户查询的数据在数据库中没有,从而缓存中也没有用户查询数据的结果。如果有人恶意攻击使用这个查询数据一直进行查询,导致数据库压力增大。

解决方案:1.把查询的空结果也缓存一份。这样就可以简单有效的避免绕过缓存直接查询数据库。
2.同时也可以单独设置个缓存区域存储空值,对要查询的key进行预先校验,然后再放行给后面的正常缓存处理逻辑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100801.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号