yii2将一个数据库表镜像到redis,用于高速活动记录查询

v2g6jxz6  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(351)

我要做的是将所有结果缓存在一个很少更改的mysql表中,这样可以减少对数据库的调用,提高查询速度。里面大约有10万张唱片。
有没有一个库可以同步这个表中所做的更改,比如说当一个记录被更新或插入时,redis缓存也会被作废和更新。
我见过一个用于elasticsearch的,但没有用于redis的。
从此页:yii将数据从一个模型复制到另一个模型
有这样的评论:
可以通过以下方式获取所有模型属性:
$data=$model->属性;并将它们分配给另一个模型
$anothermodel=新建anotheractiverecord();
$anothermodel->setattributes($data);
现在,另一个模型将从$data中提取它所能提取的任何东西
我很好奇,redis缓存是否也能以类似的方式“镜像”数据库表中的数据?
或者这只是一个坏主意,最好在查询出现时缓存它,或者有更好的方法。

hpxqektj

hpxqektj1#

可以基于启用缓存https://www.yiiframework.com/doc/guide/2.0/en/caching-data

[
    'components' => [
        'cache' => [
            'class' => 'yii\redis\Cache',
            'redis' => [
                'hostname' => 'localhost',
                'port' => 6379,
                'database' => 0,
            ]
        ],
    ],
]

然后使用查询生成器级别上本机定义的查询缓存

$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 ...
});

还可以基于表使用缓存依赖项(一些条件,如if 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);

相关问题