首页 > 编程知识 正文

缓存击穿缓存雪崩缓存穿透,缓存穿透和缓存击穿有什么区别

时间:2023-05-04 22:44:14 阅读:29669 作者:536

使用GuavaCache很容易,因为如果需要将本地缓存添加到从GuavaCache的基本用法数据库获取的数据中,则缓存10s已过期:

初始化Cache对象并定义load方法,或在获取值时传递load方法即可

定义cacheCacheString,object cache=cache builder.new builder ().maximumsize(100 ).expireafterwrite ) 10L,timeunit //但是,这种写法有现金崩溃的危险。

高速缓存崩溃是指在高速缓存过期的瞬间,出现了大量的并发请求。 他们可能会因为缓存被禁用而加载和执行数据库操作,从而对数据库造成毁灭性打击。 guava本身同时控制load操作,但访问过多可能会阻止大量线程,导致线程资源已满,服务异常。

出于这种考虑,guava cache还提供了刷新/重新加载机制。 与expired/load不同,可以指定在缓存禁用之前刷新缓存。 让我们先来看看使用方法:

cache=cache builder.new builder (.maximumsize ) ) 100 ).expireafterwrite ) cacheexpiredtime, TimeUnit.SECONDS ).re fonds time unit.seconds (.build (newcacheloaderstring, Object ) ) @ overridepublicobjectload (字符串密钥)/load data from } @ overridepubliclistenablefutureintegerreload (字符串密钥) 对象old value (listenablefuturetaskintegerlistenablefuturetask=listenablefuturetask.create (-)//loaddatafromDOM ); 返回侦听功能表任务; }; ); guava cache缓存是一种过期机制,不依赖异步线程,禁用操作通过调用线程来确定。

其中两个配置expireAfterWrite表示缓存在一段时间后将禁用,到了设置时间时调用get将清理数据,调用load方法重新加载并缓存数据,最后

另一方面,refreshAfterWrite表示在一段时间后重新刷新缓存,并直接返回缓存中的旧值(假设到达设置时间后缓存已过期),然后启动异步线程刷新旧值。

要在配置期间合理配置cacheExpiredTime和cacheFreshTime时间,cacheFreshTime必须小于cacheExpiredTime。 其目的只是在缓存被禁用之前,通过使用reload异步线程进行刷新,有效地避免缓存破坏。 设置具体时间长度需要参考请求的实际频率。 如果请求间隔较长,并且每次请求到来都超过expireTime,则设置refreshTime没有意义。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。