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

Dan*_*Dan 2 caching apc

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

我的理解是,当达到超时并且当前时间超过created at时间时,该项目应该自动从user cache entries

这似乎没有发生,而物品却留在记忆中?我想也许垃圾收集器会删除这些物品,但它似乎没有完成,即使它现在每小时运行一次.

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

应该删除这些?

小智 7

通常,缓存管理器应该尽可能长时间地保留您的条目,并且可以在必要时删除它们.

生存时间(TTL)机制用于将条目标记为"已过期",但过期的条目不会自动删除,也不应该被删除,因为APC配置了固定的内存大小(使用apc.shm_size配置项)和删除条目没有任何优势,如果你不需要.APC文档中有以下内容:

如果APC正在工作,则缓存完整计数(左侧)将显示缓存已达到最大容量的次数,并且必须强制清除在最后一次apc.ttl秒内未访问的任何条目.

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

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

在另一个条目需要此高速缓存条目槽的情况下,允许高速缓存条目在时隙中空闲的秒数

请注意"in case"语句.我再次认为缓存管理器不保证删除条目的准确时间,而是尝试保证您的条目在过期之前保持有效.换句话说,缓存管理器会更加努力地保留条目而不是删除条目.