在Yii2中一起使用Redis和MongoDB ActiveRecords

时间:2016-05-19 22:31:56

标签: php mongodb activerecord redis yii2

我有MongoDB Active Records(模型),我想知道是否可以使用Redis自动设置/获取/删除Redis存储中的模型。

例如,如果我要跑:

MyModel::find()->where(["id" => 1])->one();

有没有办法让Redis存储结果并在下次运行相同的代码时返回它?

此外,如果我要使用id = 1更新模型,我希望Redis使缓存无效。

这一切可能吗?

1 个答案:

答案 0 :(得分:0)

使用哪个DB无关紧要。它是关于如何实现它们的。 Yii在配置文件中设置了这两个组件:

MongoDB Redis 的好处是两者都可以用作数据库连接或缓存组件。例如,你可能有这些配置:

'components' => [

    'db' => [
        'class' => '\yii\mongodb\Connection',
        'dsn' => 'mongodb://developer:password@localhost:27017/mydatabase',
    ],

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

这里,当MongoDB被设置为默认数据库时,Redis仅用作缓存组件,并且因为所有缓存组件具有相同的基类yii\caching\Cache,所以它们仅支持those APIs。如果您仅将其用于缓存,那么应该没问题。

检查Yii2 Caching Guide以查看您可以对缓存组件执行的所有操作。您可以在@Blizz answer here中查看您尝试执行的操作的快速示例,其中他将SQL查询设置为依赖项,以检查是否应使用缓存数据或使其无效。

如果您需要使用Redis数据库而不仅仅是缓存,那么您可能会使用这些配置:

'components' => [

    'mongodb' => [
        'class' => '\yii\mongodb\Connection',
        'dsn' => 'mongodb://developer:password@localhost:27017/mydatabase',
    ],

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

    'cache' => [
        'class' => 'yii\redis\Cache',
        'redis' => 'redis' // id of the connection application component
    ],

],

这里我们定义了2个数据库,并选择其中一个数据库作为缓存组件。它应该以完全相同的方式工作,除了您还可以将应用程序内的Redis数据库用作Redis ActiveRecordRedis ActiveQuery类。您只需要在this example中设置要在每个模型类中使用的数据库。