在PHP会话中存储大型网站菜单是一个好主意吗?
我有一个电子商务网站,它有一个相当大和复杂的菜单系统,有许多类别和子类别。有一百多条参赛作品 将整个内容作为PHP会话变量存储在字符串或数组中,这样就不会从每个页面的DB中一次又一次地查询导航菜单,这是一个好主意吗 或者对于会话变量来说太大 将整个内容作为PHP会话变量存储在字符串或数组中,这样就不会从每个页面的DB中一次又一次地查询导航菜单,这是一个好主意吗 否。不要在非特定于该会话的会话中存储数据 缓存这些数据有很多更好的选择;其中包括:在PHP会话中存储大型网站菜单是一个好主意吗?,php,performance,session,Php,Performance,Session,我有一个电子商务网站,它有一个相当大和复杂的菜单系统,有许多类别和子类别。有一百多条参赛作品 将整个内容作为PHP会话变量存储在字符串或数组中,这样就不会从每个页面的DB中一次又一次地查询导航菜单,这是一个好主意吗 或者对于会话变量来说太大 将整个内容作为PHP会话变量存储在字符串或数组中,这样就不会从每个页面的DB中一次又一次地查询导航菜单,这是一个好主意吗 否。不要在非特定于该会话的会话中存储数据 缓存这些数据有很多更好的选择;其中包括: 把它放在冰箱里 把它储存在冰箱里 使用将其写入文件
- 把它放在冰箱里
- 把它储存在冰箱里
- 使用将其写入文件,然后将该文件加载回
- 使用或将其序列化为字符串,并将其作为单行保存到数据库中
- 把它放在冰箱里
- 把它储存在冰箱里
- 使用将其写入文件,然后将该文件加载回
- 使用或将其序列化为字符串,并将其作为单行保存到数据库中
- 我建议使用任何缓存系统
例如,您可以使用APC(高级PHP缓存):
安装它(基于Debian的unix示例):
并实际使用它:
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;
}
我建议使用任何缓存系统 例如,您可以使用APC(高级PHP缓存): 安装它(基于Debian的unix示例): 并实际使用它:
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;
}
菜单都是独一无二的吗?@Farkas不同的用户有不同的菜单吗?i、 e.用户#1的菜单会与用户#2完全不同吗?@ceejayoz不,每个人的菜单都一样。@Farkas如果是这样的话,将其存储在会话中会非常浪费。您可以缓存它,但无论您做什么,都应该是共享存储。会话数据是每个用户的,因此您将保存同一大块数据的数千个副本。查询数据库中的每个http请求并不是页面加载最慢的事情。许多非常快速的网页在一次渲染中会执行几十次sql查询。菜单都是唯一的?@Farkas用户之间的差异是否不同?i、 e.用户#1的菜单会与用户#2完全不同吗?@ceejayoz不,每个人的菜单都一样。@Farkas如果是这样的话,将其存储在会话中会非常浪费。您可以缓存它,但无论您做什么,都应该是共享存储。会话数据是每个用户的,因此您将保存同一大块数据的数千个副本。查询数据库中的每个http请求并不是页面加载最慢的事情。许多非常快速的web页面在一次呈现中执行数十个sql查询。