在memcache服务器上缓存会话中的大数据

时间:2016-07-19 03:07:29

标签: php session memcached

我为我的php服务器设置了两个memcached服务器来缓存会话中的一些数据库数据。
当我选择带有20列数据的超过20000条记录并缓存到php会话中时,执行session_start()需要1秒多的时间;
为什么?我怎样才能加快它的速度呢?

1 个答案:

答案 0 :(得分:1)

我认为启动会话需要很长时间,因为memcache和PHP必须为每个请求反序列化数十万个表单元。我打赌它比你刚刚使用数据库需要更长的时间。

您的实施效率非常低:如果单个用户需要访问其会话,则会加载有关所有用户的数据。要显着加快速度,请更改在缓存中存储值的方式;只存储当前用户的数据,而不是整个表!

而不是以这种方式构建缓存:

$SESSION['data'] = [
    'ID_1'=>['name'=>'jane', 'email'=>'...'],
    'ID_2'=>['name'=>'john', 'email'=>'...'],
    ... //20,000 rows
];

这样做:

$SESSION['data'] = [
    'ID_1'=>['name'=>'jane', 'email'=>'...']//a single row
];

现在,当您致电session_start()时,仅加载当前用户的行,而不是整个表。

<强>附录

我的回复是针对浏览网页的个人用户。如果管理员要求脚本过滤所有记录,我只需使用SELECT语句访问数据库。确保仅选择所需的列和行。它可能比从缓存加载整个表更快。

无论如何,您可以通过注释掉session_start()和所有$_SESSION引用来快速测试,并查询数据库以获取所需的信息。