gpt4 book ai didi

php - Codeigniter:数据库缓存检查记录是从数据库还是从缓存加载

转载 作者:行者123 更新时间:2023-11-29 18:26:34 24 4
gpt4 key购买 nike

我正在 Codeigniter 中实现数据库缓存,并希望检查查询中的记录或缓存文件是否存在。

据我阅读 Codeigniter Documentation也许,没有办法检查它。那么,如果可能的话,有人可以给我提示吗?

这是我想要实现的流程图

if (!$this->db->query_exists("QUERY HERE"))
// DO SOMETHING. Query Doesn't exists in CACHE

// Run the query in any case
$this->db->query("QUERY HERE");

谢谢!

最佳答案

目前尚不清楚您为什么需要/想要这样做。假设启用了查询缓存,Codeigniter DB 驱动程序已经执行此检查,并且将使用缓存查询(如果存在),或者将执行查询并缓存它(如果不存在)。您必须实现的主要任务是在执行使缓存结果无效的记录插入、更新或删除操作时清除相应的缓存。

也就是说,确定缓存是否存在的最简单方法是使用 CI_DB_Cache::read($sql) 方法。如果未找到匹配的缓存文件,该方法将返回 FALSE。

数据库驱动程序有一个公共(public)属性 - $CACHE。 (是的,它是一个全大写的变量名。)$CACHE 是 CI_DB_Cache 类的一个实例。

此属性仅在执行读取类型查询后定义。这可能是一个“第 22 条军规”——在执行读取查询之前您无法检查缓存文件,但您希望在执行查询之前进行检查。

查看 /system/database/DB_driver.php 中的protected function _cache_init(),了解 CI_DB_Cache 类是如何实例化的。您可能需要在代码中实现同样的事情。

您可能还会发现了解如何在 public function query($sql, $binds = FALSE, $return_object = NULL) 中使用 $this->CACHE 很有用> 在 /system/database/DB_driver.php 中。

也许能够使用以下方法确定相关查询是否存在。我说可能是因为我还没有测试过这个。

$sql = "SELECT * from some_table";
//check that CACHE is defined
if(isset($this->db->CACHE))
{
$query = $this->db->CACHE->read($sql);

if($query === FALSE)
{
// DO SOMETHING. Query Doesn't exists in CACHE
}
}

$query 如果找到缓存,将是一个查询结果对象。

但是,您必须删除缓存才能完成

// Run the query in any case
$this->db->query("QUERY HERE");

如果没有删除,您最终将得到与已检索到的相同的查询结果对象。

请记住,Caching 类完全依赖于浏览器请求的 URI。缓存使用前两个 URI 段( Controller 类名和函数名)来确定保存缓存文件的文件夹。

关于php - Codeigniter:数据库缓存检查记录是从数据库还是从缓存加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com