【问题标题】:generate data from mysql only once and then save it?只从mysql生成一次数据然后保存?
【发布时间】:2014-04-12 09:11:32
【问题描述】:

很难解释,所以我只说我有什么和我需要什么

当用户访问任何页面时,我(每次)从 mysql 生成 3 个包含数据(大量数据)的数组。我需要这个用于页面标题中的选择选项

字符串总数 ~4000

$a[1]['name']="balallbal";

$a[1]['desc']="balallbal desc";


$a[4000]['name']="balallbal 4000";

$a[4000]['desc']="balallbal desc 4000";

我能否以某种方式存储此数据实例或某种东西,以便当用户转到另一个页面时它会使用存储的数据而不是查询 mysql

【问题讨论】:

    标签: php mysql save instance store


    【解决方案1】:

    使用 $_SESSION 变量,它会在用户浏览网站时保留您的数据。

    http://www.php.net/manual/en/features.sessions.php

    检查这个变量是否存在并且在你的代码开头有你的数据(比如start.php、init.php、header.php。将它包含在你的所有页面中)。如果没有 - 一次用 mysql 查询填充它,然后在其他页面上使用 $_SESSION。

    【讨论】:

    • 在这种情况下,您可以使用 APC 缓存或 memcached(或任何其他缓存守护进程)并在 SESSION 中存储此数据的唯一 ID。
    • 但是,我认为,会话足以存储这个。您可以在服务器端优化您的 SESSION 参数。
    【解决方案2】:

    是的,你可以。您必须为此使用 $_SESSION。 $_SESSIONs 通过页面存储数据,直到用户关闭浏览器。

    这样做:

    if($_SESSION['data-query'] == '')
    {
       $data_array = get_data_from_db();
       $_SESSION['data-query'] = true; // to prevent the next data query
       $_SESSION['cat-data'] = $data_array;
    }
    

    或者您可以使用count($_SESSION['cat-data']) == 0 代替“数据查询”(如评论中所述)

    【讨论】:

    • 一点评论;一旦用户关闭浏览器,会话数据将不会被删除。饼干可以。而且您不需要额外的字段 ($_SESSION['data-query'])。只需检查$_SESSION['cat-data'] 是否已填写。
    • 我听说过单例模式可以用于此目的吗?
    • Signleton 设计模式(我不太了解)但不太推荐。虽然使用 $_SESSION 似乎是该模式的一个孩子。我在回答中建议的是最好的选择。如果你觉得有用,别忘了投票..
    【解决方案3】:

    您可能想尝试 memcache。当用户第一次请求进入时将结果存储在 memcache 中,对于下一个后续请求,您可以从 memcache 中提取数据而不是查询 sql。 此外,将数据存储在缓存中的时间也是可配置的。 http://in1.php.net/memcache

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多