我正在使用@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"
但这并没有帮助。 关于这个的任何指针?
答案 0 :(得分:3)
检查缓存管理器设置。
例如: RedisCacheManager
有一个重载的构造函数,您可以在其中指定cacheNullValues
;默认情况下这是假的 - 尝试将其设置为true。
还要记住:
注意启用cacheNullValues时,请确保RedisOperations使用的RedisSerializer能够序列化NullValue。
答案 1 :(得分:2)
为什么不返回Optional<PromosDto>
来安全地包装null。根据{{3}}