比如在开发测试阶段,为了方便就直接使用自己windows装好redis进行简单测试了,在项目中不去单独配置yam的redis属性可以正常操作,但是在springboot的yam中配置redis连接属性时候却连不上,特意记录一下方便后续再遇到能快速解决
一、Redis配置文件位置(windows)
一般情况下,打开Redis安装目录中的redis.windows.conf
文件,打开
这里面有几个配置
1.1 配置外网访问: 搜一下关键字bind
#bind 127.0.0.1生效,就只能本机访问redis 我们修改为: bind 0.0.0.0
#bind 127.0.0.1
bind 0.0.0.0
1.2 配置Redis密码: 搜一下关键字requirepass foobared
#找到requirepass所在行,回车另起一行,输入requirepass 你的密码
# requirepass foobared
requirepass 123456 //此处注意,行前不能有空格
1.3 配置Redis端口: 搜一下关键字port 6379
#默认端口为 6379 我们可以自定义
port 6379
1.4 配置后重启Redis服务
找到redis所在的目录,将redis注册为服务
redis-server.exe --service-install redis.windows.conf
windows+R打开运行,在运行中输入
services.msc
找到后重启 才能生效
1.5 验证是否成功更改
redis-cli.exe -h 127.0.0.1 -p 6379 -a 123456
注:无论密码正确与否,这个命令都是可以进入redis的,但是如果密码错误,命令是不会执行的。
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379>
只有密码正确,指令才能执行。
如果密码未生效,也可以临时设置:
config set requirepass 123456
二、springboot项目相关的Redis配置以及工具类
2.1 pom依赖添加
<!-- Redis 配置中使用了Lettuce连接工厂,需要Commons Pool 2来支持连接池--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.7.3</version></dependency>
2.2 yam配置
spring:redis:# 地址host: 192.168.1.135# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码password: 123456# 连接超时时间timeout: 10slettuce:pool:# 连接池中的最小空闲连接min-idle: 0# 连接池中的最大空闲连接max-idle: 8# 连接池的最大数据库连接数max-active: 8# #连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1ms
2.3 配置序列化方式 RedisConfig
在 Spring Boot 项目中,使用 RedisTemplate 来与 Redis 进行交互,默认情况下,RedisTemplate 使用的是 JdkSerializationRedisSerializer 来序列化对象,这会将对象序列化为字节流存储到 Redis 中。
那么为什么要修改 Redis 的序列化方式呢?
1.默认的 JdkSerializationRedisSerializer 是二进制的,不易于人工阅读和调试,而 StringRedisSerializer 则以字符串形式存储数据,更加直观。
2.在某些情况下,使用默认的序列化方式可能会导致一些问题,比如在 Redis 中存储对象时,如果对象的类结构发生变化,反序列化时可能出现类型转换异常。
因此,通过修改 RedisTemplate 的序列化方式,我们可以更好地控制数据的存储格式,提高代码的可读性和可维护性,并解决一些潜在的序列化问题。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;