搜索
首页后端开发php教程[codeigniter 五]、查询缓存

数据库缓存类

数据库缓存类允许你把数据库查询结果保存在文本文件中以减少数据库访问。

重要

当缓存启用时,本类会被数据库驱动自动加载,切勿手动加载。

重要

并非所有查询结果都能被缓存,请仔细阅读本页内容。

启用缓存

启用缓存需要三步:

  • 在服务器上创建一个可写的目录以便保存缓存文件;
  • 通过文件 application/config/database.php 中的 cachedir 参数设置其目录路径;
  • 通过将文件 application/config/database.php 中的 cache_on 参数设置为 TRUE,也可以用下面的方法手动配置。

缓存一旦启用,每一次加载页面时,只要该页面含有数据库查询就会自动缓存起来。

缓存是如何工作的?

当你在访问页面时,CodeIgniter 的查询缓存系统会自动运行。如果缓存被启用,当页面第一次加载时,查询结果对象会被序列化并保存到服务器上的一个文本文件中。当下次再访问该页面时,会直接使用缓存文件而不用访问数据库了,这样,在已缓存的页面,你的数据库访问会降为 0 。

只有读类型(SELECT)的查询可以被缓存,因为只有这类查询才会产生结果。写类型的查询(INSERT、UPDATE 等)并不会生成结果,所以不会被缓存。

缓存文件永不过期,所有的查询只要缓存下来以后除非你删除它们否则将一直可用。你可以针对特定的页面来删除缓存,或者也可以清空掉所有的缓存。一般来说,你可以在某些事件发生时(如数据库中添加了数据)用下面的函数来清除缓存。

缓存能够提升站点的性能吗?

缓存能否获得性能增益,取决于很多因素。如果你有一个低负荷而高度优化的数据库,你可能不会看到性能的提升。而如果你的数据库正在被大量访问,您可能会看到缓存后的性有所提升,前提是你的文件系统并没有太多的开销。要记住一点的是,缓存只是简单的改变了数据获取的途径而已,从访问数据库变成了访问文件系统。

例如,在一些集群服务器环境中,由于文件系统的操作太过频繁,缓存其实是有害的。在共享的单一服务器环境中,缓存才可能有益。不幸的是,关于是否需要缓存你的数据库这个问题并没有唯一的答案,这完全取决于你的情况。

缓存文件是如何存储的?

CodeIgniter 将每个查询都缓存到它单独的缓存文件中,根据调用的控制器方法缓存文件被进一步组织到各自的子目录中。更准确的说,子目录是使用你 URI的前两段(控制器名 和 方法名)命名的。

例如,你有一个 blog 控制器和一个 comments 方法,并含有三个不同的查询。缓存系统将创建一个名为 blog+comments 的目录,并在该目录下生成三个缓存文件。

如果你的 URI 中含有动态查询时(例如使用分页时),每个查询实例都会生成它单独的缓存文件,因此,最终可能会出现缓存文件数是你页面中的查询次数的好几倍这样的情况。

管理你的缓存文件

由于缓存文件不会过期,那么你的应用程序中应该有删除缓存的机制,例如,我们假设你有一个博客并允许用户评论,每当提交一个新评论时,你都应该删除掉关于显示评论的那个控制器方法对应的缓存文件。下面将介绍有两种不同的方法用来删除缓存数据。

不是所有的数据库方法都兼容缓存

最后,我们必须得指出被缓存的结果对象只是一个简化版的结果对象,正因为这样,有几个查询结果的方法无法使用。

下面列出的方法是无法在缓存的结果对象上使用的:

  • num_fields()
  • field_names()
  • field_data()
  • free_result()

同时,result_id 和 conn_id 这两个 id 也无法使用,因为这两个 id只适用于实时的数据库操作。

函数参考

$this->db->cache_on() / $this->db->cache_off()

用于手工启用/禁用缓存,当你不想缓存某些查询时,这两个方法会很有用。例子:

// Turn caching on
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mytable");

// Turn caching off for this one query
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");

// Turn caching back on
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM another_table");

$this->db->cache_delete()

删除特定页面的缓存文件,这当你更新你的数据库之后需要清除缓存时很有用。

