You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2数据库查询缓存:duration设为0/NULL的效果及依赖触发需求

Yii2 查询缓存依赖与有效期设置说明

针对你提出的问题,结合Yii2的缓存机制,直接给出结论:

1. 当$duration设为0时

缓存会永久保留(直到依赖触发失效或缓存被手动清除),并且会正常检查DbDependency。也就是说,只要依赖的SQL(SELECT MAX(\modifieddatetime`) FROM {{%schedule}}`)返回的结果不变,就一直使用缓存数据;一旦结果变化,缓存会立即失效,重新执行查询并更新缓存。这完全符合你“仅在DbDependency变化时执行查询”的需求。

2. 当$duration设为NULL时

这会直接禁用缓存功能,每次调用方法都会执行原始数据库查询,不会读取缓存,自然也不会检查依赖。

对应代码调整

如果要实现你的需求,修改后的代码片段如下:

public function getScheduleSelect() {
    $duration = 0;     // 缓存永不过期,直到依赖变化
    $dependency = new DbDependency();
    $dependency->sql = 'SELECT MAX(`modifieddatetime`) FROM {{%schedule}}';

    return ArrayHelper::map(
                    $this->find()
                            ->select('schedule')
                            ->orderBy('schedule')
                            ->distinct()
                            ->asArray()
                            ->cache($duration, $dependency)
                            ->all(),
                    'schedule', 'schedule');
}

内容的提问来源于stack exchange,提问作者JKofsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:42:32