`

Spring Cache无效的问题以及解决办法

阅读更多
Spring Cache无效的问题以及解决办法



昨天碰到Cache无效的问题,现在已经找到原因并且解决。
把知识分享给大家,免得以后踩坑。


@Cacheable标注的方法,如果其所在的类实现了某一个接口,那么该方法也必须出现在接口里面,否则cache无效。
具体的原因是, Spring把实现类装载成为Bean的时候,会用代理包装一下,所以从Spring Bean的角度看,只有接口里面的方法是可见的,其它的都隐藏了,自然课看不到实现类里面的非接口方法,@Cacheable不起作用。


解决办法很简单,把待cache的方法移到接口里面。


另外衍生两个小问题:
1. @Cacheable放接口里面可以吗?我试了一下,不行。
2. 如果某一个Bean并没有实现任何接口,@Cacheable标注的方法有什么要求?
   答案是public即可。这种Bean也被Spring产生了代理, 看得到的只有public方法。


推开来,本质是Spring代理的问题,很多的基础设施可能都会遇到类似的问题。比如安全,事务,日志等等。
分享到:
评论

相关推荐

    cache 实例

    5. **缓存实现**:在Java中,常见的缓存实现有Java内置的`java.util.concurrent.ConcurrentHashMap`(常用于简单的本地缓存实现),Google的Guava库中的`LoadingCache`,以及Spring框架提供的`@Cacheable`注解支持的...

    spring自动加载缓存

    Spring提供了多种缓存抽象,包括基于注解的缓存管理和第三方缓存支持(如 EhCache、Guava Cache 或 Redis)。以下是对这个主题的详细阐述: 一、Spring缓存抽象 1. **@Cacheable**:这是最常用的注解,用于标记...

    springboot缓存一致性解决

    使用监控工具(如Spring Boot Actuator)监控缓存性能,及时发现并解决问题,通过调整缓存大小、超时时间等参数进行优化。 综上所述,解决Spring Boot中的缓存一致性问题,需要结合具体的业务场景,选择合适的缓存...

    JetCache is a Java cache framework..zip

    JetCache是一款专为Java开发的缓存框架,它旨在提供高效、稳定且易于使用的缓存解决方案,以提升应用程序的性能和响应速度。在Java应用程序中,缓存是一种常见的技术手段,用于减少对数据库或其他资源的访问频率,...

    Spring Boot 2.x基础教程:使用EhCache缓存集群.docx

    在Spring Boot 2.x应用程序中,EhCache是一种常用的缓存解决方案,用于提高应用程序性能,减少对数据库的访问。然而,当我们的应用被部署在分布式环境中,即多个进程同时运行时,缓存的一致性问题变得至关重要。为了...

    Spring面试全套攻略

    #### 七、Spring Cache缓存注解详解 1. **常用注解**: - **@Cacheable**:用于标记方法,表示该方法的结果可以被缓存。 - **@CachePut**:用于更新缓存,即使方法已经被缓存也会强制执行方法并将结果存入缓存。 ...

    spring-data-redis-cache-performance-test:从spring-data-redis对RedisCache进行简单的性能测试

    Spring Data Redis是Spring框架的一个模块,它提供了一个高级抽象层来与Redis数据存储进行交互,而RedisCache则利用Redis作为高效的缓存解决方案。通过进行性能测试,我们可以评估其在多线程环境下的表现,并理解其...

    springboot-01-cache.rar_browndl4_goldk4u_mill18b_springboot

    标题中的"springboot-01-cache.rar"表明这是一个关于Spring Boot缓存管理的项目压缩包。Spring Boot是Java开发的一款快速构建微服务的框架,它简化了Spring应用的初始搭建以及开发过程。"cache"部分则暗示我们这个...

    详解spring security安全防护

    当Spring Security检测到无效的同步器Token时,会返回一个403的访问拒绝。可以通过配置AccessDeniedHandler类来定制行为,例如,重定向到错误页面或显示错误信息。 Security Header配置 Spring Security支持多种...

    a simple cache for android and java.zip

    在Android和Java开发中,缓存机制是一种非常..."a simple cache for android and java.zip" 提供的解决方案可能是对这些概念的简化实现,通过研究其源码,我们可以深入理解缓存的工作原理,并将其应用到实际项目中。

    更简单的Java缓存框架 jscache.docx

    ### 更简单的Java缓存框架 jscache #### 知识点概述 jscache是一个轻量级、易用的Java缓存框架,它基于面向切面编程(AOP)原理实现,支持灵活配置缓存策略,并提供了多种缓存实现方式。通过使用jscache,开发者...

    缓存用户名密码信息

    9. **监控与日志**:在生产环境中,对缓存的监控和日志记录是必要的,可以帮助开发者了解缓存的使用情况,及时发现和解决问题。 10. **最佳实践**:遵循一定的设计原则,如最小化缓存数据量,合理设置过期时间,...

    j2ee cache framework

    1. **Ehcache**:Ehcache是一款开源的Java缓存解决方案,支持本地内存缓存和分布式缓存,广泛应用于Spring框架中。 2. **Hibernate Second Level Cache**:Hibernate作为流行的ORM框架,内置了二级缓存机制,可以与...

    C#CacheAttribute测试版0.1

    使用这些Attribute的方式类似于Spring Cache,意味着开发者可以使用注解的方式来声明哪些方法的结果应该被缓存,何时更新或删除缓存,以及何时初始化缓存。这种方式使代码更加整洁,降低了业务逻辑和缓存逻辑之间的...

    springboot2使用ehcache缓存

    在Spring Boot 2.0中,Ehcache是一个流行的、高性能的本地缓存解决方案,用于提升应用程序性能。本文将深入探讨如何在Spring Boot项目中集成并使用Ehcache进行数据缓存。 首先,Ehcache是由Talend公司维护的一个...

    SpringBootJPA + EhCache

    默认情况下,Spring Cache会基于方法参数的哈希值生成缓存Key,但有时这可能不满足需求。可以通过实现`KeyGenerator`接口来自定义Key生成逻辑,确保Key与业务逻辑紧密关联,提高缓存的命中率。 4. **测试接口与...

    httpcache4j:https的只读镜像

    httpbis 中的规则略有变化,将产生一组新的 RFC,这将使 RFC2616 无效。 HTTPCache4j 中的大多数类型都是不可变的。 意味着所有构建器和其他类型的对象。 我创建了一些可变版本,它们委托给下面的不可变类型。 可变...

    cvc-complex-type.2.4.d: Invalid content was found

    解决这类问题的方法通常包括: 1. 检查XML配置文件:确保所有元素、属性的顺序、数量和类型都与对应的XML Schema定义一致。 2. 查阅Schema文档:理解Schema中定义的复杂类型,知道每个元素或属性的预期位置和类型。...

    solution-mysql-redis-cache-simple:使用Redis进行RDS MySQL数据库缓存的最简单解决方案。 此解决方案依赖于Redis中密钥的过期时间(TTL)。 更新MySQL时,不会主动更新Redis。 这种方法易于实现,但是不一致的持续时间可能会很长,尤其是在读取请求非常频繁且到期时间相对较长的情况下,会生成很多长期的脏数据

    总结来说,"solution-mysql-redis-cache-simple"方案提供了一个基本的Redis作为MySQL缓存的方法,虽然简单但可能面临数据不一致的问题。通过优化缓存更新策略、使用Java Redis客户端和考虑缓存系统可能出现的问题,...

    30_分布式缓存相关面试题的回答技巧总结.zip

    Java中常用的分布式缓存框架有Spring Cache、Ehcache、Hibernate Second Level Cache等,其中Spring Data Redis和Jedis提供了与Redis的集成。 4. **Redis和Memcached的区别** - Redis支持数据持久化,而Memcached...

Global site tag (gtag.js) - Google Analytics