我可以使用$ _SESSION作为内存缓存吗?

时间:2011-09-05 21:07:35

标签: php session

每次加载页面时,我都会连接到数据库以获取存储基本应用程序设置的settings表。它看起来很有用。我有一个想法,将$settings数组临时存储在$ _SESSION变量中。因此,每次启动脚本时,它都会检查$ _SESSION ['settings']是否为空并仅在数据库中加载数据。

我的问题是:

1)这是正常的做法还是有严重的陷阱?

2)这会加快我的申请吗?

3 个答案:

答案 0 :(得分:5)

  

看起来效率不高。

看起来还是效率低下?

  

我有一个想法是在$ _SESSION变量中临时存储$ settings数组。

这是错误的想法。会话用于个人数据,而不是站点范围的设置。如果您想从文件中读取设置 - 请包含它!

  

这会加快我的申请吗?

目前您的申请速度有问题吗?

答案 1 :(得分:1)

我不建议使用PHP的$_SESSION作为本地缓存。对于访问您网站的每位访问者,您需要填充$_SESSION变量。这是低效的,因为每个访问者将在他们不需要时进行会话。它也很难管理,因为settings数据的更改不会立即填充到$_SESSION变量中。为此,我建议使用memcached甚至apc本地对象缓存。

答案 2 :(得分:1)

我猜这种性能优势最多可以忽略不计,最坏的情况下可能有害。

无论哪种方式,$ _SESSION并非真正意图以这种方式使用,而是用于与特定用户相关的数据,并且作为一般规则,我尽量使其尽可能简洁。

您可能考虑的一个更好的解决方案是将设置本地缓存为PHP文件,编写一些内容以生成创建简单密钥的文件并不太难=>您可以包含的数据库中的value数组。 e.g。

<?php
// myconfig.php

return array(
    'mysetting' => 'value',
);

然后您可以只包含此文件以获取配置值:

<?php
// app.php

$config = include('myconfig.php');

echo $config['mysetting']; // 'value'