019 springCache

一 . 概述

  在spring3.x之后,spring引入了cache的支持,总体来说springcache能够帮助我们完成项目之中一些简单的缓存实现.

  本节就简单的说明一下springcache的基本内容.


 二 .几个核心概念

[1]CacheManager :
  在一个应用之中,我们可能使用很多个cache组件,spring提供了CacheManager来进行对这些Cache组件的管理工作.

我们看一下CacheManager的基本结构: 

public interface CacheManager {

    /**
     * Return the cache associated with the given name.
     * @param name the cache identifier (must not be {@code null})
     * @return the associated cache, or {@code null} if none found
     */
    Cache getCache(String name);

    /**
     * Return a collection of the cache names known by this manager.
     * @return the names of all caches known by the cache manager
     */
    Collection<String> getCacheNames();

}

从基本的结构之中,我们可以看到CacheManager维护一个string与Cache实例的映射关系.并且提供了一些方法,我们可以通过string类型的字符串获取Cache实例,或者获取CacheManager中所有维护的Cache实例.

[2]Cache:

本接口描述了SpringCache具体完成缓存任务的接口,我们可以理解为一个键值对的集合,类似于一个Map<String,Object>的结构.

  我们来看一下该接口的基本结构:

public interface Cache {
    String getName();  
    Object getNativeCache();    
    ValueWrapper get(Object key);
   //按照键值对的形式对数据进行缓存 
    void put(Object key, Object value);
   //通过键删除这个键值对
    void evict(Object key);
    //清空整个缓存的内容
    void clear();    
    interface ValueWrapper {        
        Object get();
    }

}

我们从红色的注释部分可以看到,Cache这个接口定义的方法与Map基本类似.

扫描二维码关注公众号,回复: 1582285 查看本文章

 三 .Cache的实现

  

在spring之中给我们提供了缓存的实现,我们如果不去配置任何的Cache的实现,就会使用Map这样的缓存实现,当然,我们也可以使用redis,ehcache进行Cache的实现.


四 . 缓存注解

  在spring之中,我们可以通过注解完成整个缓存框架的使用.下面会重点说明我们常用的注解:

[1]@EnableCaching

该注解表示开启springCache注解驱动,该注解需要放置在一个@Configuration注解的类上面.

  我们重点需要关系该注解的几个属性:

  (1)proxyTargetClass : 表示是否开启cglib动态代理来实现,一般情况下,我们都会进行这种配置的.

[2]@Cacheable注解

该注解是我们最为常用的一个缓存注解,表示的含义就是一个标准的缓存使用:

  当从缓存之中获取数据获取到,那么就不去调用真实的方法,如果没有获取到,就执行方法,最后将这一部分的数据放置到缓存之中.

我们来看下这个注解的一些属性:

  (1)value : 描述了缓存的name.通过CacheManager找到该Cache的实例.

  (2)key : 表示缓存的数据在Cache之中的key

  (3)condition : 条件缓存,表示当在上面样的情况下进行缓存.

  (4)unless : 条件缓存,表示不符合上面样的条件才进行缓存.

[3]@CachePut注解

该注解表示的含义强制更新,当目标方法执行完之后,或更新Cache之中的键值对.

  另外该注解的属性和@Cacheable的属性的含义是一样的.

[4]@CacheEvict

  该方法表示目标方法执行完毕之后,将对应的缓存内容进行删除.

  我们需要注意的是该注解的属性:

  (1)allEntries : 该属性设置之后,表示当目标方法执行完之后,将缓存之中的所有的数据都删除掉.

  (2)beforeInvocation : 该属性表示清除缓存的操作在目标方法之前执行还是之后执行,影响这一方面的问题的原因就是目标方法如果出现了异常,可能会出现缓存的不一致性的问题.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/9177525.html