在 Ubuntu + ThinkPHP 环境下,缓存“不生效”通常不是代码写错,而是环境/权限/配置问题。下面按最常见原因逐一排查(以 ThinkPHP 5 / 6 为主,思路通用)。
| 现象 | 可能原因 |
|---|---|
| 缓存文件没生成 | 目录没有写权限 |
| 每次都重新查数据库 | 缓存没写成功 |
| 改了代码缓存还在 | 其实是 OPcache / 路由缓存 |
| Redis 不生效 | Redis 没启动 / 配置错 |
| 本地好用,服务器不行 | Ubuntu 权限或 SELinux |
ThinkPHP 默认缓存目录:
runtime/cache
runtime/temp
检查权限:
ls -l runtime
修复权限(Ubuntu):
sudo chown -R www-data:www-data runtime
sudo chmod -R 755 runtime
如果你是 php-fpm:
ps aux | grep php-fpm
确认用户是 www-data
测试是否可写:
var_dump(is_writable(runtime_path() . 'cache'));
返回 false → 权限问题
Cache::set('name', 'value', 3600);
$val = Cache::get('name');
cache('name', 'value', 3600);
Cache::set('name', 'value'); // 没设置时间,可能立即失效
redis-cli ping
返回 PONG 才正常
启动:
sudo systemctl start redis
sudo systemctl enable redis
config/cache.php
'default' => 'redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
'timeout' => 0,
],
测试:
Cache::set('test', 123);
dump(Cache::get('test'));
php -i | grep opcache
解决:
sudo systemctl restart php8.1-fpm
或在 php.ini:
opcache.enable=0
php think route:clear
php think config:clear
# 1. 清缓存
php think cache:clear
php think route:clear
php think config:clear
# 2. 看权限
ls -l runtime
# 3. 看 Redis
redis-cli ping
# 4. 写测试
Cache::set('ubuntu_test', time(), 60);
dump(Cache::get('ubuntu_test'));
请告诉我:
我可以直接给你可复制的命令和配置。