如果使用cachebuilder,如何为具体缓存定制expireafterwrite?

olmpazwi  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(508)

基于这个答案,我尝试使用定制的 expireAfterWrite 用于“自定义缓存”
因此,我的配置如下所示:

  1. @Configuration
  2. @EnableCaching
  3. public class CaffeineCacheConfig {
  4. ...
  5. @Bean
  6. public CaffeineCacheManager cacheManager(Caffeine<Object, Object> caffeineCacheBuilder) {
  7. CaffeineCacheManager result = new CaffeineCacheManager();
  8. result.setCaffeine(caffeineCacheBuilder);
  9. return result;
  10. }
  11. @Bean
  12. public Caffeine<Object, Object> caffeineCacheBuilder() {
  13. return Caffeine.newBuilder()
  14. .maximumSize(10000)
  15. .expireAfterWrite(60, TimeUnit.SECONDS)
  16. .recordStats();
  17. }
  18. @Bean
  19. public CaffeineCache customCache() {
  20. return new CaffeineCache("customCache",
  21. Caffeine.newBuilder()
  22. .maximumSize(10000)
  23. .expireAfterWrite(60, TimeUnit.MINUTES)
  24. .recordStats()
  25. .build());
  26. }
  27. }

然后在代码库中,我使用:
“自定义缓存”

  1. Cache cache = cacheManager.getCache("customCache")
  2. String result = cache.get("myKey", () -> "cachedValue")

根据我的实验,它在缓存中只保留了60秒的值,我预计是60分钟。
如何达到预期的效果?

ss2ws0br

ss2ws0br1#

我认为更好的方法是如下。

  1. @Configuration
  2. @EnableCaching
  3. public class CaffeineCacheConfig
  4. {
  5. @Bean
  6. public CacheManager cacheManager(
  7. @Qualifier("oneMinuteCache") final Cache<Object, Object> oneMinuteCache,
  8. @Qualifier("oneHourCache") final Cache<Object, Object> oneHourCache)
  9. {
  10. SimpleCacheManager cacheManager = new SimpleCacheManager();
  11. cacheManager.setCaches(Arrays.asList(
  12. new CaffeineCache("oneMinuteCache", oneMinuteCache),
  13. new CaffeineCache("oneHourCache", oneHourCache)));
  14. return cacheManager;
  15. }
  16. @Bean
  17. public Cache<Object, Object> oneMinuteCache()
  18. {
  19. return Caffeine.newBuilder()
  20. .maximumSize(10000)
  21. .expireAfterWrite(1, TimeUnit.MINUTES)
  22. .recordStats()
  23. .build();
  24. }
  25. @Bean
  26. public Cache<Object, Object> oneHourCache()
  27. {
  28. return Caffeine.newBuilder()
  29. .maximumSize(10000)
  30. .expireAfterWrite(1, TimeUnit.HOURS)
  31. .recordStats()
  32. .build();
  33. }
  34. }
展开查看全部

相关问题