【发布时间】:2015-06-20 06:05:00
【问题描述】:
我正在一个网站上工作,我使用会话登录我的用户并存储他们的搜索结果(最多 480 行,18 列 - 编辑:gzcompress 后大约 35KB 的数据)
这就是我的工作:
$_SESSION['results_cache']= gzcompress(serialize($results),2);
当我需要阅读它时:
$results = unserialize(gzuncompress($_SESSION['results_cache']));
我需要这样做,因为我的结果永远不会相同,它们是按日期排序的,并且可以高频率更新。 所以要浏览不同的页面而不弄乱结果,我需要保存结果。
我不确定我的方式是否正常,我不确定它如何与 100 000 个用户一起使用(我很乐观:)。
如果有人可以给我他们的意见。
【问题讨论】:
-
480 行没什么好说的。序列化数据会有多大?您不想在会话中填充(比如() 10 gigs blob 数据。有 100,000 个用户,这对存储空间的要求会有点重...
-
我想对于 100 000 名用户来说,这更像是 3.5GB 的数据。如果它太重了,那么有什么好的解决方案呢?我想不出别的了。无论如何,它会占用一些磁盘空间。
-
35kb 压缩在磁盘方面并不多,但它在脚本启动时仍然是一个相当大的打击,每次用户点击启用会话的页面时都会执行此操作。当然,没有更好的选择。另一个主要的方法是简单地存储查询参数并每次重新运行查询,这只是将负载从磁盘上的文件转移到查询命中其他文件在磁盘上。
-
我也在这样做,我将查询的参数存储到cookie中。实际上,当您到达搜索页面时,如果已存储参数,我会使用它们来刷新搜索结果并直接显示它们(并将新结果保存到会话中)。虽然存储在会话中的搜索结果用于为搜索时的搜索加载更多结果(使用 jquery)。正如我所说,我只能这样做,因为结果随时可能改变。如果我不这样做,我最终会在不同的页面上显示重复的结果,这没有任何意义。
标签: mysql session caching store