caching - 超时后未删除 APC 用户缓存条目

标签 caching apc

我运行 APC 主要是为了缓存对象和查询数据作为用户缓存条目,它设置的每个项目都有一个特定的时间,与缓存中所需的时间量相关,有些项目是 48 小时,但更多是 2- 5 分钟。

据我了解,当达到超时并且当前时间超过创建时间时,该项目应该自动从用户缓存条目中删除吗?

虽然这似乎并没有发生,但这些项目反而留在了内存中?我想也许垃圾收集器会删除这些项目,但它似乎并没有完成,即使它现在每小时运行一次。

我唯一能想到的另一件事是默认的 apc.user_ttl = 0 会覆盖各个超时值并将它们设置为即使在各个超时后也永远不会被删除?

These should have been removed?

最佳答案

一般来说,缓存管理器应该尽可能长时间地保留您的条目,并且可以在必要时删除它们。

存在生存时间 (TTL) 机制以将条目标记为“已过期”,但过期条目不会自动删除,也不应该自动删除,因为 APC 配置了固定内存大小(使用 apc.shm_size 配置item),并且在不需要时删除条目没有任何好处。 APC 文档中有以下内容:

If APC is working, the Cache full count number (on the left) will display the number of times the cache has reached maximum capacity and has had to forcefully clean any entries that haven't been accessed in the last apc.ttl seconds.

我认为这意味着如果缓存从未“达到最大容量”,则根本不会进行垃圾回收,这是正确的做法。

更具体地说,我假设您正在使用 apc_add/apc_store 函数来添加您的条目​​,这与 apc.user_ttl 具有类似的效果,其文档解释如下:

The number of seconds a cache entry is allowed to idle in a slot in case this cache entry slot is needed by another entry

注意“以防万一”的说法。我再次认为这意味着缓存管理器不保证删除您的条目的准确时间,而是尝试保证您的条目在过期之前保持有效。换句话说,缓存管理器将更多精力放在保留条目而不是删除条目上。

关于caching - 超时后未删除 APC 用户缓存条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18709637/

相关文章:

Python - telnet - 自动化APC PDU

php - 无法实例化抽象类...在 appDevDebugProjectContainer.php - Symfony2

apc - 高 APC 碎片重要吗?

caching - Gmail 电子邮件中的图像未显示

mysql - 当我的 Sphinx 搜索服务器预热时发生了什么?

c# - asp.net BLL 类中的各种缓存选项

php - 启用 APC 后页面超时

php - MySQL 参数化查询 - 缓存持续时间

java - Hibernate 如何处理 NativeSQL 调用的缓存?

php - 在 wampserver 上安装 php_apc.dll