opcache必须启用并配置为生产模式(opcache.validate_timestamps=0),redis适合结构化热点数据,memcached适用于高并发简单键值读;三者按场景分层协作,非简单二选一。

OpCache 必须开,Redis 和 Memcached 不是二选一,而是按场景分层用。 多级缓存不是堆砌工具,而是让每层干它最擅长的事:OpCache 拦住 PHP 解析编译,Redis 管结构化热点数据,Memcached 抢简单键值的高并发读。
OpCache 配置不生效?检查 opcache.validate_timestamps 和重启时机
常见错误是改了 php.ini 但没重启 PHP-FPM 或 Apache,或者生产环境仍开着 opcache.validate_timestamps=1,导致每次请求都校验文件时间戳,完全抵消加速效果。
-
opcache.validate_timestamps=0是生产环境刚需,配合部署流程(如发布后opcache_reset())保证更新可见 -
opcache.memory_consumption至少设为 128,小项目 256 更稳;opcache.max_accelerated_files要覆盖你实际加载的文件数,低于该值会导致旧文件被挤出 - CLI 模式默认不启用 OpCache,需显式加
opcache.enable_cli=1才能加速 Artisan 命令或脚本 - 验证是否生效:调用
opcache_get_status(),看opcache_enabled为 true 且memory_usage.used_memory在增长
Redis 该存什么、不该存什么?别把大数组当哈希塞进去
Redis 不是万能筐。存错结构或数据量失控,反而拖慢响应、挤占内存、触发频繁淘汰。
- 适合:用户会话(
user:123)、排行榜(zset)、带过期的配置项(config:api_timeout)、小而热的关联数据(如post:456:author) - 不适合:原始日志、未压缩的 HTML 片段、超过 10KB 的序列化大对象——这类应走文件缓存或 CDN
- 哈希(
HSET)比字符串(SET)省内存,但字段过多(>1000)时查单个字段反而变慢;不如拆成多个 key - 用
EXPIRE或SETEX显式设 TTL,避免全库扫描清理;对冷数据,考虑LFU淘汰策略(Redis 6+)
Memcached 为什么比 Redis 快一点?关键在 addServer() 和 slab 分配
Memcached 的毫秒级延迟优势,来自无持久化、无复杂数据结构、纯内存 + slab allocator 设计。但它也更“脆”:不支持原子操作、无数据类型、挂了就全丢。
-
$memcached->addServer()后必须确认连接成功,否则get()返回 false 容易被当成缓存未命中去查 DB - Slab class 大小决定你能存多大的 value;默认最大 chunk 是 1MB,但若你存 800KB 的序列化数组,可能因无法复用 slab 导致内存浪费
- 批量读用
getMulti(),别循环get();写入前先delete()再set(),避免旧值残留(Memcached 不自动覆盖过期 key) - 和 Redis 不同,Memcached 不区分连接池;高并发下建议用
libmemcachedC 扩展而非纯 PHP 实现
缓存穿透/击穿/雪崩不是理论问题,cache miss 后立刻上锁或回填空值
真实线上故障往往始于一个高频查询的 get('user:9999999')——ID 根本不存在,却反复穿透到 DB。
- 穿透:对非法/不存在 key,缓存空对象(如
set('user:9999999', null, 60)),并加布隆过滤器前置拦截(PHP 可用redis-bloom扩展) - 击穿:热门 key 过期瞬间大量请求涌向 DB,用互斥锁(
SETNX user:123_lock 1 EX 3)只放行一个回源请求 - 雪崩:大批 key 同一时刻过期,把
TTL加随机偏移(如3600 + rand(0, 300)),别写死整点 - 所有缓存读写都要有 fallback:
get()返回 false 时,不是直接报错,而是触发 load-from-db +set()流程
真正难的不是配好三者,而是厘清哪条数据该走哪一层——比如用户登录态用 Redis(需要原子 TTL 和 session 锁),而模板片段用 Memcached(纯读、量大、可丢),而 PHP 脚本本身连碰都不该碰数据库。漏掉这一层判断,多级缓存就退化成多层麻烦。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











