一、前言:
现在做J2EE开发基本上都用spring全家桶了,由于项目中需要减轻数据库的访问压力,所以考虑添加缓存,之前采用SSM框架的时候对redis进行操作都是用的jedis。其实呢redis的客户端有两种实现方式,一种是调用jedis来实现,二是可以使用spring data redis,通过spring的封装来调用。
二、整合
1、添加redis依赖
<!--与spring Data redis有关,这就是spring data redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、application.yml配置文件配置redis的相关信息
spring:
redis:
#host: 127.0.0.1
host: 192.168.224.225
port: 6379
password:
3、配置redis整入spring的缓存框架
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
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;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.cache.interceptor.KeyGenerator;
import java.lang.reflect.Method;
//配置redis整入spring的缓存框架
@Configuration
@EnableCaching //继承CachingConfigurerSupport并重写方法,配合该注解实现spring缓存框架的使用
public class RedisConfig extends CachingConfigurerSupport {
/**载入配置文件配置的连接工厂**/
@Autowired
RedisConnectionFactory redisConnectionFactory;
/*不提示警告信息*/
@SuppressWarnings("rawtypes")
@Autowired
RedisTemplate redisTemplate;
@Bean
RedisTemplate<String,Object> objectRedisTemplate(){
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
@Bean
@Override
public CacheManager cacheManager(){
RedisCacheManager redisCacheManager=new RedisCacheManager(redisTemplate);
//设置缓存过期时间
// redisCacheManager.setDefaultExpiration(60);//秒
return redisCacheManager;
}
/**
* 重写缓存key生成策略,可根据自身业务需要进行自己的配置生成条件
* @return
*/
@Bean
@Override
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
}
至此,springboot整和redis就算配置完啦。
三、实现
真正操作spring data redis中用来真正操作redis的一是采用注解的方式,常用两个注解@Cacheable、@CacheEvit,二是采用RedisTemplate的方式。
众所周知,redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String、List、Set、Hash、Zset。
RedisTemplate中定义了对5种数据结构的操作
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
简单示例如下:
@ApiOperation(value="测试缓存", notes="")
@RequestMapping(value = "/getAddr", method= RequestMethod.GET)
public String getAddress() {
redisTemplate.opsForValue().set("001","河北省");
Object o = redisTemplate.opsForValue().get("001");
return o.toString();
}
```