我运行APC主要是作为用户缓存条目来缓存对象和查询数据,它设置的每个条目都有特定的时间,与缓存中所需的时间有关,有些项是48小时,但更多的是2-5分钟。
我的理解是,当到达超时且当前时间超过created at时间时,项目应自动从user cache entries中删除
但是,这似乎并没有发生,而是将这些项目留在内存中?我认为垃圾收集器可能会删除这些项目,但它似乎还没有完成,即使它目前每小时运行一次。
我唯一能想到的另一件事是,默认的apc.user_ttl = 0覆盖单个超时值,并将它们设置为即使在单独超时之后也不会被删除?

发布于 2013-09-15 06:47:59
一般来说,缓存管理器应该尽可能长时间保存条目,并且在必要时可以删除它们。
Time (TTL)机制可以将条目标记为“过期”,但过期条目不会自动删除,也不应该删除,因为APC配置有固定的内存大小(使用apc.shm_size配置项),而且在不必删除条目时也没有好处。以下是装甲运兵车文件中的一个简介:
如果APC工作正常,缓存完整计数号(左侧)将显示缓存达到最大容量的次数,并必须强制清除在最后apc.ttl秒内未被访问的所有条目。
我认为这意味着,如果缓存从未“达到最大容量”,则根本不会发生垃圾收集,这是正确的做法。
更具体地说,我假设您使用apc_ add /apc_store函数来添加您的条目,这与apc.user_ttl具有类似的效果,文档对其解释如下:
如果另一项需要此高速缓存入口槽,则允许缓存项在一个时隙中空闲的秒数。
注意"in case“语句。同样,我认为这意味着缓存管理器并不保证删除条目的确切时间,而是试图保证条目在过期之前仍然有效。换句话说,缓存管理器将更多精力放在保留条目上,而不是删除它们。
发布于 2013-09-16 00:19:53
除非没有足够的分配内存来存储新的变量,否则apc.ttl不会做任何事情,如果有足够的内存,缓存就永远不会过期!因此,您必须为每个变量u存储指定ttl,使用apc_store()或apc_add()来强制apc在指定的ttl传递给函数后重新生成它。如果您使用操作码缓存,它也将永远不会过期,除非页面被修改(当stat=1)或没有内存。因此,apc.user_ttl或apc.ttl实际上没有什么可做的。
https://stackoverflow.com/questions/18709637
复制相似问题