Redis突现拒绝连接问题处理总结

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis突现拒绝连接问题处理总结

一、问题回顾

项目突然报异常

[INFO] 2024-02-20 10:09:43.116 i.l.core.protocol.ConnectionWatchdog    [171]: Reconnecting, last destination was 192.168.0.231:6379
[WARN] 2024-02-20 10:09:43.120 i.l.core.protocol.ConnectionWatchdog    [151]: Cannot reconnect to [192.168.0.231:6379]: finishConnect(..) failed: Connection refused: /192.168.0.231:6379

看异常显示redis无法连接,使用redis-cli 命令也无法正常进入,显示拒绝连接,但进程没有挂掉。

分析原因是由于redis与业务共一个服务器,内存只有8G,业务服务启动过多,内存不足导致redis拒绝连接。

没办法只能先启动,命令如下:

/usr/local/bin/redis-server /usr/local/redis/redis.conf

启动后发现项目自动连上了,但查看redis数据时,发现历史数据都丢失了。继续查看redis配置

cat /usr/local/redis/redis.conf

查看是否有设置持久化,没有开启aof,只开启了默认的rdb。

rdb的路径配置是当前目录。

而前面启动的路径并不是在/usr/local/redis/,导致数据为空,重新切换到该路径启动数据恢复正常。

二、解决方案

上面临时启动治标不治本,跟领导商量了一下,决定找网管把服务器的内存升级一下。升级面临着需要重启服务器,所有依赖redis的服务都会停摆,所以要提前做好准备工作,节省操作时间。

步骤如下:

1、把相关业务添加到系统自启动

2、将Redis也添加到系统自启动

3、停止业务服务,避免新的请求进来

4、手动保存Redis镜像,保证数据不丢失

5、升级配置,重启服务器

6、等待Redis和业务开机启动

7、验证业务服务是否正常

详细操作:

1、把相关业务添加到系统自启动

本例所使用的操作系统是Centos 7,其他系统的命令会有所不同。

cd /etc/rc.d
chmod +x rc.local      #添加rc.local可执行权限
vim rc.local

在文件的最后添加下面代码:

sudo sh /mnt/core/start.sh

以上脚本文件也要添加可执行权限

chmod +x start.sh
2、创建Redis开机自启动服务

打开目录

cd /usr/lib/systemd/system

创建服务

touch redis.service

然后使用以下命令打开文件

vim redis.service

并将文件内容更改为以下代码:

[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target

使Redis服务开机自启生效

systemctl enable redis

检查Redis是否已成功设置为开机自启。

可以通过运行以下命令来确认新服务的设置

systemctl list-unit-files | grep redis

完成以上步骤后,您的Redis服务器应该会在每次系统启动时自动启动。

三、注意事项

1、我们要把redis.conf的dir配置修改成固定的路径,否则自启动时使用的dump.rdb不是原文件,会重新生成一个新的。

dir ./ 修改成 dir /usr/local/redis ,如下图:

2、启动重启之前需要手动保存一下,本例没有启用aof,直接关闭可能有数据丢失风险。操作命令如下

redis-cli -a 'password'
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> lastsave
(integer) 1708435050

lastsave命令需要多执行几次,然后比对时间,可以根据以下命令查看

在linux环境下时间戳转换成日期格式

date -d @1708435050

确保已经把数据完整保存后就可以执行关闭Redis操作了

127.0.0.1:6379> shutdown

四、相关命令

  1. 关闭redis
redis-cli -h 192.168.0.231 -a 'password' shutdown

本机可以省略-h参数

redis-cli -a 'password' shutdown

或进入redis-cli后操作

127.0.0.1:6379> shutdown
  1. 查看 redis 数据大小
redis-cli -a 'password' dbsize
127.0.0.1:6379> dbsize

  1. 查看redis服务执行的命令情况
redis-cli -a 'password' monitor

  1. 实时监控 Redis 实例
redis-cli -a 'password' --stat

默认每秒输出一条新行,其中包含有用信息和每个采集点的请求次数差异

  1. 查看 redis 默认的最大连接数
redis-cli -a 'password' config get maxclients
# 或进入redis-cli后操作
127.0.0.1:6379> config get maxclients

  1. 查看 redis 默认存放备份文件的目录路径,配置文件中默认为 dir ./
redis-cli -a 'password' config get dir
# 或进入redis-cli后操作
127.0.0.1:6379> config get dir

  1. 查看备份 RDB 文件的名称,默认为 dump.rdb
redis-cli -a 'password' config get dbfilename
# 或进入redis-cli后操作
127.0.0.1:6379> config get dbfilename

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
NoSQL 网络安全 Redis
用Windows连接Liunx中的redis
用Windows连接Liunx中的redis
22 0
|
3月前
|
消息中间件 移动开发 NoSQL
Redis 协议 事务 发布订阅 异步连接
Redis 协议 事务 发布订阅 异步连接
|
5月前
|
消息中间件 NoSQL 关系型数据库
redis事务和异步连接
redis事务和异步连接
42 1
|
15天前
|
缓存 运维 NoSQL
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
【Redis故障排查】「连接失败问题排查和解决」带你总体分析和整理Redis的问题故障实战开发指南及方案
33 0
|
5月前
|
NoSQL Java Redis
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理(一)
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理
282 0
|
9天前
|
NoSQL 安全 网络安全
Redis连接:加速数据访问与保障安全传输的关键
Redis连接:加速数据访问与保障安全传输的关键
|
20天前
|
Cloud Native NoSQL 数据管理
Serverless 应用引擎常见问题之首次启动获取不到redis连接如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
28 3
Serverless 应用引擎常见问题之首次启动获取不到redis连接如何解决
|
2月前
|
XML NoSQL Java
java 连接redis 执行查询
要使用Java连接Redis并执行查询,你需要使用Jedis这个Java开源库。首先,你需要在你的Java项目中添加Jedis的依赖。你可以通过在你的项目的pom.xml文件中添加以下代码来实现: ```xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.7.0</version> </dependency> ``` 然后,你需要在代码中导入Jedis库: ```java import redis.clients.jedis.Jedis
|
3月前
|
NoSQL Java Redis
SpringBoot连接redis
SpringBoot连接redis
25 0
|
3月前
|
存储 NoSQL 关系型数据库
Redis协议与异步方式(redis网络层、pipeline、事务、lua脚本、ACID特性、发布订阅、hiredis实现同步连接与异步连接)
Redis协议与异步方式(redis网络层、pipeline、事务、lua脚本、ACID特性、发布订阅、hiredis实现同步连接与异步连接)
63 0