我有一个电子商务网站,该网站的菜单系统非常大而复杂,包含许多类别和子类别。有一百多个条目。
将整个内容存储为字符串或数组作为PHP会话变量是一个好主意,这样就不会一次又一次地从数据库的DB查询导航菜单吗?
对于会话变量来说太大了吗?
答案 0 :(得分:3)
将整个内容存储为字符串或数组作为PHP会话变量是一个好主意,这样就不会一次又一次地从数据库的DB查询导航菜单吗?
不。不要在会话中存储不是特定于该会话的数据。
有很多更好的选项可以缓存这些数据。其中有几个是
将其存储在APC user cache中。
将其存储在memcached中。
使用var_export
将其写成文件,然后使用include
将该文件加载回。
使用serialize
或json_encode
将其序列化为字符串,并将其作为一行保存到数据库中。
答案 1 :(得分:0)
我建议为此使用任何缓存系统。
例如,您可以使用APC(高级PHP缓存):
安装它(基于Debian的Unix的示例):
sudo apt-get install php-apc
并实际使用它:
function getMenuDataFromDatabaseWithCache()
{
// first - let's try to get results from cache
$cachedResults = apc_fetch('db_results');
// if there is a result - let's return it
if($cachedResults !== false) {
return $cachedResults;
}
// if there is no results let's fetch all you need from the database
$fetchedResults = $mysql->someFunctionToGetData();
// store results in the cache for 1 day (1 day = 86400 seconds)
apc_add('db_results', $fetchedResults, 86400);
// so hest time the function will return cached results, without fetching from DB
return $fetchedResults;
}