Optimization 如何用PHP实现服务器端缓存

Optimization 如何用PHP实现服务器端缓存,optimization,php,Optimization,Php,对于基于浏览器的Flex游戏(针对Facebook平台),我使用PHP和MySQL进行服务器端编程和保存数据(使用amfPHP) 因为我对游戏开发和PHP都很陌生,我希望看到我的游戏运行,所以我编写了所有服务器端编码(amfPHP服务),使用非常难看和肮脏的代码,点击数据库获取、更新游戏状态(包括玩家统计和库存) 显然这不是很有效,所以我已经开始寻找PHP中实现缓存的最佳方法。通过缓存,我的意思是我不想一直点击DB来保存玩家的最新游戏状态,而只是在会话结束时保存(当玩家离开应用程序时) 通常,我

对于基于浏览器的Flex游戏(针对Facebook平台),我使用PHP和MySQL进行服务器端编程和保存数据(使用amfPHP)

因为我对游戏开发和PHP都很陌生,我希望看到我的游戏运行,所以我编写了所有服务器端编码(amfPHP服务),使用非常难看和肮脏的代码,点击数据库获取、更新游戏状态(包括玩家统计和库存)

显然这不是很有效,所以我已经开始寻找PHP中实现缓存的最佳方法。通过缓存,我的意思是我不想一直点击DB来保存玩家的最新游戏状态,而只是在会话结束时保存(当玩家离开应用程序时)

通常,我的游戏/应用程序流是这样的

  • 玩家从FB启动应用程序/游戏
  • 认证
  • 加载用户会话(以前保存的游戏状态)。这包括获取用户的统计信息,如有多少能量、硬币、经验等,他的库存、当前活动任务等,以及静态信息,如市场物品、报价、掉落等
  • 当游戏发生变化时更新游戏状态,最常见的情况是当用户点击某个建筑以收集、消耗能量、添加硬币、提供体验或奖励等
现在,几乎没有什么东西是所有玩家都能获得的公共数据,比如“市场项目及其价格和图形资产等”,还有特定于玩家的数据

我脑子里有一些想法,我需要专家的帮助来判断我的想法是好是坏,或者是否有更好的方法

将静态(公共)数据永久保存在缓存中,并有一个管理面板用于清除/更新 身份验证后,检索数据并保存在缓存中(作为JSON对象),会话结束前的所有读/写操作都将执行到缓存中,会话结束后,将缓存数据保存到DB中

这里我想使用APC。你认为它可靠吗

我想,在最坏的情况下,当Web服务器崩溃时,所有缓存数据都会丢失,所以我想在会话中保存它们,但我认为PHP会将它们保存在文件中,这意味着会有很多I/O,这也是不推荐的?还是可以接受


我还在想,在序列化对象中保存游戏状态有多好?

您是否分析了应用程序并将DB识别为瓶颈?看起来你在试图优化那些很可能根本不是问题的东西

从数据库中获取数据非常快。写入数据库可能会慢一点,尤其是在使用事务时。但是DB仍然可以轻松地处理每秒大量的写/更新调用


看起来您正在进行一些过早的优化,这将降低整个游戏的安全性和稳定性。。这根本不值得,除非您真的将写入DB视为性能瓶颈。然后,你真的不想失去用户进度,因为你的会话被破坏了。最好看看这样的情况。

我预计在游戏高峰期会有大约3-5万并发用户玩这个游戏。DB仍然可取吗?感谢NoSQL,但我可能不会选择它,这对我来说可能是另一种学习。并发用户的数量不会那么重要。这取决于您将获得的DB事务量。。。此外,数据库系统在大多数情况下都是可伸缩的。因此,虽然您的代码可能比一个DB快,但它也不会像DB那样缩放(在这里您可以切换到DB集群等)。关键性能补丁(如查询优化器)目前仅在MySQL实验版本中;当您拥有非常高的规模时,像一个像样的优化器和分区视图/表之类的东西会产生很大的不同。