当前位置:首页 > 开发 > 互联网 > 正文

Spring Cacheable

发表于: 2013-10-01   作者:cywhoyi   来源:转载   浏览次数:
摘要: 缓存已经在我们的系统中成为性能提升最重要的方式,页面级缓存、系统级缓存、数据缓存、数据库内置缓存等等一些列缓存操作,今天要告诉大家spring其实也提供缓存,当然它只支持单点缓存,所以被忽略,局限性比较大,其实N多种框架都是带有缓存。不过最近JavaOne最近一次的大会上,提到如何办到单机下性能最优化,其实包括国内点评网在内的以java为核心技术的互联网公司为了省成本,其实也在最大限度发挥单机的下

缓存已经在我们的系统中成为性能提升最重要的方式,页面级缓存、系统级缓存、数据缓存、数据库内置缓存等等一些列缓存操作,今天要告诉大家spring其实也提供缓存,当然它只支持单点缓存,所以被忽略,局限性比较大,其实N多种框架都是带有缓存。不过最近JavaOne最近一次的大会上,提到如何办到单机下性能最优化,其实包括国内点评网在内的以java为核心技术的互联网公司为了省成本,其实也在最大限度发挥单机的下java服务性能指标。

谈到spring的缓存想到的是两个注解@Cacheable and @CacheEvict

@Cacheable能够提供类级别以及颗粒度达到方法级别

类级别

@Cacheable(value = "employee")
public class EmployeeDAO {

  public Person findEmployee(String firstName, String surname, int age) {
@Cacheable(value = "employee", key = "#surname")
public Person findEmployeeBySurname(String firstName, String surname, int age) {

  return new Person(firstName, surname, age);
}
  return new Person(firstName, surname, age); } public Person findAnotherEmployee(String firstName, String surname, int age) { return new Person(firstName, surname, age); } }

 上述的Person即将被cache

你可以同SpEL的方式指定cache的key值,学习SpEL可以查看我的另一篇博文 http://cywhoyi.iteye.com/blog/1945771

 

@Cacheable(value = "employee", condition = "#age < 25")
public Person findEmployeeByAge(String firstName, String surname, int age) {

  return new Person(firstName, surname, age);
}

 其实这样的方式非常简单,比其一般的我们设计SimpleCache,采用LRU、FIFO的算法控制缓存时效加上弱引用对象而减少内存的压榨来得更加便捷。

接下来让我们进行比较测试

@Test
public void testCache() {

  Person employee1 = instance.findEmployee("John", "Smith", 22);
  Person employee2 = instance.findEmployee("John", "Smith", 22);

  assertEquals(employee1, employee2);
}

 true,下面的employee2就是来源于cache

@Test
public void testCacheWithAgeAsCondition2() {

  Person employee1 = instance.findEmployeeByAge("John", "Smith", 30);
  Person employee2 = instance.findEmployeeByAge("John", "Smith", 30);

  assertFalse(employee1 == employee2);
}

 因为都大于22所以来源于的对象都是新产生的

@Test
public void testCacheWithAgeAsCondition() {

  Person employee1 = instance.findEmployeeByAge("John", "Smith", 22);
  Person employee2 = instance.findEmployeeByAge("John", "Smith", 22);

  assertEquals(employee1, employee2);
}

 

都是同一个对象

Spring Cacheable

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1 spring
1、安装本地maven:http://blog.csdn.net/java_min/article/details/8857492 已看到版本信息; 修改
2 Spring
1.what 1.1:管理javaBean——JavaBean的生成、关连(调用)、事务、安全性 1.2:Spring的核心是IoC
3 Spring
Spring is grate framework for development of Enterprise grade applications. Spring is a light
4 spring
转载自:http://blog.csdn.net/xtu_xiaoxin/article/details/8796499 Spring MVC工作流程图 图一 图
5 spring
转载自:http://www.cnblogs.com/yjmyzz/p/spring-mvc-rest-service-with-xml-and-json-format.html
6 spring
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。 Spring 也是一个
7 Spring
Spring下载 Spring源码:https://github.com/WestieLee/spring-framework/releases Spring文档:htt
1 <img height="425" width="650" alt="spring(3):spring的AOP_第7张图片" src="http://img.it6
Spring + Spring MVC + Hibernate项目开发集成(注解) Posted on 2015-05-09 11:58 沐浴未来的我和
前言   最近由于一些工作的需要,还有自己知识的匮乏再次翻开spring。正好整理了一下相关的知识,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号