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

标签 php caching pagination memcached

我创建了一个论坛,我们正在实现一个 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/

相关文章:

Laravel 分页链接不包含其他 GET 参数

php - 奇怪的多字节 preg_replace 问题。它正在将我的数据更改为笑脸!

performance - 用于跟踪过去 X 小时数据的数据结构

php - 全方位支付产品系列

caching - Redis线程和访问问题

google-app-engine - 在 Google App Engine 节点中缓存的最佳方式

google-app-engine - Google Datastore, "IN"查询过滤器和分页

grails - 更改分页部分中显示项目的数量

javascript - 如何使用php和jquery在mysql中提交多个数据

php - 带有内连接的 json 数组