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

cache large data in session on memcache server

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

我认为启动会话需要很长时间,因为内存缓存和 PHP 必须为每个请求反序列化数十万个 table 单元格。我敢打赌这比你只使用数据库要花更长的时间。

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

而不是这样构建缓存:

$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() 时,只会加载当前用户的行,而不是整个 table。

附录

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

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