【问题标题】:How to make @Cacheable return null when not found in cache but do not cache the result?在缓存中找不到但不缓存结果时如何使@Cacheable返回null?
【发布时间】:2015-06-30 08:43:32
【问题描述】:

遵循@Cacheable注解

@Cacheable(value="books", key="#isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
  • 根据键在缓存中查找
  • 如果找到则从缓存中返回结果
  • 如果没有找到评估方法
  • 更新缓存
  • 返回结果

这样下次使用相同的参数调用此方法时,将从缓存中获取它。

我想要的只是

  • 根据key在缓存中查找
  • 如果找到则从缓存中返回结果
  • 如果没有找到返回null

我不想在缓存未命中的情况下更新缓存,有没有办法使用 spring Annotation 来做到这一点

【问题讨论】:

  • 这不是 @Cacheable 注释的真正用例,而且它根本不是一个常见的用例,所以我猜不,你不能用 spring 做到这一点注释,并且您必须自己编写 findBookInCache(ISBN isbn) 方法。

标签: spring caching annotations


【解决方案1】:

这就是我最终得到的结果,诀窍是使用“除非”对我们有利

@Cacheable(value="books", key="#isbn", unless = "#result == null")
public Book findBookFromCache(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
{
    return null;
}

这个方法

  • 根据键在缓存中查找
  • 如果找到则从缓存中返回结果
  • 如果未找到,则评估返回 null 的方法
  • 返回值与除非条件匹配(总是返回真)
  • 空值不被缓存
  • 空值返回给调用者

【讨论】:

  • 嗨,我有一个场景,结果是异常,除非我的代码中没有配置。所以产生的异常被缓存到服务器。如何使用“除非”来防止这种情况?我可以在里面配置异常吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2013-04-29
  • 2023-01-12
  • 2018-03-06
  • 2018-03-09
  • 2012-06-05
  • 2016-12-23
相关资源
最近更新 更多