首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >APC用户缓存项在超时后未被删除

APC用户缓存项在超时后未被删除
EN

Stack Overflow用户
提问于 2013-09-10 01:57:57
回答 2查看 1.4K关注 0票数 2

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

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

但是,这似乎并没有发生,而是将这些项目留在内存中?我认为垃圾收集器可能会删除这些项目,但它似乎还没有完成,即使它目前每小时运行一次。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-15 06:47:59

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

Time (TTL)机制可以将条目标记为“过期”,但过期条目不会自动删除,也不应该删除,因为APC配置有固定的内存大小(使用apc.shm_size配置项),而且在不必删除条目时也没有好处。以下是装甲运兵车文件中的一个简介:

如果APC工作正常,缓存完整计数号(左侧)将显示缓存达到最大容量的次数,并必须强制清除在最后apc.ttl秒内未被访问的所有条目。

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

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

如果另一项需要此高速缓存入口槽,则允许缓存项在一个时隙中空闲的秒数。

注意"in case“语句。同样,我认为这意味着缓存管理器并不保证删除条目的确切时间,而是试图保证条目在过期之前仍然有效。换句话说,缓存管理器将更多精力放在保留条目上,而不是删除它们。

票数 8
EN

Stack Overflow用户

发布于 2013-09-16 00:19:53

除非没有足够的分配内存来存储新的变量,否则apc.ttl不会做任何事情,如果有足够的内存,缓存就永远不会过期!因此,您必须为每个变量u存储指定ttl,使用apc_store()或apc_add()来强制apc在指定的ttl传递给函数后重新生成它。如果您使用操作码缓存,它也将永远不会过期,除非页面被修改(当stat=1)或没有内存。因此,apc.user_ttl或apc.ttl实际上没有什么可做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18709637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档