在PHP会话中存储大型网站菜单是一个好主意吗?

在PHP会话中存储大型网站菜单是一个好主意吗?,php,performance,session,Php,Performance,Session,我有一个电子商务网站,它有一个相当大和复杂的菜单系统,有许多类别和子类别。有一百多条参赛作品 将整个内容作为PHP会话变量存储在字符串或数组中,这样就不会从每个页面的DB中一次又一次地查询导航菜单,这是一个好主意吗 或者对于会话变量来说太大 将整个内容作为PHP会话变量存储在字符串或数组中,这样就不会从每个页面的DB中一次又一次地查询导航菜单,这是一个好主意吗 否。不要在非特定于该会话的会话中存储数据 缓存这些数据有很多更好的选择;其中包括: 把它放在冰箱里 把它储存在冰箱里 使用将其写入文件

我有一个电子商务网站,它有一个相当大和复杂的菜单系统,有许多类别和子类别。有一百多条参赛作品

将整个内容作为PHP会话变量存储在字符串或数组中,这样就不会从每个页面的DB中一次又一次地查询导航菜单,这是一个好主意吗

或者对于会话变量来说太大

将整个内容作为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查询。