当前位置:  开发笔记 > 编程语言 > 正文

缓存分页结果,清除更新 - 如何解决?

如何解决《缓存分页结果,清除更新-如何解决?》经验,为你挑选了3个好方法。

我创建了一个论坛,我们正在实现一个apc和memcache缓存解决方案来保存数据库的一些工作.

我开始使用像"Categories :: getAll"这样的键来实现缓存层,如果我有特定于用户的数据,我会用像用户ID之类的东西来附加密钥,这样你就可以得到"User::getFavoriteThreads|1471".当用户添加新的收藏夹线程时,我将删除缓存键,它将重新创建该条目.

然而,问题出现了:

我想在论坛中缓存线程.很简单,"论坛:: getThreads | $ iForumId".但是......通过分页,我必须将其分成几个缓存条目,例如

"Forum::getThreads|$iForumId|$iLimit|$iOffset".

哪个好,直到有人在论坛中发布新帖子.我现在必须删除所有键"Forum::getThreads|$iForumId",无论限制和偏移是什么.

什么是解决这个问题的好方法?我真的宁愿不循环遍历每个可能的限制和偏移,直到找到不再匹配的东西.

谢谢.



1> Rexxars..:

只是一个更新:我认为Josh对数据使用的看法非常好.人们不太可能继续查看论坛的第50页.

基于这个模型,我决定在每个论坛中缓存90个最新的线程.在提取函数中,我检查limit和offset以查看指定的线程片段是否在缓存中.如果它在缓存限制内,我使用array_slice()来检索正确的部分并返回它.

这样,我可以在每个论坛使用一个缓存密钥,清除/更新缓存只需要很少的工作量:-)

我还想指出,在其他更加资源丰富的查询中,我使用了flungabunga的模型,存储了密钥之间的关系.不幸的是,Stack Overflow不会让我接受两个答案.

谢谢!



2> flungabunga..:

我设法通过memcache使用自定义类(比如ExtendedMemcache)扩展类来解决这个问题,该类具有受保护的属性,该属性将包含组到键值的哈希表.

ExtendedMemcache->set方法接受3个ARGS( ,$strGroup,$strKey)$strValue当你调用设置,它将存储之间的关系$strGroup,并且$strKey,在被保护的属性,然后继续存放$strKey$strValue中关系memcache.

然后,您可以向ExtendedMemcache名为"deleteGroup" 的类添加一个新方法,当传递一个字符串时,将找到与该组关联的键,并依次清除每个键.

它将是这样的:http: //pastebin.com/f566e913b 我希望所有这些都有意义,并为你工作.

PS.我想如果你想使用静态调用,那么protected属性可以memcache在它自己的密钥下保存.只是一个想法.



3> 小智..:

您可能还想查看存储缓存数据的成本,包括您的工作量和CPU成本,以及缓存将如何为您购买的成本.

如果您发现80%的论坛视图正在查看线程的第一页,那么您可以决定仅缓存该页面.这意味着缓存读取和写入都更容易实现.

与用户最喜欢的线程列表相同.如果这是每个人很少访问的内容,那么缓存可能无法提高性能.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有