Docker Redis远程主机强迫关闭了一个现有的连接

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Docker Redis远程主机强迫关闭了一个现有的连接

使用Docker安装的redis,springboot连接redis,经常过一段时间就从redis取值失败,报这个错误Redis exception; nested exception is io.lettuce.core.RedisException: java.io.IOException: 远程主机强迫关闭了一个现有的连接。


1. 报错原因

spring中配置的超时时间应该大于tcp的存活时间,否则tcp连接还存活着,spring以为已经超时,又去创建,就会强制之前的连接关闭。


2.解决方案

修改redis.conf文件中的tcp-keepalive数值。就是一次连接tcp的存活时间


但是通过reids安装的有时候配置文件可能会不生效,所以使用docker重装redis,确保配置文件可以生效


修改springboot 连接redis的超时时间,需要这个时间大于tcp-keepalive的时间


3.重装Redis确保配置文件生效

拉取最新镜像

docker pull redis

创建文件夹

cd /home
mkdir redis/conf
mkdir redis/data

写入redis配置文件。redis.conf

1. cd /home/redis/conf
2. vim redis.conf

配置文件内容

##节点端口
port 6379       
##允许任何来源
#bind 0.0.0.0          
bind 47.99.149.92 120.244.10.31
## 是为了禁止公网访问redis cache,加强redis安全的。它启用的条件,有两个:1) 没有bind IP 2) 没有设置访问密码 启用后只能够通过lookback ip(127.0.0.1)访问Redis cache,如果从外网访问,则会返回相应的错误信息 
protected-mode no
##开启持久化模式
appendonly yes
appendfilename appendonly.aof
#开启混合持久化
aof-use-rdb-preamble yes
# 文件达到1m时进行重写,然后如果文件大小增长了一倍,也会触发重写。
auto-aof-rewrite-min-size 1mb
auto-aof-rewrite-percentage 100
##AOF 文件和 Redis 命令是同步频率的,假设配置为 always,其含义为当 Redis 执行命令的时候,则同时同步到 AOF 文件,这样会使得 Redis 同步刷新 AOF 文件,造成缓慢。而采用 evarysec 则代表
## 每秒同步一次命令到 AOF 文件。
appendfsync everysec            
#pidfile redis.pid
#进程pid文件,加port以示区分
pidfile /data/redis/data/redis_6379.pid
# 后台运行 ---- docker中使用后台运行将无法启动容器(应该是容器无法检测后台运行进程)
# daemonize yes
databases 20
tcp-keepalive 20
#redis初始密码
requirepass 1234

启动容器

1. 
2. docker run -d -p 6379:6379 --name my_redis  --privileged=true -v /home/redis/conf/red

通过这种方式可以指定redis的配置文件,确保配置文件中的tcp-keepalive生效

4. 配置springboot连接redis

##redis配置
spring.redis.database=0
### 服务器地址,默认为localhost
spring.redis.host=172.1.1.1
### 链接端口,默认为6379
spring.redis.port=6379
### redis密码默认为空
spring.redis.password=123456
#处理连接超时等 如 java.io.IOException: 远程主机强迫关闭了一个现有的连接。
#Spring Boot 从 2.0版本开始,将默认的Redis客户端Jedis替换为Lettuce
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms
spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0
spring.redis.timeout=30000ms
# 关闭超时时间
spring.redis.lettuce.shutdown-timeout=100


目录
相关文章
|
5月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
2月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
247 5
kde
|
2月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
kde
739 7
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
413 5
|
5月前
|
NoSQL Redis 数据安全/隐私保护
挂载配置文件以Docker启动Redis服务
以上步骤提供了一个高效且实用的方式来使用Docker启动并运行带有自定义配置的Redis服务。这些操作可以适用于开发、测试和生产环境,是一种灵活且可扩展的部署方案。通过挂载配置文件和数据卷,您可以轻松地管理和迁移您的Redis实例。
591 9
|
8月前
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
478 10
|
开发工具 虚拟化 Docker
在Hyper-V的Docker主机上使用Visual Studio Docker工具
本文讲的是在Hyper-V的Docker主机上使用Visual Studio Docker工具【编者的话】本文主要介绍了在Windows下使用Hyper-V和Visual Studio来进行容器化的实践,及遇到的问题和相应解决方法。
2492 0