在内存缓存服务器上缓存会话中的大数据
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
引用并在数据库中查询您需要的信息来快速测试它。
我已经为我的 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
引用并在数据库中查询您需要的信息来快速测试它。