当前位置: 首页 > 知识库问答 >
问题:

参数值为空时如何在@Cacheable中创建多个缓存键

吉栋
2023-03-14

我正在尝试创建具有多个参数值的缓存键。

@Cacheable(cacheNames = "cache_name_", key = "#name + '_' + #id")
private JSONObject getData(String name, String id) throws Exception {

在上面的场景中,我的名字是一个强制字段,而id是可选的。我想以这样一种方式创建键,

  1. 如果name=test且id=null,则缓存密钥必须cache_name_test
  2. 如果name=test且id=2,则缓存密钥必须cache_name_test_2

目前,如果未在参数值中传递id,则该键将形成类似“cache_name_test_null”的内容

是否可以使用@Cacheable注释创建这样的密钥?

共有1个答案

尉迟子民
2023-03-14

这是可行的,但需要在@Caching注释中封装2个@Cachable注释。

@Caching(
      cacheable = {
            @Cacheable(cacheNames = "cache_name_", key = "#name + '_' + #id", condition = "#id != null"),
            @Cacheable(cacheNames = "cache_name_", key = "#name", condition = "#id == null")
      }
    )
public JSONObject getData(String name, String id) throws Exception {

您正在私有方法上使用@Caching注释。这不管用。这些注释只适用于从类外部调用的公共方法。请参阅以下堆栈溢出答案:https://stackoverflow.com/a/16899739/2082699

 类似资料:
  • 我正在使用Guava缓存热数据。当缓存中不存在数据时,我必须从数据库中获取数据: 我的问题是当数据不存在于数据库中时,我希望它返回并且不做任何缓存。但Guava保存与缓存中的关键字,并抛出一个异常,当我得到它: com.google.common.cache.CacheLoader$InvalidCacheLoadExcION: CacheLoader为shisoft键返回null。 我们如何避免

  • 我正在研究Spring3.1注释缓存,ehcache作为缓存实现。 一个返回值像这样的方法 我第一次得到了一个myject返回值,它是可编辑的。ehache可以通过设置“拷贝读取”或“拷贝写入”来做些什么。它将强制序列化读/写对象。但是在第一次Spring不会从缓存中获取值,它总是返回通过方法本身。 是否有某种方法可以获取只读返回值?

  • 问题内容: 如何在不手动输入的情况下创建许多空列表 是否存在for循环,使我的空列表数量为n? 问题答案: 列表理解在这里最简单: 注意不要掉进陷阱:

  • 我想缓存以下结构的方法: 对于

  • 问题内容: 我的代码中有自定义颜色。我多次使用它们,我只希望分配一次。 如果我们看一下UIColor标头,我们可以看到以下内容: 我创建了一个UIColor,就像这样: 从那里,我既可以使用变量也可以使用函数来轻松使用我的颜色。 可悲的是,我对此并不完全满意。确实,每次我想使用这些颜色时,都会进行新的UIColor分配。 我尝试过的 苹果设法使它们的颜色明显被缓存。我也想这样做。我已经尝试了几件事