我要做的是将所有结果缓存在很少更改的MySQL表中,以便最大限度地减少对数据库的调用并提高查询速度。那里有大约10万条记录。
是否有可以同步此表中所做更改的库,例如更新或插入记录时,redis缓存也将失效和更新。
我见过一个弹性搜索,但没有用于redis。
从此页面: Yii copying data from one model to another
有这样的评论:
您可以通过以下方式获取所有模型属性:
$ data = $ model->属性; 并将它们分配给另一个模型
$ anotherModel = new AnotherActiveRecord();
$ anotherModel-> setAttributes($数据);
现在另一个模型将从$ data
中提取任何内容
我很好奇,Redis缓存是否也能以类似的方式“镜像”数据库表中的数据?
或者这总体上是一个坏主意,最好在查询时缓存查询,或者是否有更好的方法。
答案 0 :(得分:0)
您可以根据https://www.yiiframework.com/doc/guide/2.0/en/caching-data
启用缓存[
'components' => [
'cache' => [
'class' => 'yii\redis\Cache',
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
]
],
],
]
然后使用在查询构建器级别
上本机定义的Query Caching$result = $db->cache(function ($db) {
// the result of the SQL query will be served from the cache
// if query caching is enabled and the query result is found in the cache
// ... perform SQL queries here ...
});
此外,您可以根据您的表格使用Cache Dependencies(如果max(updated_at)
已更改,则可以使用某些条件)。
// Create a dependency on updated_at field
$dependency = new yii\caching\DbDependency(['sql' => 'select max(updated_at) from my_table']);
$duration = 60; // cache query results for 60 seconds.
$result = $db->cache(function ($db) {
// ... perform SQL queries here ...
return $result;
}, $duration, $dependency);