Spring Boot Cacheable - 缓存空值

时间:2017-08-30 07:53:04

标签: java spring spring-mvc caching

我正在使用@Cacheable注释来缓存我的方法的结果。出于性能原因,我想缓存从方法返回的null和非空值。

但问题是Spring正在缓存非空值但由于某种原因没有缓存null。

这是我的代码:

@Cacheable(
            cacheManager = "promoCacheManager",
            value = "promos:campaign",
            key = "'promos:campaign:'.concat(#currencyId)"
    )
    public PromosDto getPromosByCurrency(Integer currencyId) {

...

我尝试过所有的事情。即使我设置

unless = "#result != null || #result == null"

但这并没有帮助。 关于这个的任何指针?

2 个答案:

答案 0 :(得分:3)

检查缓存管理器设置。

例如: RedisCacheManager有一个重载的构造函数,您可以在其中指定cacheNullValues;默认情况下这是假的 - 尝试将其设置为true。

https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/cache/RedisCacheManager.html#RedisCacheManager-org.springframework.data.redis.core.RedisOperations-java.util.Collection-boolean-

还要记住:

  

注意启用cacheNullValues时,请确保RedisOperations使用的RedisSerializer能够序列化NullValue。

答案 1 :(得分:2)

为什么不返回Optional<PromosDto>来安全地包装null。根据{{​​3}}

,那应该缓存