OGeek|极客世界-中国程序员成长平台

标题: php - session VS 文件 VS Memcache 用于 PHP 中的缓存? [打印本页]

作者: 菜鸟教程小白    时间: 2022-8-14 07:38
标题: php - session VS 文件 VS Memcache 用于 PHP 中的缓存?

我有一个社交网络

  • 用户表大约有 60,000 行
  • 好友表100万左右
    行(用于确定谁是您的
    friend )

  • 我想做一个 friend 提要,墙,不管你喜欢叫它什么,它会显示用户状态帖子(推特类型帖子),它会显示一些不同的项目,但一开始它只是 friend 状态和也许博客文章。

    基本上,您只会看到使用好友列表中的用户 ID 发布的内容。

    我一直在努力想出最好的方法,但还没有走多远,但这是我的最新想法。

    目前要构建此提要,我必须
  • 获取好友 ID 列表
    大 friend table
  • 从好友处获取流数据
    来自上述结果的 ID
  • JOIN 用户表以获取
    发布者图片 URL 和用户名
  • 然后JOIN评论表得到
    张贴在提要项目上的评论

  • 这是构建该提要的一项重大任务

    到目前为止,我有 3 个想法,这是您可以提供帮助的地方。

    内存缓存选项:
  • 使用 memcache 并缓存一个用户
    friend 列表作为一个数组,当用户
    登录网站,也当用户
    批准一个新的好友请求
    要添加到列表中的 friend ,它
    会重建那里的缓存。
  • 除了只是让 friend 到那里,我还可以保存 friend 的图片 URL 和用户名,这将通过在构建 friend 提要时消除此查询来再次加快速度。

  • 文件缓存选项:
  • 执行与 memcache 选项相同的操作
    确实但将此数据保存为数组
    到缓存文件而不是内存,
    然后将此缓存文件包含到
    这一页。
  • 我不确定哪个是最好的
    我理解的表现方法
    memcache 将所有内容存储在内存中
    所以有20,000的 friend
    可以使用很多的 friend
    内存和文件缓存只会
    当用户把它放在内存中
    如果我是对的,需要它。另外如果我
    做了文件方法,当用户
    退出网站,我会删除
    有缓存文件所以缓存文件夹
    文件永远不会太大

  • session 缓存选项:
  • 与上面的文件缓存相同,我刚刚意识到 session 数据被保存到一个文件中,所以它不能成为缓存吗?

  • 请给我您的意见或任何建议或信息,因为我对缓存没有太多了解,我已经阅读了很多,但有时其他人的想法很有帮助



    Best Answer-推荐答案


    Memcache 是您最好的选择,原因有很多:

  • 它真的很快 - 一切都在内存中,并且针对像您这样的情况进行了高度优化(以及一般的缓存
  • 它是分布式的 - 这意味着如果您有多个 Web/应用服务器在运行,它们都可以访问相同的缓存
  • 您可以将多台服务器用于内存缓存 - 如果您有几台相对未充分利用的服务器(或几台专用缓存服务器),您可以将它们全部集中到一个大缓存中
  • 它是 super 可扩展的(出于前面提到的原因)
  • 它有很好的 PHP 支持 - 用于 memcache 的 PECL 包最近更新了很多新的优点
  • 您甚至可以将您的用户 session 存储在 memcache 中——只需在您的 php.ini 文件中进行设置。这比将 session 存储在数据库中要快得多,并且允许您的 session 在多个 Web 主机上持续存在(如果您处于负载平衡的情况下)...这也将为您的站点提供一些性能提升,因为没有必要在每个请求上访问文件系统/数据库以获取 session 信息。

  • ... 还有很多 ;)

    至于您对单个缓存项的内存占用量的一些担忧,您有几个选择。我最初的想法是试一试,看看这些缓存项到底有多大(你可以找到几个开源的东西来监控实际的缓存使用情况,比如 cacti)。我认为它们会比你想象的要小。

    如果不是,我建议重新考虑您的缓存策略,就您实际缓存的内容、缓存时间等而言。也许您可以从缓存中已有的几项内容构建提要(即缓存个人用户数据,然后从缓存中的所有这些单个项目为一个人构建提要)。在这方面有很多好文章,只需搜索它们

    关于php - session VS 文件 VS Memcache 用于 PHP 中的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1197859/






    欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4