事情经过:项目中使用redis,环境进行过一次网络迁移,之后就无法拿到redis连接。
1、先通过ping命令排除网络原因,其实这里建议使用 telnet 命令:格式 telnet ip port,不仅能排查网络是否连通并且知道改端口号是否能脸上,以上的port指的是redis的端口号。
以上结论是ping能ping通,但telnet无法连接,说明端口号的redis应用有相应的类似ip白名单需要修改,由于是运维进行更改的,这里不进行细说。
2、在一阵配置后telnet终于可以连通了,发现还是拿不到redis连接,而且展示在服务器端的异常和不能连通时的异常一样,通过ssh连接到redis所在的服务器,并通过redis-cli -h ip -p port 连接到对应的redis中,使用get操作,keys操作都没有问题,只有进行set操作时抛出异常如下:
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
经过网上搜索得出符合我们情况的结论,redis在最后一次的后台保存失败,redis将停止接收写操作,这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘,否则就会没人注意到灾难的发生。
通过redis-cli登录到对应的redis中,设置 命令如下:
config set stop-writes-on-bgsave-error no
这样就解决了无法写入的问题。
若以上分析仍不能解决你的问题,可以查看这篇由于redis占用内存太大引起相关错误:https://yq.aliyun.com/articles/629296