php – 使用$_SESSION来缓冲/缓存MySQL查询

前端之家收集整理的这篇文章主要介绍了php – 使用$_SESSION来缓冲/缓存MySQL查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个网站.目前,我正在使用cheapo共享主机.但是一个男孩可以做梦,我已经在思考我网站上有大量用户会发生什么.

访问者将需要偶尔进行数据库写入,因为他们会记录他们在网站上的游戏进度.

我想通过将进度和其他信息直接写入$_SESSION变量来最小化查询.只有当会话被销毁(注销,浏览器关闭或超时)时,我才想将$_SESSION的内容写入数据库.

问题:

>那可能吗?当会话被超时或关闭浏览器销毁时,有没有办法执行函数
>这是否合情合理?几百个并发SQL查询对于共享服务器来说是一个问题,并且使用$_SESSION作为缓冲区来减轻其中的一部分.

Is there a way to execute a function when the sessions is destroyed by
timeout or closing of the browser?

是的,但它可能不会像你想象的那样工作.您可以使用session_set_save_handler定义自己的自定义会话处理程序,部分定义是提供destroy和gc回调函数.当会话被明确销毁并且由于已经过期而被销毁时,会调用这两个,因此它们完全按照您的要求执行.

但是,由于超时而导致的会话到期不会发生在发条精度上;在过期的会话实际上是“垃圾收集”之前可能需要很长时间.此外,垃圾收集会触发probabilistically,因此从理论上讲,过期的会话永远不会被垃圾收集.

Is that sensical? Are a couple of hundred concurrent sql queries going
to be a problem for a shared server and is the idea of using $_SESSION
as a buffer going to alleviate some of this.

我真的不会这样做有几个原因:

>过早优化(在测量之前,不要只是假设它会“更好”).
>会话可能永远不会被垃圾收集;即使没有发生这种情况,也无法控制何时收集它们.这可能是个问题.
>有可能丢失会话所包含的所有内容(例如服务器重新启动),其中包括玩家进度.玩家不喜欢失去进步.
>对于同一用户的并发会话是不可能的(其“已保存的数据”获胜并保持持久到数据库?).

替代方案呢?

好吧,既然我们正在谈论el cheapo共享托管,你绝对不会控制服务器,所以涉及PHP扩展的任何东西(例如memcached)都是有条件的.数据库端缓存也不会飞.此外,服务器上的负载将受到控制之外的变量的影响,因此您无法进行任何容量规划.

在任何情况下,我首先要确保数据库本身的结构是最佳的,并且代码的编写方式可以最大限度地减少数据库负载(仅通过在编辑器中输入内容就可以获得免费性能).

之后,您可以引入只读缓存:通常需要显示很多东西,但不打算修改.对于“几乎从不”更新的数据,会话缓存在您需要时无效,可能是一种简单而有效的改进(您甚至可以在失效方面产生误报,只要它们不是太多,宏伟的计划).

最后,如果您担心在单个请求期间从数据库提取相同的数据两次,则可以添加按请求缓存(在变量中).

原文链接:https://www.f2er.com/php/135445.html

猜你在找的PHP相关文章