NutzSite

Java快速开发框架


缓存

<h1><center>缓存</center></h1> <p>互联网软件神速发展,用户的体验度是判断一个软件好坏的重要原因,所以缓存就是必不可少的一个神器。在多线程高并发场景中往往是离不开cache的,需要根据不同的应用场景来需要选择不同的cache,比如分布式缓存如redis、memcached,还有本地(进程内)缓存如ehcache、GuavaCache、Caffeine。</p> <p>说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中的一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。由于Guava的大量使用,Guava Cache也得到了大量的应用。但是,Guava Cache的性能一定是最好的吗?也许,曾经,它的性能是非常不错的。但所谓长江后浪推前浪,总会有更加优秀的技术出现。接下来介绍一个比Guava Cache性能更高的缓存框架:Caffeine。 下面是读取性能: <img src="https://www.showdoc.com.cn/server/api/attachment/visitfile/sign/21f099698505a9dbfc43183be9f458f5?showdoc=.jpg" alt="" /> 详细信息可以查看:<a href="https://github.com/ben-manes/caffeine/wiki/Benchmarks">Benchmarks</a></p> <p>nutz集成了 后 使用注解就可以轻松使用 省去 很多麻烦的配置 配置 resources下面的<code>application.properties</code>加入以下语句</p> <pre><code># cache.缓存名称=缓存最大数量,最大空闲时间,最大存活时间 caffeine.cache.live3s=100,0,3000 # 也可以这样配置,配置项分别为:maxSize, maxIdle, maxLive caffeine.cache.idel3s.maxSize=100 caffeine.cache.idel3s.maxIdle=3000</code></pre> <p>使用方法</p> <pre><code> @Ok("raw") @At("/time/now") @Cache public String now() { return "刷新试试,我动算我输,╭(╯^╰)╮ "+System.currentTimeMillis(); } @Ok("raw") @At("/time/live3s") @Cache("live3s") public String live10s() { return "刷新试试,我每3秒变一下,俗称 “活不过3秒”,╭(╯^╰)╮ "+System.currentTimeMillis(); } @Ok("raw") @At("/time/idel3s") @Cache("idel3s") public String idel10s() { return "3秒不续命,我就玩完 ╭(╯^╰)╮ "+System.currentTimeMillis(); } public static void main(String[] args) throws Exception { new NbApp().setPrintProcDoc(true).run(); }</code></pre> <p>本项目中 实现 UpdateStrategy 接口 实现更新缓存 代码如下</p> <pre><code>package org.nutz.boot.starter.caffeine; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; import org.nutz.mvc.Mvcs; /** * caffeine 更新缓存方法 实现 * @Author: Haimming * @Date: 2019-08-08 09:40 * @Version 1.0 */ @IocBean public class MvcUpdateStrategy implements UpdateStrategy { /** * 凡是request中携带update=true,都强制更新缓存 * @param key * @return */ @Override public boolean shouldUpdate(String key) { return Lang.parseBoolean(Mvcs.getReq().getParameter("update")); } } </code></pre>

页面列表

ITEM_HTML