Springboot Caffeine本地缓存使用示例
程序员文章站
2022-09-05 13:37:30
caffeine是使用java8对guava缓存的重写版本性能有很大提升一 依赖 org.springframework.b...
caffeine是使用java8对guava缓存的重写版本性能有很大提升
一 依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-cache</artifactid> </dependency> <!-- caffeine --> <dependency> <groupid>com.github.ben-manes.caffeine</groupid> <artifactid>caffeine</artifactid> <version>2.7.0</version> </dependency>
二 配置缓存,单独使用
只需要配置bean就可以了,然后进行数据读写,注意这里提供了很多强大的自定义配置,可以查看文档详细配置
//定义缓存,可直接使用 @bean public loadingcache expirycache(){ loadingcache<string, object> loadingcache = caffeine.newbuilder() .initialcapacity(100) .maximumsize(1000) //缓存写入/删除监控 .writer(new cachewriter<object, object>() { @override public void write(object key, object value) { //此方法是同步阻塞的 system.out.println("--缓存写入--:key=" + key + ", value=" + value); } @override public void delete(object key, object value, removalcause cause) { system.out.println("--缓存删除--:key=" + key); } }) .expireafteraccess(1, timeunit.minutes) //过期时间 .build((string key)->"刷新的数据"); //cacheload实现类,刷新时候调用 loadingcache.put("name","侯征"); return loadingcache; }
测试使用:
@autowired private loadingcache loadingcache; @getmapping("/get") public object getvalue(string key){ return loadingcache.get(key); } @getmapping("/add") public void addvalue(string value){ loadingcache.put(value,value); } @getmapping("/delete") public void deletevalue(string key){ loadingcache.invalidate(key); loadingcache.invalidateall();//清楚所有 } @getmapping("/refresh") public void refreshvalue(string key){ //刷新时会根据build方法中中指定的cacheload重新加载 loadingcache.refresh(key); }
三 配置cachemanager,和spring缓存注解一起使用
//配置cachemanager @bean(name = "caffeine") public cachemanager cachemanagerwithcaffeine() { caffeinecachemanager cachemanager = new caffeinecachemanager(); caffeine caffeine = caffeine.newbuilder() //cache的初始容量值 .initialcapacity(100) //maximumsize用来控制cache的最大缓存数量,maximumsize和maximumweight(最大权重)不可以同时使用, .maximumsize(1000) //最后一次写入或者访问后过久过期 .expireafteraccess(500, timeunit.seconds) //创建或更新之后多久刷新,需要设置cacheloader .refreshafterwrite(10, timeunit.seconds); cachemanager.setcaffeine(caffeine); cachemanager.setcacheloader(cacheloader); cachemanager.setcachenames(names);//根据名字可以创建多个cache,但是多个cache使用相同的策略 cachemanager.setallownullvalues(false);//是否允许值为空 return cachemanager; }
配置 cacheload
/** * 必须要指定这个bean,refreshafterwrite配置属性才生效 */ @bean public cacheloader<object, object> cacheloader() { return new cacheloader<object, object>() { @override public object load(object key) throws exception { return null;} // 重写这个方法将oldvalue值返回回去,进而刷新缓存 @override public object reload(object key, object oldvalue) throws exception { system.out.println("--refresh--:"+key); return oldvalue; } }; }
其他就是在service中配置spring的几个缓存注解使用就行了,这里放一张截图,这些注解用法,网上很多:[/code]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。