我正在使用SpringFramework 3.2编写一个java项目。4.
我有许多SQL查询需要缓存10秒钟。
我知道用@cacheable
注释我可以缓存函数结果。
我不明白的是如何缓存只有10秒。我知道你可以给可缓存注释添加条件,但是我很难弄清楚如何给这些条件添加时间。
如能提供有关该问题的任何信息,将不胜感激。
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>
您可以使用计划程序定期调用排除缓存的服务方法。
调度程序:
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