Lison <cundream@163.com>
, v1.0.0, 2019.10.13
SpringBoot系统搭建集成-007-集成Redis
一. 直接导入Redis的依赖
<!--Redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二 为了能够使Redis可以直接存java对象,所以我们需要对其配置,以及自定义序列化器和反序列化器
public class RedisConverter implements RedisSerializer<Object> {
/**
* 序列化器
*/
private Converter<Object, byte[]> serializer = new SerializingConverter();
/**
* 反序列化器
*/
private Converter<byte[], Object> deserializer = new DeserializingConverter();
/**
* //将对象序列化成字节数组
* @param o
* @return
* @throws SerializationException
*/
@Override
public byte[] serialize(Object o) throws SerializationException {
if (o == null){ return new byte[0];}
try {
return serializer.convert(o);
} catch (Exception e) {
e.printStackTrace();
return new byte[0];
}
}
/**
* 将字节数组反序列化成对象
* @param bytes
* @return
* @throws SerializationException
*/
@Override
public Object deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length == 0) {return null;}
try {
return deserializer.convert(bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
三 将我们自定义的序列化器配置进操作Bean中
@Configuration
public class RedisConfig {
/**
* @param redisConnectionFactory
* @return 自定义redisTemplate,自带的bean没有序列化器
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置值的序列化器
redisTemplate.setValueSerializer(new RedisConverter());
return redisTem
plate;
}
}
为什么我们需要自己重新来定义呢?接下来请看这么一段源码就知道了
这里并没有注入序列化器,所以想要直接存储对象需要重新配置
@Component
public class RedisUtil {
@Autowired
private StringRedisTemplate redisTemplate;
/**
* 设置指定 key 的值
* @param key
* @param value
*/
public void set(String key, Object value) {
redisTemplate.opsForValue().set(key, String.valueOf(value));
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, String.valueOf(value), time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 获取指定 key 的值
* @param key
* @return
*/
public String get(String key) {
return redisTemplate.opsForValue().get(key);
}
.....//RedisUtil其他操作不再写
}
测试类
@RestController
@RequestMapping("/redis")
@Api(value = "RedisController", tags = "redis", description = "Redis测试接口")
public class RedisController {
@Autowired
private RedisUtil redisUtil;
@RequestMapping(value = "getRedis", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET",value = "获取用户列表")
public String getRedis(){
return redisUtil.get("redis_key");
}
@RequestMapping(value = "setRedis", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET",value = "获取用户列表")
public String setRedis(){
redisUtil.set("redis_key","666666666");
return "true";
}
}
启动本地的redis,然后启动工程 先后访问
http://127.0.0.1:8082/bootbuliding/redis/setRedis
http://127.0.0.1:8082/bootbuliding/redis/getRedis
自此 Redis集成完成