缓存还是存储在会话中?

2024-02-09

我有一个页面从我的数据库加载了大量数据。我想加快加载时间。我已经缓存了查询,但加载时间仍然比我希望的要长。

是否可以渲染包含数据的表并将其存储在会话中以在每次新页面刷新时加载?我什至考虑使用 ob_start() 将其放入外部文本文件中;

最好的处理方法是什么?


将其存储在会话中可能不是最好的主意,当您将数据添加到会话(默认情况下)时,数据会写入操作系统上的文件中,通常位于 /tmp/ 中,这意味着您将相当频繁地访问磁盘大量并存储同样多的数据。

如果数据不是特定于用户的,那么您可以将其存储在磁盘或内存中 - (请参阅:php.net/apc)

如果数据是用户特定的,我建议将其存储在分布式缓存中,例如 Memcached (memcached.org) PHP 有一个可以启用的库 (php.net/memcached)

(特定于用户的数据是指用户交易、商品、购物车等数据)

对于您选择的任何方法,其逻辑基本相同:

Memcached,用户特定数据示例:

<?php

$memcached = new Memcached();
$data = $memcached->get('shopping-cart_' . $user_id);

if (!$data) {
    $sql = $db->query("..");
    $data = array();
    while($row = $query->fetch_assoc()) {
        $data[] = $row;
    } 
    $memcached->set('shopping-cart_' . $user_id, $data);
} 
?>
<table>
<?php 
foreach ($data as $item) {
    echo '<tr><td>' . $item['name'] .' </td></tr>';
}
?>
</table>

全局数据(非用户特定)

<?php
$cache_file = '/cached/pricing-structure.something';

if (file_exists($cache_file)) {
    echo $cache_file;
} else {
    // heavy query here 
    $h = fopen('/cached/pricing-structure.something', 'w+');
    fwrite($h, $data_from_query);
    fclose($h);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓存还是存储在会话中? 的相关文章

随机推荐

  • 将图像添加到 pandas DataFrame

    假设我有一个 DataFrame 我想导出为 PDF 在数据框中 我有以下列 代码 名称 价格 净值 销售额 每一行都是一个产品 我想向该 DataFrame 中的每个产品添加一个我可以使用 BeautifulSoup 获得的图像 有什么方
  • 网页设计:“向下滚动导航”

    某些网络应用程序中使用的技术是什么 例如http www alfredapp com http www alfredapp com导航在哪里向下滚动网站以显示另一个网站 为了获得这种导航方式 我会将所有内容放在一个页面上并使用 平滑滚动效果
  • Spark sql字符串到时间戳缺少毫秒

    Why is import spark implicits val content Seq 2019 09 11 17 16 54 762000000 toDF year month day hour minute second nano
  • 如何使用 Google 协作平台中嵌入的网络应用程序链接到另一个页面?

    单击新页面的链接后 从用户的角度来看 什么也没有发生 控制台打印出如下错误 不安全的 JavaScript 尝试启动具有原点的框架导航 来自带有 URL 的框架的 https sites google com https n frzjyfh
  • JQuery DatePicker 只读

    当我将日期选择器设置为只读时 我发现用户无法在文本框中输入任何内容 datepicker attr readonly readonly 但是 他们仍然可以使用日历更改该值 如何隐藏日历以使用户无法更改日期值 我不想禁用日期选择器 因为我需要
  • Travis CI:构建矩阵项中的分支过滤器

    我们想知道是否有任何方法可以向 Travis 矩阵项添加过滤器 在我们的特定情况下 我们希望仅在特定分支上运行某些作业 以下示例是配置此场景的理想方法 但它似乎不起作用 matrix include env BUILD TYPE relea
  • 超正方体的替代方案

    Python 或 OpenCV 中是否有替代软件或任何库可以替代 Tesseract 进行字符识别 有什么建议的可以用Python实现的字符识别方法吗 Thanks This site https github com kba awesom
  • Clojure 形式到字符串

    有没有办法将 Clojure 形式转换为字符串 例如 转变 and f 1 g 3 to and f 1 g 3 gt defmacro string it x str x user string it gt string it 1 2 1
  • 在Matlab中循环多个文件

    我需要让 Matlab R2013a 在目录中查找包含 txt 扩展名的所有文件 然后对这些文件执行某些数学表达式 之后 脚本必须打印出与输入文件同名的文件中的数据 除了添加一些新单词以便我可以区分之外 例如 Input file1 txt
  • Java 框架中的单页 Web 应用程序或示例? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有人看过 Java 中的示例或执行过以下操作 http duganchen ca single page web app archit
  • 如何计算两个给定日期之间的月数(基线和后续日期)

    我正在尝试确定基线和随访之间的月数 我的约会看起来像这样 Baseline Follow Up 10 6 15 10 10 17 10 6 15 4 20 18 10 6 15 4 18 18 10 6 15 7 2 18 10 6 15
  • Seam / Spring WebFlow 应用程序中的 StackOverflowError

    我们正在逐步用 Spring MVC 和 Spring Webflow 替换 Seam 组件 运行 JMeter 测试几个小时后 日志会因 StackOverFlowErrors 变得混乱 javax servlet ServletExce
  • 如何在Xcode LLVM中编写有关LOOP的内联汇编代码?

    我正在研究内联汇编 我想在 Xcode 4 LLVM 3 0 编译器下的 iPhone 中编写一个简单的例程 我成功编写了基本的内联汇编代码 例子 int sub int a int b int c asm sub 0 1 2 r c r
  • 使用插件扩展 Java Web 应用程序

    我的这个 Web 应用程序已经变得一团糟 难以管理 我想将其分成一个通用的 框架 部分 仍然包括页面和图像等网络内容 和几个添加额外功能和屏幕的模块 我希望这种重构也可以作为第三方扩展的插件系统 所有模块都需要是单独的部署单元 最好是 wa
  • Jersey + Jackson JSON日期格式序列化-如何更改格式或使用自定义JacksonJsonProvider

    我正在使用 Jersey Jackson 为我的应用程序提供 REST JSON 服务层 我遇到的问题是默认的日期序列化格式如下所示 CreationDate 1292236718456 起初我以为这是一个 UNIX 时间戳 但它太长了 我
  • 迁移到 Rails 3.2.1 后,关系“translations”不存在

    我从 Rails 3 1 3 迁移到 3 2 1 加载主页时出现以下错误 PGError ERROR relation translations does not exist LINE 4 WHERE a attrelid translat
  • 如何将加载图像添加到 HTML5 视频?

    除了海报图像之外 我还希望在下载视频时显示加载程序图像 gif 动画 这怎么可能 一种便宜的方法可能是在poster视频开始播放时将替换的属性 例子
  • 如何使用 MS graph 访问 sharepoint 在线站点中的文档库

    我可以通过如下请求访问我的一个驱动器上的文档 https graph microsoft com v1 0 me drive root children 我可以通过如下请求访问我公司根共享点站点的文档库 https graph micros
  • 在 Grails 3.x 中将配置文件 application.yml 转换为 application.groovy

    我正在尝试创建一个简单的 Grails 3 项目 但遇到了一些非常简单的问题 因此 我希望我的数据源属性来自我在 IntelliJ IDE 中设置的 VM 选项 在 Grails 2 x 之前 我经常这样做 environments dev
  • 缓存还是存储在会话中?

    我有一个页面从我的数据库加载了大量数据 我想加快加载时间 我已经缓存了查询 但加载时间仍然比我希望的要长 是否可以渲染包含数据的表并将其存储在会话中以在每次新页面刷新时加载 我什至考虑使用 ob start 将其放入外部文本文件中 最好的处