Spring中@Cacheable的用法

栏目:Web开发 作者:admin 日期:2015-04-24 评论:4 点击: 50,627 次

本文修订于:2018年9月1日

在上文《Spring集成memcached的详细介绍》中给大家介绍了一下在Spring中通过获取MemCachedClient来实现与memcached服务器进行数据读取的方式。不过,在实际开发中,我们往往是通过Spring的@Cacheable来实现数据的缓存的,所以,本文给大家详细介绍一下@Cacheable的用法。首先,在使用@Cacheable之前,我们要做好准备工作。

第一步:要导入相应的jar包。
   <classpathentry kind="lib" path="lib/spring-core-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/spring-cache-1.0.10.jar"/>
    <classpathentry kind="lib" path="lib/spring-context-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/spring-beans-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/commons-logging-1.2.jar"/>
    <classpathentry kind="lib" path="lib/log4j-1.2.17.jar"/>
    <classpathentry kind="lib" path="lib/spring-expression-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/java_memcached-release_2.0.1.jar"/>
    <classpathentry kind="lib" path="lib/spring-aop-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/spring-aspects-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/spring-context-support-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/spring-tx-4.1.4.RELEASE.jar"/>
    <classpathentry kind="lib" path="lib/aopalliance-1.0.jar"/>
    <classpathentry kind="lib" path="lib/ognl-3.0.6.jar"/>
    <classpathentry kind="lib" path="lib/trafficCounter-1.0.2.jar"/>
    <classpathentry kind="lib" path="lib/aspectjweaver-1.8.4.jar"/>
    <classpathentry kind="lib" path="lib/javassist-3.11.0.GA.jar"/>

第二步:xml文件中增加命名空间。

第三步:添加自动扫描功能。

第四步:增加缓存管理类。

第五步:建立一个测试类。

@Cacheable支持如下几个参数:
key:缓存的key,默认为空,既表示使用方法的参数类型及参数值作为key,支持SpEL。例如:
memCachedService.storeUserAddress("user", "BeiJing");
所以对应的key为:service.MemcachedService-storeUserAddress_user_BeiJing
name:存储位置。在本来中remote表示使用memcached服务器。
condition:触发条件,只有满足条件的情况才会加入缓存,默认为空,既表示全部都加入缓存,支持SpEL。
expire:过期时间,单位为秒。
最后总结一下:当执行到一个被@Cacheable注解的方法时,Spring首先检查condition条件是否满足,如果不满足,执行方法,返回;如果满足,在name所命名的缓存空间中查找使用key存储的对象,如果找到,将找到的结果返回,如果没有找到执行方法,将方法的返回值以key-value对象的方式存入name缓存中,然后方法返回。

网站公告
欢迎加入金燕知识社群,当前加入人数:23人,最近加入时间:2018年12月04日,更多介绍请查阅:知识社群

Spring中@Cacheable的用法:目前有4 条留言

  1. 板凳
    clive:

    如果有两方法A,B; 他们的参数可能一样的,使用@Cacheable 指定key,value,但是调用A之后再调用B,发现并没有执行B方法里面的程序而是直接取了A方法的缓存,原因是A、B两方法的key相同,那么问题来了:应该怎么设置@Cacheable 来区分这两个方法?

    2016-11-14 下午2:44 [回复]
    • RocLi:

      用name区分,创建两个独立的缓存

      2017-12-04 上午10:38 [回复]
  2. 沙发
    lcy:

    为什么我的@Cacheable没有expire参数?版本是4.1.7

    2015-07-21 下午5:22 [回复]
    • axi:

      com.springcache.annotation.Cacheable
      是他自己加的,他是自己做的注解AOP处理

      2015-11-19 下午4:50 [回复]

发表评论


------====== 本站公告 ======------
金丝燕网,即将迎来四周年!

知识社群