Spring 缓存——@Cacheable

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 缓存——@Cacheable相关的知识,希望对你有一定的参考价值。

参考技术A @Cacheable 是一个既可以应用于方法级别,也可用于类级别的注解。自spring3.1开始就通过它实现了缓存管理。

看code, @Cacheable 注解只有三个属性。

下次再遇到页面刷新后数据还不更新的问题时,记得看看是不是 @Cacheable 搞的鬼。

@Cacheable 命中的 Spring 缓存日志记录

【中文标题】@Cacheable 命中的 Spring 缓存日志记录【英文标题】:Spring cache logging on @Cacheable hit 【发布时间】:2016-09-13 20:23:37 【问题描述】:

目前我正在使用 Spring Cache 和 @Cacheable/@CacheEvict 注释。

我想获得某种控制台日志语句,例如 "INFO: i got those values from the cache, NOT from the host. awesome"

有没有一种干净简单的方法来做到这一点?顺便说一句,我们正在使用slf4j,如果有任何兴趣的话。

【问题讨论】:

【参考方案1】:

Spring 本身在org.springframework.cache 记录器的trace 级别下记录了它的一些缓存抽象行为。因此,如果您将 org.springframework.cache 记录器下的日志附加到适当的附加程序,您将获得一些有用的信息,例如控制台。如果您使用 Logback,您可以在 logback.xml 中使用类似以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework.cache" level="trace">
        <appender-ref ref="STDOUT" />
    </logger>
</configuration>

使用此配置,您应该会在控制台上看到类似以下内容:

键 'Page request [number: 0, size 20, sort: null]' 的缓存条目 在缓存“人员”中找到

【讨论】:

这帮助我在我们的项目设置中找到了类似的配置。谢谢:)【参考方案2】:

对于 Spring Boot 2,您可以在 application.properties 中添加:

logging.level.org.springframework.cache=TRACE

【讨论】:

【参考方案3】:

您可以启用跟踪级别日志记录。

例如,在 application.properties 中输入 'trace=true'。

Spring logging documentation

【讨论】:

【参考方案4】:

我不认为一直打开跟踪日志是一个好主意,即使它只是用于缓存日志。 更好的方法是,EHcache 已经有这个命中/未命中指标,你可以通过JMXspring boot actuator 获得。

JMX使用可以参考this

要使用Spring Boot Actuator,可以参考this。

【讨论】:

绝对同意,除非它会在本地开发人员机器上完成。然而,这是非常好的和有价值的提示,如何记录和监控缓存行为。

以上是关于Spring 缓存——@Cacheable的主要内容,如果未能解决你的问题,请参考以下文章

Spring 缓存注解@Cacheable的用法

Spring Cacheable 注解不缓存null值

详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用

@Cacheable使用spring缓存

使用@Cacheable 的Spring 缓存在启动@PostConstruct 时不起作用

Spring @Cacheable有关缓存失效时间策略的默认实现以及扩展