Spring Boot Cacheable - 缓存空值

4

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

但问题在于,由于某些原因,Spring只缓存非null值,而不缓存null值。

以下是我的代码:

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

...

我已经尝试过所有的方法,甚至设置了unless = "#result != null || #result == null",但这也没有帮助。你有什么指点吗?
2个回答

4

请检查您的缓存管理器设置。

例如:RedisCacheManager有一个重载的构造函数,您可以在其中指定cacheNullValues; 默认情况下为false - 尝试将其设置为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。

3

1
对我没有用。还是一样的。只有在可选对象内部的对象不为空时,它才会缓存。 - Tariq
你的缓存提供程序支持缓存空值吗? - Richard
是的,我正在使用Redis缓存。因此它支持空值。 - Tariq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接