- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Spring Boot缓存实战 Caffeine示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Caffeine和Spring Boot集成 。
Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代Guava。如果出现Caffeine,CaffeineCacheManager将会自动配置。使用spring.cache.cache-names属性可以在启动时创建缓存,并可以通过以下配置进行自定义(按顺序):
例如,以下配置创建一个foo和bar缓存,最大数量为500,存活时间为10分钟:
1
2
|
spring.cache.cache-names=foo,bar
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
|
除此之外,如果定义了com.github.benmanes.caffeine.cache.CacheLoader,它会自动关联到CaffeineCacheManager。由于该CacheLoader将关联被该缓存管理器管理的所有缓存,所以它必须定义为CacheLoader<Object, Object>,自动配置将忽略所有泛型类型.
引入依赖 。
1
2
3
4
5
6
7
8
9
|
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-cache</
artifactId
>
</
dependency
>
<
dependency
>
<
groupId
>com.github.ben-manes.caffeine</
groupId
>
<
artifactId
>caffeine</
artifactId
>
<
version
>2.6.0</
version
>
</
dependency
>
|
开启缓存的支持 。
使用@EnableCaching注解让Spring Boot开启对缓存的支持 。
1
2
3
4
5
6
7
8
|
@SpringBootApplication
@EnableCaching
// 开启缓存,需要显示的指定
public
class
SpringBootStudentCacheCaffeineApplication {
public
static
void
main(String[] args) {
SpringApplication.run(SpringBootStudentCacheCaffeineApplication.
class
, args);
}
}
|
配置文件 。
新增对缓存的特殊配置,如最大容量、过期时间等 。
1
2
|
spring.cache.cache-names=people
spring.cache.caffeine.spec=initialCapacity=50,maximumSize=500,expireAfterWrite=10s,refreshAfterWrite=5s
|
如果使用了refreshAfterWrite配置还必须指定一个CacheLoader,如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/**
* 必须要指定这个Bean,refreshAfterWrite=5s这个配置属性才生效
*
* @return
*/
@Bean
public
CacheLoader<Object, Object> cacheLoader() {
CacheLoader<Object, Object> cacheLoader =
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 {
return
oldValue;
}
};
return
cacheLoader;
}
|
Caffeine配置说明:
注意:
示例代码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/**
* @author yuhao.wang
*/
@Service
public
class
PersonServiceImpl
implements
PersonService {
private
static
final
Logger logger = LoggerFactory.getLogger(PersonServiceImpl.
class
);
@Autowired
PersonRepository personRepository;
@Override
@CachePut
(value =
"people"
, key =
"#person.id"
)
public
Person save(Person person) {
Person p = personRepository.save(person);
logger.info(
"为id、key为:"
+ p.getId() +
"数据做了缓存"
);
return
p;
}
@Override
@CacheEvict
(value =
"people"
)
//2
public
void
remove(Long id) {
logger.info(
"删除了id、key为"
+ id +
"的数据缓存"
);
//这里不做实际删除操作
}
/**
* Cacheable
* value:缓存key的前缀。
* key:缓存key的后缀。
* sync:设置如果缓存过期是不是只放一个请求去请求数据库,其他请求阻塞,默认是false。
*/
@Override
@Cacheable
(value =
"people"
, key =
"#person.id"
, sync =
true
)
public
Person findOne(Person person, String a, String[] b, List<Long> c) {
Person p = personRepository.findOne(person.getId());
logger.info(
"为id、key为:"
+ p.getId() +
"数据做了缓存"
);
return
p;
}
@Override
@Cacheable
(value =
"people1"
)
//3
public
Person findOne1() {
Person p = personRepository.findOne(2L);
logger.info(
"为id、key为:"
+ p.getId() +
"数据做了缓存"
);
return
p;
}
@Override
@Cacheable
(value =
"people2"
)
//3
public
Person findOne2(Person person) {
Person p = personRepository.findOne(person.getId());
logger.info(
"为id、key为:"
+ p.getId() +
"数据做了缓存"
);
return
p;
}
}
|
源码:https://github.com/wyh-spring-ecosystem-student/spring-boot-student/tree/releases 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.jianshu.com/p/c72fb0c787fc 。
最后此篇关于Spring Boot缓存实战 Caffeine示例的文章就讲到这里了,如果你想了解更多关于Spring Boot缓存实战 Caffeine示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我使用身份验证 API 获取 token 并使用其他服务。此 API 返回 token 和过期时间。有可能获得它返回的过期时间并用这些值设置 expire_after_write 吗?目前此属性在 a
我使用的是 Caffeine v2.8.5,我想创建一个基于以下内容的可变到期缓存: 值(value)的创造/更新 最后一次访问(读取)此值。 无论先发生什么都应该触发该条目的删除。 缓存将成为三层值
我正在尝试使用 Caffeine 创建一个简单的(非加载)缓存。 Cache countsCache = CacheBuilder.newBuilder().build(); 编译失败,并
我使用的是 Caffeine v2.8.5,我想创建一个基于以下内容的可变到期缓存: 值(value)的创造/更新 最后一次访问(读取)此值。 无论先发生什么都应该触发该条目的删除。 缓存将成为三层值
引言 前面我们有学习Caffeine 《本地缓存性能之王Caffeine》,并且也提到SpringBoot默认使用的本地缓存也是Caffeine啦,今天我们来看看Caffeine如何与
1.概述 转载:真正的缓存之王,Google Guava 只是弟弟 Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数
我在我的项目 ( https://github.com/blemale/scaffeine ) 中使用了 Scaffeine,它是 Caffeine ( https://github.com/ben-
当我单独运行它们时,我为 Caffeine CacheLoader 实现编写的单元测试(JUnit、Mockito)全部成功,但当我一起运行它们时,其中一个测试失败了。我相信我在所有测试对象设置中都遵
我希望添加几个不同的 LoadingCache到 Spring CacheManager ,但是我不明白如何使用 CaffeineCacheManager 实现这一点。看来只有一个加载器可以刷新内容,
我正在尝试使用缓存来根据请求类型维护可路由服务器的列表。 LoadingCache serversByRequestType = Caffeine.newBuilder() .writer(new
我想在缓存数据或逐出数据后获取自定义缓存中条目的详细信息。 我尝试使用执行器依赖项来获取“执行器/指标”路径以获取详细信息,但我得到了空的 tomcat 服务器缓存。没有任何迹象表明我的自定义缓存为
我想使用咖啡因进行缓存,并且需要有一个后写功能。我想限制写入数据库的次数。 documentation谈到回写缓存,所以它应该是可能的,但没有关于如何配置它的示例。我已经实现了一个 CacheWrit
Javadoc说: Returns a view of the entries stored in this cache as a thread-safe map. Modifications mad
我正在尝试编写一个接受 CacheWriter 的 AsyncLoadingCache,但我收到了 IllegalStateException。 这是我的代码: CacheWriter cacheWr
spring boot中集成了spring cache,并有多种缓存方式的实现,如:redis、caffeine、jcache、ehcache等等。但如果只用一种缓存,要么会有较大的网络消耗(如re
我使用 Web 和缓存依赖项创建 Spring Boot 2.0 Starter 项目: org.springframework.boot spring-b
我需要在不同的时间间隔检查一些端点,所以我设置了 Caffeine 的缓存构建器。 this.localeWeatherCache = newBuilder().build(); this.cur
我需要在不同的时间间隔检查一些端点,所以我设置了 Caffeine 的缓存构建器。 this.localeWeatherCache = newBuilder().build(); this.cur
我尝试使用咖啡因缓存并遇到问题: 假设缓存为空,我查询一个值,它使用加载程序并将新值加载到缓存中,2天后我查询相同的值,并得到旧值首先,然后在单独的线程上启动刷新,如果可以加载,则加载新值。 Caff
这里是 Java 8。有什么办法可以用Caffeine缓存框架(或任何其他与此相关的 JSR-107 兼容框架)在记录被逐出缓存时收到通知? 也许是某种EvictionEventListener之类的
我是一名优秀的程序员,十分优秀!