【问题标题】:Best solution for a php cache that is updated multiple times per second每秒更新多次的 php 缓存的最佳解决方案
【发布时间】:2019-06-13 14:47:15
【问题描述】:

我正在用 PHP 创建一个论坛应用程序。当用户进入论坛的第一页时,他会得到最近一次更新的 25 个主题。

我想缓存这 25 个主题,以便永远不会调用数据库来获取第一页,这基本上是它的工作原理:

  • 每次用户在主题上发帖/创建主题时都会更新缓存
  • 此主题已添加到缓存中
  • 从缓存中删除最旧的更新主题

这样,缓存总是包含最近 25 个更新的主题,并且服务器永远不会向数据库发出请求以获取论坛的第一页。

我已经在网上搜索过解决方法:

  • APCu
  • Redis
  • 内存缓存

如果我论坛的第一页每秒收到 100 个获取请求和 10 个新帖子,则缓存将每秒更新 10 次,同时每秒被请求 100 次。

哪种解决方案最适合这种经常更新的缓存?

【问题讨论】:

  • 问题是为什么要避免 DB 调用。您将不得不去服务器,这应该是更新所花费的大部分时间。就设计的简单性而言,您应该只使用服务器。但是,如果它是我的网站,我可能会在每个主题更新时使用 Web 套接字进行更新。这样做的问题是屏幕会跳来跳去。然后,我建议您仅每隔几秒、每 30 秒等更新一次。我怀疑是否需要实时更新。

标签: php caching


【解决方案1】:

每次用户在主题上发帖/创建主题时都会更新缓存

我会停止这样做。

相反,为您在主页上显示的列表设置一个过期缓存(具有适合您需要的时间范围;每秒?每 10 秒?每分钟?每 5 秒?)。如果有人没有看到 500 毫秒前的新帖子,这可能是正常的。

当缓存过期时,它会使用新列表重新生成。

或者,您可以使用 Redis 的 list functionality via LPUSH 将新帖子推送到列表中,并使用 LTRIM 删除旧帖子。您的缓存调用将访问该列表;列表本身永远不会清除,只是添加到。

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2021-01-06
    • 2012-06-25
    • 2017-03-13
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多