PHP 8.3 配置 Redis 缓存需先安装启用 redis 扩展,再通过单例封装连接并实现 get/set 操作,最后在 API 中按需缓存响应数据,注意键设计、大小限制与命中率监控。

PHP 8.3 配置 Redis 缓存来提升 API 速度,核心是装对扩展、连上 Redis 服务、在业务逻辑中合理缓存响应数据。不改代码结构,只加几行缓存读写,就能显著降低数据库压力和响应时间。
确认 PHP 8.3 已启用 redis 扩展
PHP 8.3 默认不自带 redis 扩展,需手动安装并启用:
- Linux(如 Ubuntu/Debian):运行 sudo apt install php-redis,然后检查 php -m | grep redis 是否输出 redis
- macOS(Homebrew):用 pecl install redis,再在 php.ini 中添加 extension=redis.so
- Windows:下载对应线程安全(TS)或非线程安全(NTS)的 php_redis.dll,放入 ext/ 目录,并在 php.ini 加 extension=php_redis.dll
- 验证是否生效:新建 test.php,写 <?php new Redis(); echo "OK"; ?>,无报错即成功
连接 Redis 并封装基础缓存操作
避免每次请求都新建连接,推荐使用单例或依赖注入方式管理 Redis 实例。一个轻量封装示例如下:
<?php
class Cache {
private static $instance = null;
private $redis;
private function __construct() {
$this->redis = new Redis();
$this->redis->connect('127.0.0.1', 6379);
// 可选:设置超时、密码、序列化方式(如 Redis::SERIALIZER_PHP)
}
public static function getInstance(): self {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function get(string $key): ?string {
return $this->redis->get($key);
}
public function set(string $key, string $value, int $ttl = 3600): bool {
return $this->redis->setex($key, $ttl, $value);
}
}
在 API 路由中嵌入缓存逻辑
以常见 REST API 场景为例(如获取用户列表),缓存关键响应内容:
立即学习“PHP免费学习笔记(深入)”;
- 生成唯一缓存键,例如:"api_users_list_v1_{$page}_{$limit}"
- 先查缓存,命中则直接返回 JSON 响应,跳过数据库查询和渲染
- 未命中则执行原逻辑(查 DB、组装数组),再将 json_encode() 后的结果存入缓存
- 注意:敏感数据、实时性要求高的接口(如订单状态)不宜缓存,或设极短 TTL(如 5–30 秒)
优化建议与注意事项
缓存不是“一加就快”,要避开常见坑:
- 键设计要带版本号或哈希前缀,便于批量失效(如用 cache:users:v2: 开头,清空时 SCAN 0 MATCH cache:users:v2:*)
- 避免缓存大对象:Redis 单 value 推荐 ≤ 1MB;若返回含图片 Base64 或大量嵌套数据,先精简或分片
- 开启 Redis 持久化或配置足够内存,防止重启丢缓存导致雪崩;可搭配 phpredis 的压缩支持(需编译时启用 LZ4/ZSTD)
- 记录缓存命中率:用 INFO commandstats 查 cmdstat_get.hits/cmdstat_get.calls,长期低于 60% 要重新评估策略



















