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

Sol*_*per 5 php optimization

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

由于我对游戏开发和PHP都很陌生并且我想看到我的游戏正在运行,我已经编写了所有服务器端编码(amfPHP服务),其中包含非常难看和脏的代码,这些代码命中数据库进行获取,更新游戏状态(包括球员统计和库存).

绝对不高效,所以我开始找到PHP中用于实现缓存的最佳方法.通过缓存,我的意思是我不想一直打到数据库以保存播放器的最新游戏状态,而只是在会话结束时保存(当玩家离开应用程序时).

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

  • 玩家从FB启动应用程序/游戏
  • 认证
  • 加载用户会话(以前保存的游戏状态).这包括获取用户统计数据,例如他有多少能量,硬币,经验等,他的库存,当前活动任务等,还有市场项目,报价,投放等静态信息. .
  • 在游戏发生变化时更新游戏状态,最常见的情况是当用户点击某个建筑物进行收集,消耗能量,添加硬币,提供经验或奖励等等.

现在,很少有一些共同数据可供所有参与者使用,例如"市场项目及其价格和图形资产等",并且有玩家特定数据.

我脑子里有一些想法,我需要专家帮助我的想法是好是坏还是有更好的方法?

将静态(公共)数据永久保存在缓存中并具有管理面板以清除/更新验证后,检索数据并保存在缓存中(作为JSON对象)和所有读/写,直到会话结束将对缓存完成,会话结束后,将缓存数据保存到DB中.

在这里,我想使用APC.你觉得它可靠吗?

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

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

bum*_*ack 4

您是否分析了您的应用程序并将数据库确定为瓶颈?看起来您正在尝试优化很可能根本不是问题的事情。

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

看起来您正在做一些过早的优化,这会降低整个游戏的安全性和稳定性......这根本不值得,除非您确实将写入数据库确定为性能瓶颈。话又说回来,您真的不想失去用户进度,因为您的会话会被破坏。那么最好看看像NoSQL这样的东西。