Spring 3.1 M1: 缓存抽象化

 
Spring 3.1 M1: 缓存抽象化
2011-07-21 13:10

Spring 3.1 M1的一项主要特性就是对在Spring项目里透明的使用缓存的通用缓存抽象化支持。就像对事务(transaction)的支持那样,缓存抽象化提供了一系列的缓存解决方案,并且对代码的影响非常小。

 

目的

缓存被广泛的应用于改善程序的表现方面,因为它透明的对频繁访问的数据提供了一种更时尚的解决方案,比如它在本机内存中取数据而不是在网络上。不管知道与否,大多数人已经使用过缓存:大多数的ORM/JPA框架提供了专用缓存功能(也被称为二级缓存)。Spring 3.1 M1引入了一种能用于任何Java类、方法或者库的通用缓存机制:即可以与已经存在的缓存结合使用,添加缓存接口(比如JDBC),也可以只用于提高一个慢速的、耗时且耗用资源的系统性能。

 

@Cacheable, @CacheEvict 和 SpEL

我们看看缓存如何应用于一个方法:

通过在方法上添加@Cacheable注解,我们告诉容器findBook方法已经存储在了缓存中的book实体里。这个方法每次被调用的时候,都会在缓存中以传入参数做为key进行查找(本例中为 isbn)。如果找到了对应值,就将其返回,并且跳过方法的执行。但是,如果没有找到对应的值,方法仍然会照常执行并且执行的结果会被存储在缓存中,以便方法的下次调用时直接返回,而不是真正的去执行一遍(昂贵的或者慢的)方法。

 

在实际应用中,并不是所有方法都只有一个参数,或者更糟糕的情况,参数并不适合当做缓存的key——比如稍微修改一下上面的方法:

在上面的例子里,你可以使用Spring 3 Spring Expression Language 或者 SpEL来选择参数,导航对象树:

或者即时计算,甚至调用任何方法时都不用修改代码:

另外,你可以指定当异常发生时缓存的行为:是对异常进行检查,还是无视异常继续正常执行。这取决于开发者的决策标准:key的大小,或者是时间类型,或者是任意方法的返回值,SpEL对它提供了全面的支持:

通过@CacheEvict注解,缓存抽象化同时也支持清空驱逐缓存条目或者清空整个缓存。为了达到一次清空即使所有缓存失效的效果(例如由于缓存中的数据已经更新)你可以这样做:

注解一旦被写上的话,你就可以只使用一条代码就“允许”缓存功能(如果你算上结构描述的话就是三个):


就像其它的注解驱动元件一样,你可以以最简单的默认形式使用缓存,但是你也可以选择在代理方式与字节码编织方式中使用缓存类, 或者任何你想要的任何实现方式。

 

声明一个缓存实现

到目前为止,我们一直以陈述性的语言讨论缓存的抽象化:在你的POJO中如何添加与移除数据。那么什么才是你能使用的高速缓存实现呢?

目前可以使用的,Spring提供了对ehcache和JDK中ConcurrentHashMap 的整合,非分布式的环境和测试:



关于[xx] 类库,什么时候才能提供支持?

现在我们还不打算在Spring框架内部支持其它缓存,原因荐于以下方面:依赖性、维护和协议。如果想使用自定义缓存,我们鼓励开发者在缓存SPI包中查看两个接口: CacheManager和 Cache。另外你可以在GemFire   查看目前Spring支持的实现,以及下个主要更新中的缓存支持


缓存抽象化与其它缓存相比怎么样(比如JPA的二级缓存)?

通常来讲,两种缓存机制能愉快的共存,除开发者发现了什么冲突的部分。拿JPA的二级缓存来讲,你可以用它来访问数据并且同时使用Spring的缓存来做为远程网络调用的服务层。如果适合,你可以更进一步的复用两个调整缓存。


总结

我希望你能喜欢这篇简短的介绍Spring3.1新缓存特发的文章。更多信息请查阅相关参考文档章节SPI文档。请我们知道你的想法——我们期待着你的反馈。你可以来论坛、博客、或者Twitter

 

译者的话

话说这是我第一次翻译英文文章啊,不翻译还真不知道自己的英文水平不够用啊。平时自己看能理解大体意思,真翻译起来还真有好多词拿不准哦。如果你发现了什么错误的地方,请在本博客留言,或者联系译者coolcooldool@gmail.com。

【原文地址】http://hi.baidu.com/coolcooldool/blog/item/c1bbb9ec43c3d727269791ec.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值