缓存系统根据你访问页面的 URI 来将缓存写入到相应的缓存文件中去,例如,如果你在访问 example.com/index.php/blog/comments 这个页面,缓存系统会将缓存文件保存到 blog+comments 目录下,要删除这些缓存文件,你可以使用:

$this->db->cache_delete('blog', 'comments');

如果你没提供任何参数,将会清除当前 URI 对应的缓存文件。

$this->db->cache_delete_all()

清除所有的缓存文件,例如:

$this->db->cache_delete_all();

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了[codeigniter 五]、查询缓存,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
华为GT3 Pro和GT4的差异是什么?华为GT3 Pro和GT4的差异是什么?Dec 29, 2023 pm 02:27 PM

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

修复:截图工具在 Windows 11 中不起作用修复:截图工具在 Windows 11 中不起作用Aug 24, 2023 am 09:48 AM

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

入职后,我才明白什么叫Cache入职后,我才明白什么叫CacheJul 31, 2023 pm 04:03 PM

事情其实是这样的,当时领导交给我一个perf硬件性能监视的任务,在使用perf的过程中,输入命令perf list,我看到了以下信息:我的任务就要让这些cache事件能够正常计数,但关键是,我根本不知道这些misses、loads是什么意思。

如何修复无法连接到iPhone上的App Store错误如何修复无法连接到iPhone上的App Store错误Jul 29, 2023 am 08:22 AM

第1部分:初始故障排除步骤检查苹果的系统状态:在深入研究复杂的解决方案之前,让我们从基础知识开始。问题可能不在于您的设备;苹果的服务器可能会关闭。访问Apple的系统状态页面,查看AppStore是否正常工作。如果有问题,您所能做的就是等待Apple修复它。检查您的互联网连接:确保您拥有稳定的互联网连接,因为“无法连接到AppStore”问题有时可归因于连接不良。尝试在Wi-Fi和移动数据之间切换或重置网络设置(“常规”>“重置”>“重置网络设置”>设置)。更新您的iOS版本:

如何通过拖放在Power Query中对多列进行重新排序如何通过拖放在Power Query中对多列进行重新排序Mar 14, 2024 am 10:55 AM

在这篇文章中,我们将向你展示如何通过拖放在PowerQuery中对多列进行重新排序。通常,从各种来源导入数据时,列可能不是所需的顺序。重新排序列不仅允许您按照符合您的分析或报告需求的逻辑顺序排列它们,还可以提高数据的可读性,并加快过滤、排序和执行计算等任务。如何在Excel中重新排列多个列?在Excel中,重新排列列的方法有多种。您可以简单地选择列标题,然后将其拖动到所需位置。但是,当处理包含许多列的大表时,这种方法可能会变得繁琐。为了更高效地重新排列列,您可以使用增强查询编辑器。通过增强查询编

React Query 数据库插件:实现数据导入和导出的方法React Query 数据库插件:实现数据导入和导出的方法Sep 26, 2023 pm 05:37 PM

ReactQuery数据库插件:实现数据导入和导出的方法,需要具体代码示例随着ReactQuery在前端开发中的广泛应用,越来越多的开发者开始使用它来管理数据。而在实际开发中,我们经常需要将数据导出到本地文件或从本地文件导入数据到数据库中。为了更方便地实现这些功能,可以使用ReactQuery数据库插件。ReactQuery数据库插件提供了一系列方

使用cache可以提高计算机运行速度这是因为什么使用cache可以提高计算机运行速度这是因为什么Dec 09, 2020 am 11:28 AM

使用cache可以提高计算机运行速度这是因为Cache缩短了CPU的等待时间。Cache是位于CPU和主存储器DRAM之间,规模较小,但速度很高的存储器。Cache的功能是提高CPU数据输入输出的速率;Cache容量小但速度快,内存速度较低但容量大,通过优化调度算法,系统的性能会大大改善。

cache是什么存储器?cache是什么存储器?Nov 25, 2022 am 11:48 AM

cache叫做高速缓冲存储器,是介于中央处理器和主存储器之间的高速小容量存储器,一般由高速SRAM构成;这种局部存储器是面向CPU的,引入它是为减小或消除CPU与内存之间的速度差异对系统性能带来的影响。Cache容量小但速度快,内存速度较低但容量大,通过优化调度算法,系统的性能会大大改善。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境