美文网首页
缓存之穿透和雪崩

缓存之穿透和雪崩

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-08-17 07:28 被阅读0次

    1.缓存穿透

    缓存穿透:在某些情况下,大量对于同一个数据的访问,经过了缓存屏障,但是缓存却未能起到应有的保护作用。
    比如 对于一个key查询,数据库中没有这个数据,就会导致缓存中也没有这个数据的存放,每次请求到来都会去查询数据库,缓存根本起不到应有的作用。
    解决方案:

    • 缓存预热,在大量请求到来之前,先主动将该缓存填充好。
    • 流量控制的方式,限制对于同一数据的访问,必须等到前一个完成以后,下一个才能进行。

    2.缓存雪崩

    缓存雪崩:原本起到屏障作用的缓存,如果在一定时间段内,对于大量的请求访问失效,即失去了屏障作用,造成它后方的系统压力过大,引起系统过载、宕机等问题,就叫做缓存雪崩。
    解决方案:限流和预热。

    3.缓存容量失控

    缓存容量的控制,最好是基于缓存容量本身来直接控制。

    4.LRU的致命缺陷

    LRU: Least Recently Used,最少最近使用算法。原理:维护一个限定最大容量的队列,队列头部总是放置最近访问的元素(包括新加入的元素),而在超过容量限制时总是从队尾淘汰元素。


    image.png

    5.缓存框架

    缓存框架主要是2方面,集成方式(编程方式、方法注解、配置文件的注入)和核心要素。

    编程方式

    使用编程的方式来获取缓存数据。一般使用cache-Aside模式应用。

    Cache<String, City> cityCache = cacheManager.createCache("cityCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, City.class, resourcePools));
    cityCache.put("Beijing", beijingInfo); 
    City beijing = cityCache.get("Beijing"); 
    

    方法注解

    @Cacheable(value="getCity", key="#name")
    public City getCity(String name) { ... }
    

    配置文件的注入

    
    <mapper namespace="..." >
      <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
      ...
    </mapper>
    

    web容器的Filter

    可以在tomcat中配置过滤器。

    页面模板中的cache标签

    有一些页面模板支持cache标签或表达式语法,在标签属性或语法参数中可以指定缓存的时间和条件,标签内部的HTML将被缓存起来,以避免在每次模板渲染时都去执行其中的逻辑。

    核心要素

    要素 1:缓存数据的生命周期管理
    要素 2:数据变动规则
    要素 3:核心 API
    要素 4:用户侧 API

    相关文章

      网友评论

          本文标题:缓存之穿透和雪崩

          本文链接:https://www.haomeiwen.com/subject/xuwaqrtx.html