Springboot集成redis以及解决redis key乱码的问题
作者:白鸽呀
本文介绍了Springboot集成Redis的过程,包括导入相关包、配置RedisProperties、配置RedisTemplate和StringRedisTemplate以及解决乱码问题,通过这些步骤,可以成功集成Redis并进行测试
springboot集成redis
1、导包
<!--springboot中的redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- lettuce pool 缓存连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>2、在RedisAutoConfiguration中找到对应的RedisProperties配置
在yml中配置基本配置
spring:
redis:
host: xxxxxx 自己的ip
port: 6379
lettuce:
pool:
max-active: 8
max-wait: -1
max-idle: 8
min-idle: 03、从RedisAutoConfiguration中
看到默认配置了两个bean RedisTemplate,StringRedisTemplate 而且是基于lettuce是redis-cli客户端
获取redisTemplate进行测试即可

从这里看是测试成功的。但是我们从服务器上看对应的key,却是这个样子

怎么办?
原因:
大概是lettuce客户端连接redis服务器采用的是byte数组,因此会将对象先转化为byte数组,而转换方法是使用JdkSerializationRedisSerializer 的convert方法转换,因此需要替换到默认的redisSerializaer

4、 配置redisConfig
解决
自己配置redisConfig,不使用默认的
@Configuration
@EnableCaching
public class RedisConfig {
/**
* 配置自定义redisTemplate
* @return
*/
@Bean
RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
// 设置值(value)的序列化采用Jackson2JsonRedisSerializer。
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
// 设置键(key)的序列化采用StringRedisSerializer。
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
idea 客户端再次运行结果:

服务器 客户端运行结果:( 注意:中文内容还是会乱码)

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
