PHP:tmpfs vs memcached

时间:2010-03-06 19:15:54

标签: php memcached

我想在RAM中存储信息(会话和很多字符串),我不知道是否应该使用tmpfs或memcached服务器。有人做了一些基准测试,知道哪一个更快?一些ajax脚本需要每个登录的用户每1-5秒请求一次信息,比如PHP中的网络聊天。所以PHP必须经常连接到memcache。

使用tmpfs的优点是我可以创建大量文件并具有结构(dirs),而我在memcached中只有一个键值系统,但我可以使用数组或对象来存储信息。 如果存在任何差异,CPU负载也会很有趣。

感谢。

5 个答案:

答案 0 :(得分:4)

只需几点

  1. tmpfs或ramdisk比memcached更成熟(周期更长但两者都很稳定
  2. tmpfs是可扩展的(您可以根据需要调整大小或增加而不会丢失tmpfs的内容
  3. 如果您需要在另一台计算机上使用内存,或者您需要在计算机之间共享该信息,那么
  4. 会很精彩。
  5. 本地文件/套接字/管道性能总是比网络套接字快,并且访问tmpfs中的文件与任何其他文件相同,因此它不需要任何第三方库。
  6. 如果您不希望数据增加,请使用tmpfs来增加服务器上的内存。

    如果您必须在服务器之间共享数据,或者想要存储更多适合本地服务器RAM的数据,请使用memcahed。

答案 1 :(得分:2)

我真的不知道速度,但这里有几件关于memcached的事情要考虑:

  • memcached基于集群类型架构:您可以根据需要添加任意数量的物理服务器,在其上安装memcached守护程序,并在集群中拥有更多内存
    • 这意味着使用memcached对您可以缓存的数据量几乎没有限制:如果您需要更多内存,只需添加几个服务器
    • 另一方面,使用tmpfs,您受到每台服务器上可用RAM数量的限制
  • memcached是一种缓存机制;它不是用来存储数据的;意思是 :
    • 当剩余的内存不足以存储新项目时,旧项目将从缓存中删除
    • 每个项目都有一生;当它过期时,该项目将从缓存中删除
  • 共享memcached:您可以让多个PHP服务器访问单个memcached群集
  • 有许多基于memcached的现有库,或者为了访问memcached而创建的库
    • 包括PHP的一些会话机制
    • 和几个缓存库
  • memcached和tmpfs都不是为了持久化 - 如果你需要你的数据持久(即使在重启后仍然可用),你需要使用类似数据库的东西。


最后,不确定tmpfs,但我可能会使用memcached,至少在谈到:

  • 会话
  • 缓存

为什么?因为它是:

  • 成熟 - 使用了很多,有很多图书馆,......
  • 且可扩展

答案 2 :(得分:0)

ramdisk和memcached都非常快。

如果您在问题上使用MySQL,我认为速度没有任何重要性。

我个人更喜欢Redis而不是memcached。

以下是优点/缺点:

    如果没有ram,
  1. memcached可能会删除密钥。 Redis和文件永远不会这样做。

  2. 如果会话不在文件中(例如memcached / redis),某些软件如Joomla无法安装

  3. memcache和redis都能够为多个php服务器提供服务,因此您将无法在群集中使用棒状会话。

  4. memcached更快,然后是redis,然后是ramdisk,然后是memcachedb,然后是mysql,然后是文件系统会话。

  5. ramdisk模仿正常的php会话行为,不需要安装任何东西。

  6. 如果ramdisk无法挂载,php将回退到文件系统并仍然有效(假设服务器启动)

  7. 如果memcached或redis停止工作,php会发出令人讨厌的错误,而不会启动。

  8. 希望这有帮助。

答案 3 :(得分:0)

对会话数据的写访问权必须是原子的或受每会话锁保护,否则会被破坏。对于基于文件的会话,它通过锁定文件来解决,不知道memcached如何处理它。 使用单独的ext4分区并不像你想的那么糟糕--VFS将缓存你的文件I / O在 RAM 中,所以你可能不需要任何不同的东西。 您可以微调ext4(在一个分区上)来缓存您的写入,因此您可以获得类似RAM的性能和持久性,适用于大于RAM的大小。 例如,你得到写回缓存和60秒窗口(延迟提交):

mount /dev/sda4 -t ext4 -o rw,data=writeback,nobh,commit=60  

它可以快速运行并且不会耗尽RAM,它将使用所有可用的 RAM,因为文件系统缓存是动态的。 尝试用第二个文件多次说4MB文件(覆盖它),你会得到非常快的写入。

答案 4 :(得分:-1)

实际上,您可以使用memcacheDB来满足您的需求。