缓存数据与写入内存表

时间:2009-10-09 15:12:47

标签: php session caching hash performance

使用这三种方法之一实现快速散列/会话存储的最佳方法是什么?

方式1: 在MySQL中创建一个内存表,用于在创建条目时存储哈希值和时间戳。 MySQL事件会自动删除超过20分钟的所有条目。这应该非常快,因为所有数据都存储在内存中,但连接到数据库服务器的开销可能会破坏这种好处。

方式2: 我创建一个以散列作为文件名的空文件,并创建一个自动删除超过20分钟的所有文件的cronjob。由于HDD上的所有读取操作,这可能会变慢。

方式3: 由于这将与PHP相关,我们使用Zend Framework,我可以使用Zend_Cache并以20分钟的生存时间存储哈希。

我不想为此使用Memcached或APC,因为我觉得这只是一些小哈希的巨大开销。

您是否有类似情况的经验?我很感激您的经验和解决方案。

4 个答案:

答案 0 :(得分:1)

如果性能是一个问题,我会默默地使用memcached。所有大型互联网站点都依赖于memcached来缓存服务器密集型任务,甚至是会话存储和锁定机制。

如果你问我,Memcached就是你的选择

答案 1 :(得分:0)

不要重新发明轮子 - 使用内存缓存。要么,要么衡量你的MySQL性能与Memcache。请记住,无论如何,db访问通常始终是高性能环境中的瓶颈。

答案 2 :(得分:0)

您是否考虑使用所有这些方法来扩展问题?你谈了几个哈希?你谈到多少兆字节的数据?

  1. 如果可以,请将其保存在计算机的内存中(您的变体3)
  2. 把它放在磁盘上,但是如果你可以把它保存在内存中(你的变种2,如果你使用基于文件的会话,你可以像有人指出的那样使用$ session)。
  3. 使用数据库
  4. 你有很多数据吗?使用memcached。

答案 3 :(得分:0)

正如其他人所说,使用memcached。如果PHP支持数据库连接池,例如Java,我会推荐MySQL,但PHP就是这样,memcached是唯一真正的答案。