我的网页游戏中的用户正在PHP的$ _SESSION中缓存某些播放器信息。 每次加载游戏时都会检查会话是否存在,如果没有,他们会从MySQL数据库中获取玩家信息,然后将其存储在$ _SESSION中。
现在我的问题是,如果玩家信息被另一个进程或玩家更新怎么办?他们无法更新其他玩家的$ _SESSION缓存。
我知道memcached很可能是解决这个问题的方法,但我不确定我是否应该花时间做这样的事情。 $ _SESSION缓存对我来说很好,除此之外。
file_exist
是否应该清除缓存。你们会做什么?它会在每个请求中执行,因此对此进行优化非常重要。
答案 0 :(得分:3)
从设计的角度来看,我会避免使用file_exists和目录方法。当然'file_exists'很快,但它不能很好地扩展......如果用户改名,会发生什么?
如果你正在使用APC(你应该),你可以使用APC的用户内存缓存。只要您在单个服务器上,它就应该为您提供与memcached类似的性能优势,而无需单独的内存缓存服务器进程。如果用户条目经常更改,您可能会遇到APC的碎片问题。在这种情况下,有时间咬住子弹并使用memcached - 您甚至可以将会话数据存储在memcached中以提高性能。
此外,APC或您的file_exists解决方案都不会扩展到多个负载均衡的服务器 - 您需要一个数据库解决方案或memcached。
答案 1 :(得分:1)
你暴露它的方式不是关于它与另一个的速度有多快,因为你的并发问题,SESSION方法无效。
如果您的数据可以同时更改,那么您的数据存储需要能够处理该并发性,并且您要使用的任何缓存层都需要根据您的问题的性质进行操作。
答案 2 :(得分:1)
如果它只是关于缓存,而你不想安装memcache(d),你可以在内存中使用mysql表。它没有memcached那么快,但仍然是一个很好的解决方案。并确保在所有表上创建适当的索引(可能这是更好的解决方案,没有缓存,只需从表中选择它)。
CREATE TABLE t (i INT) ENGINE = MEMORY;