我很难找到APC清除其旧条目的方式的任何逻辑。 特别是对于用户条目,我注意到碎片很快就会增加到意想不到的水平。
虽然apc.ttl和apc.user_ttl设置为3600,但我注意到APC缓存中有很多旧条目没有被清除。我已经多次增加了APC的内存大小,但它只能在达到100%碎片之前持续一段时间。
那么,为什么会这样呢?实际上我会认为这是APC中的一个错误,这只是不正常的行为。我希望有些APC流程可以不时清除旧条目。
另外,它是否可以得出这样的结论:为PHP使用另一个缓存系统会更好,并且只使用APC作为操作码缓存(缺少清理不是问题)?
答案 0 :(得分:1)
如果要确保删除旧值。您需要明确删除它。
我在我的应用程序中使用了APC和memcached的组合。 APC提供操作码缓存以及缓存可能保持不变的本地数据(如配置文件)。使用某种读取逻辑将所有其他对象缓存在memcached中。 (如果数据已更改,则清除)
当我做一个新版本时,我重新启动APC(通过apache或php,如果它是一个单独的进程)。这将清除APC缓存,之后不久将重新加载配置文件。如果对象发生了很大的变化,如果它加载了旧的缓存数据,我将重新启动memcached。