ThinkPHP项目上线前应据场景选缓存驱动:单机后台用file即可;分布式需选Redis(支持原子操作、复杂结构)或Memcached(仅纯KV,须开二进制协议);配置Redis须启用phpredis扩展、安装think-redis包、.env设CACHE_DRIVER=redis、config/cache.php中default和stores.redis.type均为小写'redis',且host/port/password/select等参数显式完整填写。

ThinkPHP项目上线前必须决定用Memcached还是Redis作为缓存驱动,选错会导致高并发下响应延迟飙升、键值读写失败或原子操作无法实现。
先看场景再定驱动
如果项目是单机部署、后台管理类系统、配置项缓存为主,且不依赖计数器、队列、哈希结构等高级功能,【file驱动已足够】,根本不用上Memcached或Redis。
若需分布式部署或多实例共享缓存,必须二选一:Redis适合需要incr/decr、hGetAll、zSet排序、发布订阅的业务;Memcached仅适合纯key-value批量读写,且必须开启二进制协议才能发挥性能。
Redis驱动配置要点
第一步:确认PHP已启用redis扩展,运行php -m | grep redis输出必须含redis;Windows用户检查phpinfo()中redis模块是否加载成功。
立即学习“PHP免费学习笔记(深入)”;
第二步:执行composer require topthink/think-redis,该包是TP6+ Redis驱动的硬性依赖,缺它就会报Driver [redis] not supported。
第三步:在.env中写入CACHE_DRIVER=redis,同时确保config/cache.php中default为'redis',且stores.redis.type='redis'(全小写,大小写错误直接失效)。
第四步:连接参数必须显式声明——host不能只写127.0.0.1(Docker环境要换host.docker.internal),password即使为空也得写'password' => '',select必须是整数0而非字符串"0",否则连接静默失败。
Memcached驱动避坑指南
方法一:确认扩展正确性。运行php -r "new Memcached();"不报错才算装对;常见错误是装了memcache(类名Memcache)而非memcached(类名Memcached),后者才是ThinkPHP要求的。
方法二:强制启用二进制协议。在config/cache.php的memcached配置块中加入'options' => [\Memcached::OPT_BINARY_PROTOCOL => true],否则文本协议开销大,实测响应时间翻倍。
方法三:键名有效期慎设为0。Memcached不支持TTL=0,设了会自动转成30天;如需长期缓存,明确填2592000(30天秒数)。
【别用memcached.hosts数组配多个节点】——ThinkPHP不支持自动分片,只会轮询连接,实际只用第一个地址。
验证是否真正生效
清空runtime/cache/目录,然后执行以下命令行测试:
Cache::store('redis')->set('test_key', 'ok', 10) → Cache::store('redis')->get('test_key')应返回'ok';
Cache::store('memcached')->set('test_key', 'ok', 10) → Cache::store('memcached')->get('test_key')应返回'ok'。
若任一失败,立即检查.env与config/cache.php中对应store的拼写一致性,【default值与stores子键名必须完全一致】,多一个空格或大小写差异都会fallback到file驱动且无提示。



















