12_SpringBoot集成Redis
本笔记来源于:尚硅谷Redis零基础到进阶,最强redis7教程,阳哥亲自带练(附redis面试题)
b站视频
文章来自:
https://github.com/Romantic-Lei/Learning-in-practice
总体概述
jedis-lettuce-RedisTemplate三者的联系
本地Java连接Redis常见问题,小白注意
- bind配置请注释掉
- 保护模式设置为no
- Linux系统的防火墙设置
- Redis服务器的IP地址和密码是否正确
- 忘记写访问redis的服务端口号和auth密码
集成Jedis
是什么:Jedis Client是Redis官网推荐的一个面向Java客户端,库文件实现了对各类API进行封装调用
步骤:
建module
改pom
1 |
|
- 写YML
1 |
|
- 主启动
1 |
|
- 业务类
入门案例:
1 |
|
常用五大数据类型:
1 |
|
集成letter
- 是什么
Lettuce是一个Redis的Java驱动包,Lettuce翻译为生菜
- lettuce VS Jedis
- 案例
修改POM
1 |
|
业务类
1 |
|
集成RedisTemplate (推荐使用)
连接单机
boot整合Redis基础演示
1. 建module
2. 改pom
1 |
|
3. 写YML
1 |
|
4. 主启动
1 |
|
5. 业务类
配置类 RedisConfig.java
1 |
|
配置类 SwaggerConfig.java
1 |
|
Service层
1 |
|
Controller层
1 |
|
6. 测试
项目启动,连接swagger:http://localhost:7777/swagger-ui.html
序列化问题
为什么会这样?
RedisTemplate使用的是JDK序列化方式(默认)惹的祸
连接集群
启动Redis集群6台实例
第一次改写YML
1 |
|
直接通过微服务访问Redis集群
一切正常 (http://localhost:7777/swagger-ui.html)
集群拓扑图发生变化之后
- 人为模拟,master-6381机器意外宕机,手动shutdown
- 先对redis集群用命令的方式,手动验证各种读写命令,看看6384是否上位
- Redis Cluster集群能自动感知并自动完成主备切换,对应的slave6384会被选举为新的master节点
- 通过redis客户端连接6384可以正常进行读写操作
- 微服务客户端再次尝试读写访问
故障分析
故障现象:
SpringBoot客户端没有动态感知RedisCluster的最新集群信息
【故障演练】 Redis Cluster集群部署采用了3主3从拓扑结构,数据读写访问master节点, slave节点负责备份。当master宕机主从切换成功,redis手动OK,but 2个经典故障
导致原因
SpringBoot 2.X版本,Redis默认的连接池采用Lettuce,当Redis集群节点发生变化后,Letture默认是不会刷新节点拓扑
解决方案
- 排除lettuce采用Jedis(不推荐)
- 重写连接工厂实例(极度不推荐)
1 |
|
- 刷新节点集群拓扑动态感应
第二次改写YML
1 |
|
12_SpringBoot集成Redis
http://yuanql.top/2023/05/27/11_Redis/Redis_尚硅谷/Redis基础篇/12_SpringBoot集成Redis/