• 缓存中常见的概念及解决方案


    缓存中常见的概念及解决方案


    缓存穿透

    1、概念

    用户查询数据,在数据库中以及缓存中(redis)都查询不到,导致每次请求来时,缓存(redis)中查询一次,数据库查询一次,最后返回空,每次请求都会有俩次无用的查询,缓存命中率低

    2、解决方案

    1. 对null值设置缓存,每隔一段时间过期
    2. 使用布隆过滤器缓存需要的值,直接过滤 掉找不到值得key

    缓存雪崩

    1、概念

    缓存(redis)服务挂掉,缓存在同一时间发生大面积的实效,请求每次查完数据未能将数据缓存倒数据库中,导致所有的请求都会去查询数据库,造成同一时间数据库的cpu及内存负载过高的问题,甚至宕机。

    2、解决方案

    1)redis高可用,使用哨兵部署或者集群部署模式,保证缓存服务的高可用
    2)为key设置不同的过期时间,让key的过期时间均衡分布,防止同一时间缓存大面积的实效。
    3)使用锁和队列,对请求进行异步处理,降低数据库的压力。
    4)使用缓存降级策略(使用guava或ehcache等本地缓存 或者对服务访问进行限流、熔断及降级)

    缓存击穿

    1、概念

    某个key非常热点,在不停的坑着大并发,大并发集中对这一个点进行访问,当这个key失效的瞬间,持续的高并发会击破缓存,直接请求数据库,导致数据库的cpu及内存负载过高,甚至宕机。

    2、解决方案

    1)设置某些热点key的过期时间(延长或者永不过期)
    2) mutex key互斥锁

  • 相关阅读:
    将TinyXml快速入门的接口面向对象化
    Java EE6 核心特征:Bean Validation 解析
    风花雪月(三)
    跑步破百
    在VC6中改变导入库名称的方法
    Java EE6 核心特征:Bean Validation 解析
    古哥,一路走好
    boost_1_42在VS环境下的完全编译
    总结一下__declspec(dllimport)的作用
    解决MySQL server has gone away
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/10759519.html
Copyright © 2020-2023  润新知