jus*_*ser 4 redis spring-data-redis spring-cache
我正在春季缓存抽象注释,以将缓存应用于我的服务方法。
由于我将Redis用作缓存存储,因此我想使用在特定时间使缓存过期的选项,因为Redis支持该选项。Redis中的expireat命令可用于设置将来的到期时间。
我不确定使用RedisCache时如何对属于缓存的键进行操作。
我试图通过创建一个bean来定制RedisCacheManager。
我看到有一个暴露的getNativeCache()方法。但是我没有找到任何方法来设置使用它的expireat的值。
如果有一种自定义RedisCacheManager的方法,以便特定缓存的所有键在到期时使用同一时间,请告诉我。
小智 6
@Bean (name="cacheManager")
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration conf_ready_info = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMillis(50000));
RedisCacheConfiguration conf_base_info = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMillis(60000));
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<String, RedisCacheConfiguration>();
cacheConfigurations.put("base_info", conf_base_info);
cacheConfigurations.put("ready_info", conf_ready_info);
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(connectionFactory)
.withInitialCacheConfigurations(cacheConfigurations).build();
}
@Cacheable(value = "ready_info", key = "#aid")
public String findByAid(String aid) throws Exception {
String readyInfo = "";
return readyInfo;
}
Run Code Online (Sandbox Code Playgroud)
其实是有的。请检查以下内容:
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
.entryTtl(<your duration>)
.computePrefixWith(CacheKeyPrefix.simple())
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
.cacheDefaults(configuration)
.build();
Run Code Online (Sandbox Code Playgroud)
我正在使用 2.0.4.RELEASE 版本的 spring boot。如果您使用的是旧版本,您可以这样做:
RedisCacheManager cacheManager =
new RedisCacheManager(
redisTemplate,//redis template
Arrays.asList("my-cahce"),//loads these caches at startup
false);//Do not allow null values
cacheManager.setLoadRemoteCachesOnStartup(true);
cacheManager.setCachePrefix(new DefaultRedisCachePrefix());
cacheManager.setDefaultExpiration(TimeUnit.SECONDS.convert(365, TimeUnit.DAYS));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |