在缓存中找不到但不缓存结果时如何使@Cacheable返回null?
Posted
技术标签:
【中文标题】在缓存中找不到但不缓存结果时如何使@Cacheable返回null?【英文标题】:How to make @Cacheable return null when not found in cache but do not cache the result? 【发布时间】: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)
方法。
【参考方案1】:
这就是我最终得到的结果,诀窍是使用“除非”对我们有利
@Cacheable(value="books", key="#isbn", unless = "#result == null")
public Book findBookFromCache(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
return null;
这个方法
根据键在缓存中查找 如果找到则从缓存中返回结果 如果未找到,则评估返回 null 的方法 返回值与除非条件匹配(总是返回真) 空值不被缓存 空值返回给调用者【讨论】:
嗨,我有一个场景,结果是异常,除非我的代码中没有配置。所以产生的异常被缓存到服务器。如何使用“除非”来防止这种情况?我可以在里面配置异常吗?以上是关于在缓存中找不到但不缓存结果时如何使@Cacheable返回null?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Terraform 使 AWS CloudFront Distribution 缓存失效?
我得到 - 错误:在缓存中找不到条目 - 在 sls 部署期间
在我们的缓存中找不到任何与“最新”匹配的“cra-template-typescript”版本
Lua with nginx in openresty:如果在 redis 缓存中找不到数据,则将请求传递给 FastCGI