jus*_*ser 5 redis spring-boot spring-cloud spring-boot-actuator spring-cloud-config
我在我的应用程序中使用Spring boot 1.5.15。我添加了Redis作为缓存服务器的缓存支持,并使用 Spring Caching 注释来处理缓存操作。
使用 Spring Caching 和 Redis ,无法为我使用的每个缓存提供单独的过期时间。
因此,我自定义了 CacheManager bean,如下所示,并创建了一个配置类来获取我使用的各个缓存的 yaml 文件中的过期值。
@Bean
@RefreshScope
public CacheManager cacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setUsePrefix(true);
List<CacheConfig> cacheConfigList = appConfig.getCacheConfig();
if (null != cacheConfigList && cacheConfigList.size() > 0) {
cacheManager.setExpires(getCacheExpirySecondsMap(cacheConfigList));
}
return cacheManager;
}
public Map<String, Long> getCacheExpirySecondsMap(List<CacheConfig> cacheConfigList) {
Map<String, Long> cacheConfigMap = cacheConfigList.stream()
.collect(Collectors.toMap(x -> x.getName(), x -> x.getExpirySeconds()));
return cacheConfigMap;
}
Run Code Online (Sandbox Code Playgroud)
我的 CacheConfig bean 有以下字段,
String name;
Long expirySeconds;
Run Code Online (Sandbox Code Playgroud)
我的 AppConfig 有以下字段,
List<CacheConfig> cacheConfig;
Run Code Online (Sandbox Code Playgroud)
通过 yaml 我得到如下值,
app:
defaultCacheExpiryTime: 10
cache-config:
- name: members
expiry-seconds: 60
- name: users
expiry-seconds: 70
- name: plans
expiry-seconds: 85
Run Code Online (Sandbox Code Playgroud)
这很好用。但是,现在我需要在运行时动态更改缓存的到期值而不循环服务。
我尝试将@RefreshScope添加到缓存管理器 bean,并将配置外部化到 Config Repo 中并由 Spring Cloud Config Server 提供服务。但是,当我调用执行器/刷新端点时,我没有看到CacheManager bean 被刷新。但是,我确实看到 CacheConfig bean 已使用这些值进行了更新。另外,我看到对 /refresh 的响应包括过期值已更改的更新字段。
基本上,我想使用新的过期时间更新RedisCacheManager Bean,以便将它们应用于不同缓存的所有现有缓存键和新缓存键。另外,我正在使用Spring Cloud Edgware.SR4。
我分享了我在存储库中使用的代码,包括配置服务器、配置存储库和存储库中的缓存服务,https://github.com/quickfox123/cachedemos
如果有人知道如何解决该问题,请帮助我。
| 归档时间: |
|
| 查看次数: |
1210 次 |
| 最近记录: |