一、添加依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、配置application.properties

#####################redis做缓存####################
spring.cache.type=redis
spring.redis.host=192.168.175.13
spring.redis.port=6379
spring.redis.password=123456

三、使用

3.1、自定义缓存管理器

package com.example.demo.config;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.core.RedisTemplate;

/**
 * redis自定义缓存管理器
 *
 * @Author: 我爱大金子
 * @Description: redis自定义缓存管理器
 * @Date: Create in 17:02 2017/7/3
 */
@Configuration
@EnableCaching
public class RedisCacheConfiguration extends CachingConfigurerSupport {

   /**
    * 自定义缓存管理器
    * @Author: 我爱大金子
    * @Description: 自定义缓存管理器
    * @Date: 17:06 2017/7/3
    * @param redisTemplate
    * @return
    */
   @Bean
   public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
      RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
      // 设置默认的过期时间,20秒
      cacheManager.setDefaultExpiration(20);
      Map<String, Long> expires = new HashMap<String, Long>();
      // 单独设置liuyCache的过期时间为60秒
      expires.put("liuyCache", 60L);
      cacheManager.setExpires(expires);
      return cacheManager;
   }
   
   /**
    * 自定义key. 此方法将会根据类名+方法名+所有参数的值生成唯一的一个key,即使@Cacheable中的value属性一样,key也会不一样。
    */
   @Override
   public KeyGenerator keyGenerator() {
      return new KeyGenerator() {
         @Override
         public Object generate(Object o, Method method, Object... objects) {
            StringBuilder sb = new StringBuilder();
            sb.append(o.getClass().getName());
            sb.append(method.getName());
            for (Object obj : objects) {
               sb.append(obj.toString());
            }
            return sb.toString();
         }
      };
   }

}

3.2、使用做缓存

package com.example.demo.cache;

import com.example.demo.mapper.UserMapper;
import com.example.demo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 使用redis缓存
 *
 * @Author: 我爱大金子
 * @Description: 使用redis缓存
 * @Date: Create in 17:09 2017/7/3
 */
@CacheConfig(cacheNames = "liuyCache")
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    /**查询用户*/
    @Cacheable(value = {"user"})
    public List<User> select(User user){
        System.out.println("查询功能,缓存找不到,直接读库, user=" + user);
        return userMapper.select(user);
    }

    /**添加用户*/
    @CacheEvict(value = {"user"}, allEntries = true)
    public int insert(User user) {
        int result = userMapper.insert(user);
        System.out.println("添加功能,清除缓存,直接写库, id=" + user.getId());
        return result;
    }

    /**根据用户id删除*/
    @CacheEvict(value = {"user"}, allEntries = true)
    public int deleteById(Integer id){
        System.out.println("据用户id删除,清除缓存,直接写库, id=" + id);
        return userMapper.deleteById(id);
    }

    /**根据用户id更新*/
    @CacheEvict(value = {"user"}, allEntries = true)
    public int updateById(User user){
        System.out.println("根据用户id更新,清除缓存,直接写库, id=" + user.getId());
        return userMapper.updateById(user);
    }
    /**根据id查询用户*/
    @Cacheable(value = {"user"})
    public User selectByPrimaryKey(Integer id){
        System.out.println("据id查询用户,缓存找不到,直接读库, id=" + id);
        return userMapper.selectByPrimaryKey(id);
    }
}


说明:

 @Cacheable:取缓存

 @CachePut:修改缓存

 @CacheEvict:删除缓存,allEntries:true表示清除value中的全部缓存,默认为false。

四、测试

访问:http://localhost:8989/druid/sql.html 

 springBoot(17):使用redis做缓存_spring

访问:http://localhost:8989/user/index 

 springBoot(17):使用redis做缓存_redis_02

查看redis:

 springBoot(17):使用redis做缓存_redis_03

idea控制台:

 springBoot(17):使用redis做缓存_redis_04


第二次访问:http://localhost:8989/user/index后,查看sql监控,如下:

 springBoot(17):使用redis做缓存_redis_05