php - 什么更快? File_exist 或 MySQL 查询?

标签 php mysql memcached innodb

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

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

我知道 memcached 很可能是这个的解决方案,但我不确定我是否应该花时间做这样的事情。 $_SESSION 缓存对我来说很好,除了这个。

  • 我正在考虑为其创建一个 MySQL 表,该表在每次请求时都会被读取,如果有播放器的记录,它会重新创建缓存。
  • 另一种解决方案是在目录中创建一个文件,文件名中包含播放器的 ID。每个请求 PHP 都会检查 file_exist 是否应该清除缓存。

你们会怎么做?它会在每个请求中执行,因此对其进行优化非常重要。

最佳答案

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

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

此外,APC 或您的 file_exists 解决方案都不会扩展到多个负载平衡服务器——为此您需要一个数据库解决方案或 memcached。

关于php - 什么更快? File_exist 或 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14142721/

相关文章:

python - 如何测量 Django 缓存性能?

php - Memcache 结果和 while 循环

php - apache/php 创建文件,但同一页面不允许编辑文件

php - 提交按钮呈现在表数据下。我只想要一个表单提交按钮

MySQL 错误 1045 (28000) : Access denied for user 'bill' @'localhost' (using password: YES)

php - Carbon.php 行 425 : Trailing data with SQL database 中的 Laravel InvalidArgumentException

mysql - 是否可以找到最近n天内哪些表有新数据?

ruby-on-rails - Rails 和缓存,memcache 和redis 切换容易吗?

PHP - 如何使页面仅在本地网络中可见

c# - 使用离线 mySQL 数据库在 Unity for android 中制作游戏