云数据库Redis版支持多种连接方式,本文介绍各类连接问题的排查与解决方法。

Redis与ECS之间的连接问题

云数据库Redis只支持内网访问,因此需要确保ECS与Redis之间的连接。如果二者无法互访,可能是下列原因引起的。

  • Redis实例和ECS实例不在同一账号下。解决方法:
  • ECS与Redis不在相同地域。解决方法:使用全球多活进行跨地域实例迁移
  • ECS与Redis的网络类型不同,一方是经典网络而另一方是VPC网络。解决方法:
  • ECS的安全组规则阻塞了对Redis地址和端口的访问。解决方法:调整ECS安全组规则,允许访问。
  • Redis的白名单中未加入ECS的内网地址。解决方法:设置Redis白名单,将ECS的内网IP加入其中。
    说明 如果出现 Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: 拒绝连接 (Connection refused),请检查Redis白名单设置,若白名单设置无误且可以在ECS上ping通Redis实例,请检查应用中的连接配置。
  • ECS行为异常触发安全策略,导致服务被禁止。如果多台正常连接到Redis的ECS实例中有某个实例出现突发的连接问题,尤其是ECS能ping通Redis但telnet 6379端口失败时,可能是该ECS存在异常行为(例如对外攻击)导致服务被禁止。解决方法:请检查服务器,并在安全组的出方向设置精确的规则,比如限定该ECS只能访问业务需要的地址和端口,此处为Redis实例的6379端口。若问题还不能解决,请提交工单进行详细排查。
  • DNS解析问题。客户端出现UnknownHostException或者failed to connect: r-***************.redis.rds.aliyuncs.com could not be resolved之类的报错。解决方法:用ping或者telnet命令测试Redis连接地址的解析情况,如不成功请检查DNS配置。
说明 如因条件限制无法实施以上解决方案,您可以提交工单重新创建ECS或Redis实例,使二者在同一VPC中。

从公网连接 Redis

如您需要从本地主机连接云数据库Redis版,请参见公网连接方法
说明 建议您使用阿里云内网通过ECS连接Redis实例,提高安全性。

忘记密码

请在控制台修改密码

客户端连接方法

使用Jedis、phpredis、redis-py、C/C++、.net、node-redis、C#等客户端连接Redis的方法请参见Redis客户端连接

使用阿里云的数据管理工具DMS连接并管理数据库请参见 使用DMS登录Redis

使用redis-cli连接Redis的方法请参见redis-cli连接

说明 如果使用各语言的客户端或者redis-cli连接Redis失败,请先排查Redis与ECS之间的连接问题

客户端连接问题

带宽超限导致连接受限

每种规格的Redis实例都有相应的带宽限制,详情请参见规格性能。在网络带宽资源充足的情况下,云数据库Redis版的带宽限制不生效,当资源不足时,实例的带宽上限开始生效,此时如果流量过大,则业务请求会受到带宽限制。解决方法:

  • 分析实例的内存结构使用SCAN命令,找出大Key进行优化处理。
  • 升级实例规格,提升带宽。
  • 转换为同规格的集群版实例,提升带宽。
  • 转换为同规格的读写分离实例,提升带宽,同时可以把大Key或者热点Key存储在只读实例中,避免其影响其它业务。

性能问题导致连接不畅或失败

使用 KEYS *HGETALL 等命令影响了Redis性能,导致线程阻塞等情况,进而出现连接问题。解决方法:
  • 查看监控信息,找出问题原因并采取针对性的办法。
  • 查询慢日志,根据慢日志详情进行优化。您可以在Redis控制台查看慢日志或使用SHOW LOG命令查看。
  • 禁止线上使用 KEYSFLUSHALLFLUSHDB 等命令。可通过Redis的RENAME机制禁止,或者使用SCAN 的方式渐进式处理。
  • 如您的Redis实例引擎版本为4.0,可以借助LazyFree机制的UNLINKFLUSHALL ASYNCFLUSHDB ASYNC命令和相关参数优化业务代码。
  • 分析内存结构,拆分大Key。
  • 优化热点Key。如果您使用的是集群版实例,还可以分析特定子节点中的热点Key

排查思路总结

当您发现与Redis的连接出现异常时,可以根据本文的内容,从环境前提连接方法错误信息带宽限制性能问题等方面进行排查。