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

设置Spring@cacheable缓存10秒

常炯
2023-03-14

我正在使用SpringFramework 3.2编写一个java项目。4.

我有许多SQL查询需要缓存10秒钟。

我知道用@cacheable注释我可以缓存函数结果。

我不明白的是如何缓存只有10秒。我知道你可以给可缓存注释添加条件,但是我很难弄清楚如何给这些条件添加时间。

如能提供有关该问题的任何信息,将不胜感激。

共有2个答案

慕弘深
2023-03-14

Spring不提供这种开箱即用的功能,但它支持适配器,您可以使用例如guava适配器,它允许配置过期超时。

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
  <property name="caches">
    <list>
      <bean name="testCache"
            class="org.hypoport.springGuavaCacheAdapter.SpringGuavaCacheAdapter">
        <property name="expireAfterAccessInSeconds" value="10"/>
        <property name="expireAfterWriteInSeconds" value="10"/>
      </bean>
    </list>
  </property>
</bean>
厉熠彤
2023-03-14

您可以使用计划程序定期调用排除缓存的服务方法

调度程序:

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.beans.factory.annotation.Autowired;

public class Scheduler {

        @Autowired
        private SomeService someService;

        @Scheduled(fixedRate = 10000)
        public void evictCaches() {
                someService.evictCaches();
        }
}

服务:

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class SomeService {

        @CacheEvict(value = { "cache1", "cache2" }, allEntries = true)
        public void evictAllCaches() {
        }
}
 类似资料:
  • 目前,我正在使用Spring缓存和/注释。 我想得到某种控制台日志语句,如

  • 尝试在Spring Boot项目中设置Memcache,但它不起作用。我甚至尝试设置默认缓存(ConcurrentMapCacheManager),但效果并不理想。 我读过的每个教程(甚至是Spring官方)都说这种配置足以设置缓存 缓存配置: 缓存使用: 波姆。xml 是否有可能某些依赖项与spring缓存依赖项冲突?

  • set 设置普通类型的值 设置 set set(key: string, value: string expiryMode: string[ EX 秒 PX 分钟 ], time: number ) key: 键名称 value:存储的值 expiryMode:添加过期时间类型 EX 秒 PX 分钟 time:过期时间 // 存储一个key为gender,value 为 男人的数据,10秒后过期

  • 当我调用我用注释的方法时,我知道缓存没有被使用,因为我在方法内部进行了打印,如果使用了缓存,就不应该打印它。 在日志中,我知道缓存正在初始化 我应该提到调用该方法的方法是常规Java

  • 是否可以配置Spring,以便在缓存未命中时,对可缓存方法的调用将被阻止,直到可缓存方法执行一次并填充缓存? 在我的例子中,我处理的是数据库中的数据,这些数据不会经常更改。事实上,如果这些数据更改,则需要重新启动应用程序。我可以创建方法,并在每个服务启动时初始化数据,但这似乎不像注释那样“优雅”。 我计划将EhCache与Spring注释一起使用。 更新: 以下是我在尝试使用@PostConstr