我有MongoDB Active Records(模型),我想知道是否可以使用Redis自动设置/获取/删除Redis存储中的模型。
例如,如果我要跑:
MyModel::find()->where(["id" => 1])->one();
有没有办法让Redis存储结果并在下次运行相同的代码时返回它?
此外,如果我要使用id = 1
更新模型,我希望Redis使缓存无效。
这一切可能吗?
答案 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 ActiveRecord或Redis ActiveQuery类。您只需要在this example中设置要在每个模型类中使用的数据库。