Table of Contents
@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。如果你使用了这个注解,那么你就不需要在XML文件中配置cachemanager了。
调用方法后数据会以key-value的形式存入redis数据库,下次在执行此方法会先从redis缓存中调取数据,提升查询速度
我使用的是*.yml配置文件(冒号后必须加一个空格)
#SpringBoot中使用Redis做缓存
redis:
host: 192.168.123.136 #填写自己的ip地址
port: 6379
database: 0 #设置数据库索引为0
password: #(如果未设置密码则为空)
jedis:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 2 # 连接池中的最小空闲连接
timeout: 2000 # 连接超时时间(毫秒)
创建RedisConfig配置缓存机制
@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。如果你使用了这个注解,那么你就不需要在XML文件中配置cachemanager了。
当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。
package com.supervise.common.config;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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.connection.RedisConnectionFactory;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
//缓存管理器
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheManager cacheManager = RedisCacheManager.builder(factory).build();
return cacheManager;
}
//自定义缓存key生成策略
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator(){
@Override
public Object generate(Object target, java.lang.reflect.Method method, Object... params) {
StringBuffer sb = new StringBuffer();
sb.append(target.getClass().getName());
sb.append(method.getName());
for(Object obj:params){
sb.append(obj.toString());
}
System.out.println("调用Redis生成key:"+sb.toString());
return sb.toString();
}
};
}
}
servise层中利用注解来使用redis缓存
package com.supervise.servise.impl;
import com.supervise.bean.PersonInfo;
import com.supervise.common.config.RedisService;
import com.supervise.dao.ProposeDao;
import com.supervise.dao.dboperation.PersonInfoDao;
import com.supervise.model.ProposeTableModel;
import com.supervise.servise.ProposeServise;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@CacheConfig(cacheNames="family")(多个方法缓存时使用)
public class ProposeServiseImpl implements ProposeServise {
@Autowired
private ProposeDao proposeDao;
@Autowired
private PersonInfoDao personInfoDao;
@Autowired
private RedisService redisService;
@Override
@Cacheable("person")
public ProposeTableModel getProposeTable(String batchId) {
System.out.println("我执行了:getProposeTable");
ProposeTableModel proposeTableModel = proposeDao.findAll(batchId);
redisService.set("第一次redis",proposeTableModel);
return proposeTableModel;
}
@Override
@Cacheable("person2")
public List<PersonInfo> getPersonList() {
System.out.println("我执行了:getPersonList");
List<PersonInfo> personInfoList = personInfoDao.selectAll();
for(PersonInfo item : personInfoList){
redisService.set(item.getPersonCode(),item);
}
return personInfoList;
}
}
调用方法后数据会以key-value的形式存入redis数据库,下次在执行此方法会先从redis缓存中调取数据,提升查询速度