温馨提示×

ubuntu thinkphp缓存为啥不生效

小樊
33
2026-10-22 02:45:38
栏目: 编程语言

在 Ubuntu + ThinkPHP 环境下,缓存“不生效”通常不是代码写错,而是环境/权限/配置问题。下面按最常见原因逐一排查(以 ThinkPHP 5 / 6 为主,思路通用)。


一、最常见原因速查表

现象 可能原因
缓存文件没生成 目录没有写权限
每次都重新查数据库 缓存没写成功
改了代码缓存还在 其实是 OPcache / 路由缓存
Redis 不生效 Redis 没启动 / 配置错
本地好用,服务器不行 Ubuntu 权限或 SELinux

二、文件缓存不生效(最常见)

1️⃣ 缓存目录没权限(90% 原因)

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


2️⃣ 缓存路径不可写

测试是否可写:

var_dump(is_writable(runtime_path() . 'cache'));

返回 false → 权限问题


三、缓存代码写错(语法问题)

✅ 正确写法(TP6)

Cache::set('name', 'value', 3600);
$val = Cache::get('name');

✅ TP5

cache('name', 'value', 3600);

❌ 常见错误

Cache::set('name', 'value'); // 没设置时间,可能立即失效

四、Redis 缓存不生效(Ubuntu 特有问题)

1️⃣ Redis 没启动

redis-cli ping

返回 PONG 才正常

启动:

sudo systemctl start redis
sudo systemctl enable redis

2️⃣ 配置错误

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'));

五、Ubuntu 特有的“假缓存不生效”

1️⃣ OPcache 导致“代码没更新”

php -i | grep opcache

解决:

sudo systemctl restart php8.1-fpm

或在 php.ini:

opcache.enable=0

2️⃣ 路由缓存

php think route:clear

3️⃣ 配置缓存

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'));

七、如果你愿意,我可以精准定位

请告诉我:

  1. ThinkPHP 版本(5.0 / 5.1 / 6.0 / 8.0)
  2. 缓存类型(文件 / Redis / Memcached)
  3. 不生效表现(没生成文件?Redis 没数据?代码不更新?)
  4. Ubuntu 版本 + PHP 版本

我可以直接给你可复制的命令和配置。

0 踩