springboot的缓存

### springboot中的缓存

#### 如何启用缓存:

    1. springboot中如果想要启用缓存,可以通过新增一个缓存配置文件,通过@EnableCacheing注解实现。

    2. 配置文件中声明所需要使用的缓存管理器,可供选择的有:

        1. ConcurrentMapCacheManager;

        2. SimpleCacheManager;

        3. NoOpCacheManager;

        4. CompositeCacheManager;

        5. EnCacheCacheManager;

    3. spring3.2中出现的:

        1. RedisCacheManager(来源于Spring Data Redis项目)

        2. GemfireCacheManager(来源于Spring Data GemFire项目)

#### 如何使用缓存:

##### 通过注解的方式使用缓存:

    1. @Cacheable: 在调用该方法前,会先寻找是否有该方法的返回值(与参数相关),没有则调用方法,并存入缓存,有则直接返回。

    2. @CachePut:调用方法并将返回值放到缓存中去;

    3. @CacheEvict:在缓存中清除一个或者多个条目;

    4. @Caching:分组注解,能够同时应用多个其他的缓存注解

###### 各个注解的属性

    @Cacheable 和 @CachePut的属性:

    1. value: 缓存的名称;

    2. condition: SpEL表达式,false则不会应用缓存;

    3. key: 计算自定义的缓存key;

    4. unless: SpEL表达式,如果为true则返回值不会放到缓存中去;

    备注: 使用的示例:

        @cachePut(value="abcname", key="#result.id"): 表示根据结果的id的属性作为key;

    @CacheEvict的属性:

    1. value: 名字;

    2. key: 缓存的key值;

    3. allEntries: 为true时,特定缓存的所有条目都会被清除;

    4. beforeInvocation: true时,在方法调用之前移除条目,为false时,在方法成功调用之后再移除。

    备注:

    因为当beforeInvocation 为true的时候,是在方法调用之前的,所以key不能使用result的id等值,因为当时程序还没有执行。

##### 使用xml配置的方式使用缓存:

    一些相关的标签的说明:

    1. :启用注解驱动的缓存,等同于@EnableCacheing;

    2. :定义缓存通知,结合,将通知应用到切点上;

    3. :在缓存的通知中,定义一组特定的缓存规则;

    4. : 等同于@Cacheable;

    5. : 等同于@CachePut;

    6. :等同于@CacheEvict注解;

    备注: 使用xml的时候,依旧需要注册下缓存的管理器相应的类,将其注册为bean;

    注册示例:

```

   

       

   

   

       

           

       

   

```

附上部分代码:

##### CacheConfig.java:

```

package com.lee.world.config;

import org.springframework.cache.CacheManager;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.cache.concurrent.ConcurrentMapCacheManager;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

@EnableCaching

public class CacheConfig {

    @Bean

    public CacheManager cacheManager() {

        return new ConcurrentMapCacheManager();

    }

}

```

##### CacheService.java

```

package com.lee.world.service;

import org.springframework.cache.annotation.Cacheable;

import org.springframework.stereotype.Service;

/**

* 测试Java 的cache

*/

@Service

public class CacheService {

    @Cacheable("trycachecount")

    public Integer getCount(Integer num)

    {

        System.out.println("come in");

        return num++;

    }

}

```

你可能感兴趣的:(springboot的缓存)