我创建了一个论坛,我们正在实现一个 apc 和 memcache 缓存解决方案来节省数据库的一些工作。
我开始使用像“Categories::getAll”这样的键来实现缓存层,如果我有用户特定的数据,我会在键后附加用户 ID 之类的东西,这样你就会得到 ”用户::getFavoriteThreads|1471"
。当用户添加一个新的最喜欢的线程时,我会删除缓存键,它会重新创建条目。
但是,问题来了:
我想在论坛中缓存线程。很简单,“Forum::getThreads|$iForumId”。但是......使用分页,我必须将其分成几个缓存条目,例如
"Forum::getThreads|$iForumId|$iLimit|$iOffset".
没关系,直到有人在论坛中发布新主题。我现在必须删除 "Forum::getThreads|$iForumId"
下的所有键,无论限制和偏移量是多少。
解决这个问题的好方法是什么?我真的不想遍历所有可能的限制和偏移量,直到找到不再匹配的内容。
谢谢。
最佳答案
只是一个更新: 我认为 Josh 关于数据使用的观点非常好。 人们不太可能一直浏览论坛的第 50 页。
基于这个模型,我决定在每个论坛中缓存 90 个最新的线程。在获取函数中,我检查限制和偏移量以查看指定的线程切片是否在缓存中。如果它在缓存限制内,我使用 array_slice() 检索正确的部分并将其返回。
这样,我可以为每个论坛使用一个缓存键,而且清除/更新缓存只需很少的努力:-)
我还想指出,在其他更多资源密集型查询中,我使用了 flungabunga 的模型,存储键之间的关系。不幸的是,Stack Overflow 不允许我接受两个答案。
谢谢!
关于php - 缓存分页结果,清除更新 - 如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/109480/