Spring实战之缓存数据

Spring实战读书笔记

第十三章:缓存数据

启用缓存

  • 如果使用Java配置则需要使用@EnableCaching注解开启缓存,XML配置则需要使用cache命名空间的<cache:annotation-driven>。

  • 其实在本质上,这两种的工作方式是相同的。它们都会创建一个切面并触发Spring缓存注解的切点。根据所使用的注解以及缓存的状态,这个切面会从缓存中获取数据,将数据添加到缓存中或从缓存中移除某个值。

配置缓存

  • Spring内置了多个缓存管理器实现。Ehcache是最流行的缓存供应商之一,Spring中与之相对应的缓存管理器就是EhcacheCacheManager。

  • Spring提供了EhCacheManagerFactoryBean来生成EhCache的CacheManager。我们要想注册EhcacheCacheManager必须先注册一个EhCacheManagerFactoryBean对象,在创建FactoryBean的过程中,要告诉它Ehcache配置文件的位置。

  • Spring Data Redis提供了RedisCacheManager缓存管理器。在注册RedisCacheManager的时候需要注入一个RedisTemplate对象。

  • 有的时候我们可能需要多个缓存管理器,那我们就需要CompositeCacheManager了。我们可以将我们需要的所有缓存管理器装入set集合再作为参数注入给CompositeCacheManager。

缓存注解

  • Spring提供了四个注解来声明缓存规则,分别是@Cacheable、@CachePut、@CacheEvict、@Caching。

  • 默认情况下,缓存的key就是方法的参数。不过@Cacheable和@CachePut都有一个key属性,我们可以自定义key。Spring还提供了多个用来定义缓存规则的SpEL扩展(表13.3),我们可以利用这些扩展表达式更好的定义key。

  • @Cacheable和@CachePut还提供了unless和condition两个属性,让我们可以条件化缓存。

    • 如果unless属性的SpEL表达式计算结果为true,那么缓存方法返回的数据就不会放到缓存中。如果condition属性的SpEL表达式计算结果为false,那么对于这个方法的缓存就会被禁用。

    • unless只能阻止将对象放入缓存,但在这个方法调用的时候依然会先去缓存中查找,找得到就返回。而condition的结果如果为false会禁用缓存。也就是说,不会去缓存中查找,返回值也不会放入缓存。

  • @CacheEvict注解可以放在对数据库操作的remove方法上,当这个数据从数据库中移除的时候,它也应该从缓存中移除。

使用XML声明缓存

  • Spring提供了cache命名空间,所有我们在注解上的操作都可以使用XML实现,而且用法几乎相同。

  • 由于缓存是基于切面实现的,所以我们还会用到<aop:config>。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值