会话VS文件VS Memcache for PHP中的缓存?

时间:2009-07-29 03:01:39

标签: php session caching memcached

我有一个社交网络

  • 用户表约为60,000行

  • 朋友表约为100万 行(用于确定谁是你的 朋友)

我想做一个朋友饲料,墙,无论你喜欢什么叫它,它会显示用户状态贴(推特类型的帖子)之类的东西,它会显示一些不同的项目但是一开始它只会是朋友身份,也许是博客文章。

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

我一直在努力想出最好的方法,并且没有走得太远,但这是我最新的想法。

目前要构建此Feed,我必须

  1. 获取好友ID的列表 大朋友表

  2. 从朋友那里获取流数据 上述结果中的ID

  3. 加入用户表以获取 发布商图片网址和用户名

  4. 然后加入评论表来获取 在Feed项目上发布的评论

  5. 构建该Feed是一项重大任务

    到目前为止我有3个想法,这是你的帮助可以进入的地方。

    Memcache选项:

    1. 使用memcache并缓存用户 friendlist作为数组的用户 登录到站点,也是当用户 批准新朋友请求 朋友被添加到那里列表,它 会在那里重建缓存。
    2. 除了刚到朋友那里,我还可以在那里保存朋友的图片网址和用户名,这样可以在构建朋友Feed时消除此查询,从而再次加快速度。
    3. 文件缓存选项:

      1. 与memcache选项相同 但是将这些数据保存为数组 到缓存文件而不是内存, 然后将此缓存文件包含在内 页面。

      2. 我不确定哪个是最好的 我理解的表现方法 memcache将所有内容存储在内存中 所以有2万人的朋友 可以使用很多的朋友 内存和文件缓存只会 当用户把它放在内存中 如果我是正确的,我需要它。如果我 当用户时,做了文件方法 退出网站,我会删除 有缓存文件所以缓存文件夹 永远不会有太大的文件

      3. 会话缓存选项:

        1. 与上面的文件缓存相同,我只是意识到会话数据被保存到一个文件中,所以不能使它成为缓存吗?
        2. 请将您的意见或任何建议或信息告诉我,因为我对缓存知之甚少,我已经阅读了很多,但有时其他人的想法有很多帮助

4 个答案:

答案 0 :(得分:31)

由于很多原因,Memcache是​​你最好的选择:

  1. 它真的很快 - 一切都在记忆中,并且它非常适合与你一样的情况(以及一般的缓存)。
  2. 它已分发 - 这意味着如果您运行多个Web / app服务器,它们都可以访问相同的缓存
  3. 您可以为memcache汇集多个服务器 - 如果您有一些相对未充分利用的服务器(或几个专用缓存服务器),您可以将它们全部汇集到一个大缓存中
  4. 它具有超级可扩展性(前面提到的原因)
  5. 它得到了很好的PHP支持 - 用于memcache的PECL包最近更新了许多新的优点
  6. 您甚至可以将您的用户会话存储在memcache中 - 只需将其设置在php.ini文件中即可。这比在数据库中存储会话要快得多,并且允许您的会话在多个Web主机上保持不变(如果您处于负载平衡状态)...这也将为您的站点提供一点性能提升,因为不需要在每个请求上点击文件系统/数据库以获取会话信息。
  7. ......还有更多;)

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

    如果他们不是,我建议你重新思考你的缓存策略,直到实际缓存,持续多长时间等等。也许你可以从缓存中的几个东西构建feed(即缓存个体)用户数据,然后从缓存中的所有单个项目构建人员的订阅源。在这方面有很多好的文章,只是搜索它们:)

答案 1 :(得分:1)

Memcache中允许的默认最大对象大小为1MB。

@jsaondavis: “会话数据保存到文件中”。

您的上述陈述是错误的。会话可以配置为存储在数据库中。默认会话hadndler是文件。

答案 2 :(得分:1)

Redis将是一个很好的解决方案:

这是Redis Vs上的一个主题。 Memcached的。 听起来像Redis有512mb的存储而不是1mb的限制... QUITE有点不同:)

Memcached vs. Redis?

答案 3 :(得分:1)

错了! Memcached的大小不固定!它取决于您的计算机内存和您设置的配置。