问题索引
如何连接分布式缓存数据库实例?
分布式缓存数据库支持通过客户端工具、数据库管理工具 DMC 以及多语言 SDK 等多种方式连接。
内网连接
通过同一 VPC 内的云服务器(CVM)连接实例,延迟通常低于 1ms。连接方式:
redis-cli -h <实例内网地址> -p <端口> -a <密码>
外网连接
若需从本地或非腾讯云环境访问实例,可在控制台开启外网访问地址。出于安全考虑,外网连接建议配合以下措施:
设置安全组规则,仅允许特定 IP 段访问。
开启 SSL 加密传输,保障数据传输安全。
使用强密码策略,定期更换密码。
可视化工具连接
支持通过 Redis Desktop Manager 等可视化工具管理实例。若需使用,可通过 CVM 作为跳板机对外提供连接地址。
说明:
CVM 和实例之间可以使用内网连接吗?
可以,但需同时满足以下条件:
云服务器和数据库实例属于同一账号。
两者在同一个 VPC 内(保障同一个地域),或同在基础网络内。
CVM 和实例不在同一个 VPC 内,怎么办?
可以通过云联网来连接实例。对于不同 VPC 下(包括同账号/不同账号,同地域/不同地域)的云服务器和数据库,均可通过云联网实现内网连接。
CVM 和实例在不同地域下,可以直接内网访问吗?
不可以。不同地域属于不同的 VPC 网络,不能直接内网访问。建议在两个 VPC 网络之间建立云联网来实现互通。
同一地域下不同可用区,可以使用内网连接吗?
需要看是否在同一私有网络中:
若为同一私有网络的不同可用区,可以内网互通。
若为不同私有网络(如 VPC1 和 VPC2),无法直接内网互通,需通过云联网或更换网络解决。
不同账号下的 CVM 和实例,可以直接内网连接吗?
不可以。不同账号下的资源在不同的 VPC 内,不可以直接内网连接。建议使用云联网实现跨账号 VPC 互通。
外网无法连接实例如何排查?
外网无法连接实例时,请按照以下步骤逐一排查:
1. 确认实例已开启外网访问地址。登录 Redis 控制台,在实例详情页的网络信息中查看外网地址是否已开启。
2. 检查安全组规则是否允许外网 IP 访问。确认安全组的入站规则已放通您的客户端 IP 和实例端口(默认 6379)。
3. 确认客户端所在网络是否能访问公网。可尝试
telnet <外网地址> <端口> 测试网络连通性。4. 确认连接命令中的密码格式正确。若实例设置了免密访问,则无需
-a 参数;若设置了密码,标准架构格式为 -a <密码>,集群架构多账号模式格式为 -a <账号名>:<密码>。如何检测实例端口连通性?
使用
telnet 命令即可检测端口连通性:telnet <实例地址> <端口>
若连接成功,说明端口可达;若连接超时或被拒绝,请排查安全组规则和网络配置。
如何保障实例的数据传输安全?
分布式缓存数据库提供多层次的数据安全保障机制:
网络隔离
实例部署在用户 VPC 私有网络中,通过网络隔离确保实例仅对指定 VPC 内的资源可见,外部网络无法直接访问。
访问控制
安全组:支持配置安全组规则,精确控制允许访问实例的 IP 地址和端口范围。
密码认证:支持设置实例密码或免密访问,集群架构支持多账号权限控制。
高危命令禁用:支持在控制台禁用
FLUSHALL、KEYS 等高危命令,防止误操作导致数据丢失。传输加密
支持开启 SSL/TLS 加密连接,对客户端与实例之间的数据传输进行加密,防止传输过程中的数据窃取或篡改。适用于金融、政务等对数据传输安全有严格要求的场景。
客户端连接实例失败如何系统性排查?
客户端无法连接实例时,建议按以下顺序系统性排查:
第一步:确认实例状态
登录控制台,检查实例是否处于运行中状态。若实例状态为隔离中、已回收或创建中,则无法建立连接。
第二步:检查连接地址和端口
确认连接命令中使用的 IP 地址和端口与实例详情页显示的一致:
内网访问使用内网地址,外网访问使用外网地址。
默认端口为 6379,若修改过端口请使用实际端口。
集群架构请使用 Proxy 地址,而非节点直连地址。
第三步:检查网络连通性
从客户端执行
telnet <实例地址> <端口> 测试端口是否可达。若 telnet 不通,检查安全组入站规则是否放通了客户端 IP 和实例端口。
确认客户端与实例在同一 VPC 内(或已通过云联网打通)。
第四步:检查认证信息
确认密码格式是否正确。集群架构多账号模式下格式为
<账号名>:<密码>。若实例开启了免密访问,连接命令中无需
-a 参数。确认账号未被禁用或删除。
第五步:检查连接数上限
通过控制台查看实例当前连接数,确认是否已达上限。
若连接数已满,检查是否存在连接泄漏,或扩容连接数上限。
第六步:检查客户端配置
确认客户端 SDK 版本与 Redis 引擎版本兼容。
检查客户端是否配置了连接超时和重试机制。
确认 DNS 解析正常(若使用域名连接)。
错误信息 | 可能原因 | 处理方式 |
Connection refused | 端口未开放或实例异常 | 检查实例状态和安全组规则 |
Connection timed out | 网络不通 | 检查 VPC/安全组/云联网配置 |
NOAUTH Authentication required | 未提供密码 | 检查 -a 参数是否正确 |
ERR invalid password | 密码错误 | 重置密码或检查账号格式 |
ERR max number of clients reached | 连接数超限 | 释放空闲连接或扩容 |
客户端连接池该怎么配置?
合理配置连接池是保障连接稳定性和性能的关键。以下是常见客户端连接池的推荐参数:
Jedis 连接池配置示例:
JedisPoolConfig config = new JedisPoolConfig();// 最大连接数:根据业务并发量设置,建议不超过实例连接数上限的 80%config.setMaxTotal(200);// 最大空闲连接数:建议与 MaxTotal 保持一致config.setMaxIdle(200);// 最小空闲连接数:保证一定预热连接,避免冷启动延迟config.setMinIdle(10);// 连接池耗尽时是否阻塞等待(建议设为 true,避免直接抛异常)config.setBlockWhenExhausted(true);// 最大等待时间(毫秒)config.setMaxWaitMillis(3000);// 借用连接时检测可用性(轻微性能开销,建议开启)config.setTestOnBorrow(true);// 空闲连接检测(建议开启,防止连接被服务端断开后池中残留)config.setTestWhileIdle(true);// 空闲连接检测间隔(毫秒)config.setTimeBetweenEvictionRunsMillis(30000);
Lettuce 连接池配置建议:
// Lettuce 默认连接是线程安全的,单连接即可满足多线程并发// 仅在极高并发场景下需要开启连接池GenericObjectPoolConfig<StatefulRedisConnection<String, String>> poolConfig =new GenericObjectPoolConfig<>();poolConfig.setMaxTotal(50);poolConfig.setMaxIdle(50);poolConfig.setMinIdle(5);
配置注意事项:
不要超过实例连接数上限:集群架构默认连接数上限 = 10000 × 分片数(单分片可上调至最高40000),标准架构根据规格不同连接数上限在10000 - 40000之间。确保客户端总连接数不超过此上限。
避免连接泄漏:务必在
finally 块或 try-with-resources 中归还连接。连接超时设置:建议连接超时设为2 - 3秒,读取超时根据业务最差响应时间设定(如5秒)。
生产环境开启 SSL:若实例开启了 SSL 加密,连接池配置中需启用 SSL 参数。