【发布时间】:2013-01-14 22:30:47
【问题描述】:
在后续的页面请求中需要从 (MySQL) 数据库中读取的某些用户数据,比如用户名或某些首选项。
将此数据存储在 $_SESSION 变量中以节省数据库查找是否有益?
我们正在谈论(可能)很多用户。我想存储在 $_SESSION 中会增加 RAM 的使用量(非常少的数量乘以非常多的用户),而在每个页面上一次又一次地请求相同数据时访问数据库应该会增加磁盘活动。
【问题讨论】:
-
会话数据默认存储在磁盘上。虽然它正在分配来自数据库的负载,但您仍然会有一些磁盘 io,其中会话数据存储在该位置。您可能想考虑使用 memcached 作为不错的选择。
-
数据库可能不会(再次)访问磁盘,因为记录已经在内存中。
-
@Karoly:所以最好不要在 $_SESSION 中存储已经保存在数据库中的任何内容,只是反复从数据库中读取,希望它已经在内存中?
-
您必须对其进行测试,但是如果它是单个查询,那么您不会获得太多...如果是几个查询,那么值得将其缓存在 K-V 存储中,但是您如果值发生变化,必须在应用程序中构建逻辑以更新缓存...