我正在运行APC主要是为了缓存对象和查询数据作为用户缓存条目,它设置的每个项目的特定时间与缓存中所需的时间量相关,有些项目是48小时但更多是2- 5分钟。
我的理解是,当达到超时且当前时间超过created at
时间时,该项目应自动从user cache entries
移除?
这似乎并没有发生,而且这些项目仍然留在记忆中?我想也许垃圾收集器会删除这些物品,但它似乎没有完成,即使它现在每小时运行一次。
我能想到的另一件事是,默认apc.user_ttl = 0
会覆盖各个超时值,并将它们设置为即使在单独超时后也不会被删除?
答案 0 :(得分:7)
通常,缓存管理器应该尽可能长时间地保留您的条目,并且可以在必要时删除它们。
生存时间(TTL)机制用于将条目标记为“已过期”,但过期的条目不会自动删除,也不应该被删除,因为APC配置了固定的内存大小(使用apc.shm_size配置)项目)并且没有必要删除条目没有优势。 APC文档中有以下内容:
如果APC正在工作,则缓存完整计数(左侧)将显示 显示缓存达到最大容量的次数 必须强制清除任何未访问的条目 最后一次apc.ttl秒。
我认为如果缓存从未“达到最大容量”,则根本不会进行垃圾收集,这是正确的做法。
更具体地说,我假设您使用apc_add / apc_store函数添加条目,这与apc.user_ttl类似,文档解释为:
允许缓存条目在插槽中空闲的秒数 如果另一个条目需要此缓存条目插槽
请注意“in case”声明。我再次认为缓存管理器不保证删除条目的准确时间,而是尝试保证您的条目在过期之前保持有效。换句话说,缓存管理器会更加努力地保留条目而不是删除条目。
答案 1 :(得分:1)