什么更快?File_exist还是MySQL查询?

Mar*_*tin 5 php mysql memcached innodb

我的网页游戏中的用户正在PHP的$ _SESSION中缓存某些播放器信息.每次加载游戏时,它都会检查会话是否存在,如果没有,他们会从MySQL数据库中获取玩家信息,然后将其存储在$ _SESSION中.

现在我的问题是,如果玩家信息被另一个进程或玩家更新怎么办?他们无法更新其他玩家的$ _SESSION缓存.

我知道memcached很可能是解决这个问题的方法,但我不确定我是否应该花时间做这样的事情.$ _SESSION缓存对我来说很好,除此之外.

  • 我正在考虑为它创建一个MySQL表,它可以在每个请求中读取,如果有一个记录,那么它会重新创建缓存.
  • 另一个解决方案是在目录中创建一个文件,该文件名为播放器的id.PHP将检查的每个请求file_exist是否应该清除缓存.

你们会做什么?它会在每个请求中执行,因此优化这一点非常重要.

Ray*_*Ray 3

仅从设计的角度来看,我会避免使用 file_exists 和目录方法。当然“file_exists”很快,但它无法很好地扩展......如果用户更改名称会发生​​什么?

如果您正在使用 APC(您应该),您可以使用 APC 的用户内存缓存。只要您在一台服务器上,它就应该为您提供与 memcached 类似的性能优势,而无需单独的内存缓存服务器进程。如果用户条目频繁更改,您可能会遇到 APC 碎片问题。在这种情况下,是时候硬着头皮使用 memcached 了——您甚至可以将会话数据存储在 memcached 中以提高性能。

此外,APC 或您的 file_exists 解决方案都无法扩展到多个负载平衡服务器 - 您需要一个 DB 解决方案或 memcached。