如何清除APC缓存条目?

172

当我部署网站的新版本时,我需要清除所有APC缓存条目。 APC.php 有一个按钮可以清除所有opcode缓存,但我没有看到清除所有用户条目、所有系统条目或所有目录条目的按钮。

是否可以通过命令行或其他方式清除所有缓存条目?


1
我对如何清除过期条目很感兴趣!您可以指定一个TTL,但是php.net文档说当它过期时,它会在下一次请求时被清除... - The Surrican
19个回答

3

如果您在Ubuntu下运行fpm,需要运行下面的代码(已在12和14上检查)

service php5-fpm reload

1
新的APC管理界面有添加/清除用户缓存和操作码缓存的选项,其中一个有趣的功能是可以添加/刷新/删除目录到操作码缓存中。

APC管理文档

enter image description here


1

APC的稳定版具有在其界面中清除缓存的选项。要清除这些条目,您必须登录到APC界面。

APC具有在apc.php文件中设置用户名和密码的选项。

enter image description here


你从哪里获取这个页面? - Pacerier
如果您的系统安装了 php-apc 包,您将获得此界面。 - Stranger

1

apc.ini

apc.stat = "1"会强制APC在每个请求中对脚本进行状态(检查),以确定它是否已被修改。如果已经被修改,它将重新编译并缓存新版本。

如果关闭此设置,则APC不会检查,这通常意味着要强制APC重新检查文件,必须重新启动Web服务器或手动清除缓存。请注意,FastCGI Web服务器配置可能不会在重新启动时清除缓存。在脚本文件很少更改的生产服务器上,通过禁用统计信息可以实现显着的性能提升。


0

我在Symfony构建中遇到了很多实例在同一台服务器上的问题,我的解决方法如下:

步骤1。 创建触发器或其他东西来设置文件标志(例如Symfony命令),然后创建标记文件..

file_put_contents('clearAPCU','yes sir i can buggy')

步骤2。 在索引文件的开头添加清除代码并删除标记文件

if(file_exists('clearAPCU')){
    apcu_clear_cache();
    unlink('clearAPCU');
}

第二步。 运行应用程序。


0
创建 APC.php 文件。
foreach(array('user','opcode','') as $v ){
    apc_clear_cache($v);
}

在浏览器中运行它。


2
据我所了解,CLI实例不会共享相同的APC缓存内存段,因此这将什么也做不了,只是清除一个空的、隔离的APC缓存段。 - A.B. Carroll
根据发行版和配置,APC缓存可能具有单独的内存段,我已经更新了更通用的解决方案。 - anshuman

0

TL;DR:删除位于/storage/framework/cache/data/的缓存文件。

我启用了APC,但它没有安装(也无法安装),所以会抛出Call to undefined function Illuminate\Cache\apc_store()

"好吧,我只需要禁用它就可以了,然后它应该可以工作了"。

那么,不,我卡在了Call to undefined function Illuminate\Cache\apc_delete()


0

对我来说,一个好的解决方案是在部署后不再使用过时的用户缓存。

如果您为每个键添加前缀,则可以在更改缓存条目的数据结构时更改前缀。这将帮助您在部署时获得以下行为:

  1. 仅在更新的结构部署后不使用过时的缓存条目
  2. 不要清除整个缓存以避免减慢页面速度
  3. 在还原部署后,某些旧的缓存条目可以被重用(如果条目尚未自动删除)
  4. APC将在过期缺少缓存空间时删除旧的缓存条目

这仅适用于用户缓存。


-1
我们在使用APC和符号链接到文件的符号链接时遇到了问题-它似乎忽略了文件本身的更改。以某种方式在文件本身上执行touch有所帮助。我无法告诉修改文件和touch之间的区别,但某种程度上这是必要的...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接