【发布时间】:2011-12-08 05:44:59
【问题描述】:
我在会话中存储了很多变量,这会产生性能问题。 所以,我被要求将它存储在其他地方,我可以将它存储在数据库中,但这又会很慢。
有没有更好的替代方法来存储会话变量? 全局变量是每个文件/请求。虽然 cookie 会向用户开放变量,但不会将其保留在服务器端。
提前感谢您的回答!
【问题讨论】:
标签: php session variables scope global
我在会话中存储了很多变量,这会产生性能问题。 所以,我被要求将它存储在其他地方,我可以将它存储在数据库中,但这又会很慢。
有没有更好的替代方法来存储会话变量? 全局变量是每个文件/请求。虽然 cookie 会向用户开放变量,但不会将其保留在服务器端。
提前感谢您的回答!
【问题讨论】:
标签: php session variables scope global
这取决于“很多”变量有多少? rails 的默认会话存储是使用 cookie,这通常对我来说已经足够了。如果您担心暴露变量,cookie 会被加密。你必须有它的服务器端吗?使用 html5,您有 localStorage 选项。
【讨论】:
php 会话可以配置为以多种方式工作。如果服务器上有足够的可用内存,则可以从 memcache 运行它。那将是高性能
您也可以使用数据库来存储会话信息,但正如您所说,这可能会很慢。
为什么它目前会产生性能问题? 是否正在创建大量会话,或者您是否在会话中存储了大量数据?
【讨论】:
考虑使用memcached 来获取像这样的半持久性数据。将缓存键存储在$_SESSION 中,然后使用它来获取您的缓存数据。
由于memcached 将所有内容缓存在内存中(并且严格来说是键值存储),因此它比数据库更快。这对于会话之类的东西来说有点理想,因为如果您碰巧丢失了缓存的数据,不会丢失任何严重的数据(用户只是意外退出)。
事实上,PHP Memcache 实现 provides a session handler(参见示例 #2)可以透明地为您处理会话,而无需您对代码进行任何修改。
【讨论】:
$_SESSION 并简单地获得memcached 的性能优势。但是是的,您也可以在其中任意存储键值数据,请参阅文档。