一、环境要求
·PHP 7.0及以上版本。
·已安装 phpredis 扩展(推荐5.0及以上版本)。
二、安装客户端
通过 PECL 安装 phpredis 扩展:
pecl install redis
安装完成后,在 php.ini 中添加以下配置:
extension=redis.so
验证安装:
php -m | grep redis
三、获取连接信息
1. 登录 分布式缓存数据库控制台。
2. 在实例列表中,单击目标实例 ID,进入实例详情页。
3. 在网络信息区域,获取实例的连接地址和端口号。
·代理模式:获取 VIP 地址和端口(默认6379)。
·直连模式:获取各分片节点地址和端口(默认6379)。
4. 在配置信息区域,获取实例的连接密码。代理模式与直连模式的认证方式不同:
·代理模式:默认账号使用 实例 ID:密码 格式,自定义账号使用 用户名@密码 格式;免密认证实例无需密码。
·直连模式:复用 Redis 原生 ACL 认证机制,不支持 用户名@密码 拼接格式,支持以下两种认证方式:
·默认账号:仅需密码,即 AUTH password。
·自定义账号:需同时指定账号名与密码,即 AUTH account password。
四、代理模式连接示例
代理模式下,客户端通过 Proxy 代理层提供的统一 VIP 地址连接实例,Proxy 自动处理请求路由和故障转移,客户端无需感知后端拓扑变化。
五、基础连接示例
<?php// 连接参数$host = "192.xx.xx.2"; // 实例 VIP 地址$port = 6379; // 实例端口$password = "crs-xxxx:密码"; // 默认账号密码格式:实例ID:密码// 创建连接$redis = new Redis();// 连接实例,设置超时时间为 2 秒$redis->connect($host, $port, 2.0);// 认证$redis->auth($password);// 选择数据库(代理模式支持多 DB)$redis->select(0);// 写入数据$redis->set("name", "腾讯云分布式缓存数据库");// 读取数据$value = $redis->get("name");echo "get name: " . $value . "\\n";// 设置带过期时间的 Key$redis->setex("session:user123", 3600, "session_data");// 哈希操作$redis->hSet("user:1001", "name", "张三");$redis->hSet("user:1001", "age", "28");$userInfo = $redis->hGetAll("user:1001");echo "user info: ";print_r($userInfo);// 关闭连接$redis->close();?>
六、自定义账号连接示例
<?php$host = "192.xx.xx.2";$port = 6379;$username = "myuser";$password = "myuser@MyPassword"; // 代理模式自定义账号:用户名@密码整体作为密码传入(区别于直连模式 ACL 的账号名/密码分离传参)$redis = new Redis();$redis->connect($host, $port, 2.0);$redis->auth($password);$redis->set("key", "value");echo $redis->get("key") . "\\n";$redis->close();?>
七、连接池示例
在高并发场景下,建议使用持久连接(pconnect)复用 TCP 连接,减少连接建立开销:
<?php$host = "192.xx.xx.2";$port = 6379;$password = "crs-xxxx:密码";// 使用持久连接,第四个参数为持久连接标识$redis = new Redis();$redis->pconnect($host, $port, 2.0, "persistent_id_01");$redis->auth($password);// 设置读写超时$redis->setOption(Redis::OPT_READ_TIMEOUT, 2);// 业务操作$redis->set("counter", 0);$redis->incr("counter");$count = $redis->get("counter");echo "counter: " . $count . "\\n";// 持久连接不需要显式关闭,由 PHP 生命周期管理?>
八、SSL 加密连接示例
<?php$host = "192.xx.xx.2";$port = 6379;$password = "crs-xxxx:密码";$caCertPath = "/path/to/ca.pem"; // CA 证书文件路径$redis = new Redis();// 配置 TLS/SSL 参数$redis->connect("tls://" . $host, $port, 2.0, null, 0, 0, [ 'stream' => [ 'verify_peer' => true, 'verify_peer_name' => false, 'cafile' => $caCertPath, ]]);$redis->auth($password);$redis->set("ssl_test", "encrypted_connection");echo $redis->get("ssl_test") . "\\n";$redis->close();?>
九、直连模式连接示例
直连模式下,客户端使用 Redis Cluster 协议直接连接各分片节点,本地处理 MOVED/ASK 重定向,可直接使用社区标准的 Redis Cluster 客户端接入。
注意:说明:
十、基础连接示例
<?php// 直连模式下各分片节点地址$seeds = [ "192.xx.xx.2:6379", "192.xx.xx.3:6379", "192.xx.xx.4:6379"];$password = "password"; // 直连模式默认账号仅传密码,不带实例 ID 前缀// 创建 RedisCluster 连接// 参数说明:名称, 节点数组, 连接超时, 读取超时, 是否持久连接, 密码$cluster = new RedisCluster( null, // 集群名称,传 null 使用 seeds 方式 $seeds, // 分片节点地址列表 2.0, // 连接超时(秒) 2.0, // 读取超时(秒) false, // 是否持久连接 $password // 认证密码);// 写入数据(客户端自动路由到正确的分片)$cluster->set("cluster:key1", "value1");$cluster->set("cluster:key2", "value2");$cluster->set("cluster:key3", "value3");// 读取数据echo "key1: " . $cluster->get("cluster:key1") . "\\n";echo "key2: " . $cluster->get("cluster:key2") . "\\n";echo "key3: " . $cluster->get("cluster:key3") . "\\n";// 哈希操作$cluster->hSet("user:{1001}", "name", "张三");$cluster->hSet("user:{1001}", "age", "28");$userInfo = $cluster->hGetAll("user:{1001}");echo "user info: ";print_r($userInfo);// 使用 Hash Tag 确保相关 Key 路由到同一分片$cluster->set("{order:1001}:status", "paid");$cluster->set("{order:1001}:amount", "99.00");$cluster->set("{order:1001}:time", "2025-01-01 10:00:00");echo "order status: " . $cluster->get("{order:1001}:status") . "\\n";// 关闭连接$cluster->close();?>
十一、持久连接示例
<?php$seeds = [ "192.xx.xx.2:6379", "192.xx.xx.3:6379", "192.xx.xx.4:6379"];$password = "password"; // 直连模式默认账号仅传密码,不带实例 ID 前缀// 使用持久连接的 RedisCluster$cluster = new RedisCluster( null, $seeds, 2.0, // 连接超时 2.0, // 读取超时 true, // 开启持久连接 $password);// 设置序列化方式(推荐 PHP 序列化或 JSON)$cluster->setOption(RedisCluster::OPT_SERIALIZER, Redis::SERIALIZER_JSON);// 存储复杂数据结构$data = [ "id" => 1001, "name" => "产品A", "price" => 99.99, "tags" => ["热门", "推荐"]];$cluster->set("product:1001", $data);// 读取并自动反序列化$product = $cluster->get("product:1001");print_r($product);?>
十二、自定义账号(ACL)连接示例
直连模式复用 Redis 原生 ACL 认证机制,使用自定义账号时需以 [账号名, 密码] 数组形式传入,不支持 用户名@密码 拼接格式。
<?php$seeds = [ "192.xx.xx.2:6379", "192.xx.xx.3:6379", "192.xx.xx.4:6379"];// ===== ACL 认证机制:账号名与密码是两个独立字段 =====// 直连模式的多账号能力基于 Redis 原生 ACL:控制台创建的每个自定义账号// 都是一个独立的 ACL user,认证时客户端向节点发送 AUTH <account> <password>。// phpredis 的 RedisCluster 以 [账号名, 密码] 数组形式传入(等价于执行 AUTH account password),// 不要写成代理模式的 "myuser@MyPassword" 拼接格式。$cluster = new RedisCluster( null, // 集群名称,传 null 使用 seeds 方式 $seeds, // 分片节点地址列表 2.0, // 连接超时(秒) 2.0, // 读取超时(秒) false, // 是否持久连接 ["myuser", "MyPassword"] // ACL 账号:[账号名 → AUTH account, 密码 → AUTH password](纯密码,无需拼接));$cluster->set("key", "value");echo $cluster->get("key") . "\\n";$cluster->close();?>
十三、连接参数说明
| 参数 | 说明 | 推荐值 |
| host | 实例连接地址。代理模式为 VIP 地址,直连模式为分片节点地址 | – |
| port | 实例端口号 | 6379 |
| timeout | 连接超时时间(秒) | 2.0 |
| read_timeout | 读取超时时间(秒) | 2.0 |
| persistent | 是否使用持久连接 | 高并发场景建议开启 |
| password | 认证密码 | 默认账号格式:实例 ID:密码 |
十四、连接超时
·确认客户端所在 CVM 与分布式缓存数据库实例在同一 VPC 内。
·确认安全组规则已放通对应端口。
·确认连接地址和端口正确。