2016-05-19 4 views
1

Ich habe MongoDB Active Records (Modelle) und ich frage mich, ob es möglich ist, Redis zu verwenden, um die Modelle aus Redis Speicher automatisch zu setzen/zu erhalten/löschen.Verwenden Redis und MongoDB ActiveRecords zusammen in Yii2

Zum Beispiel, wenn ich laufen:

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

ist es eine Möglichkeit, Redis speichern Sie das Ergebnis und senden Sie es das nächste Mal, wenn ich das gleiche Code ausführen zu machen?

Wenn ich das Modell mit id = 1 aktualisieren würde, würde ich erwarten, dass Redis den Cache ungültig macht.

Ist das alles möglich?

Antwort

0

Es spielt keine Rolle, welche DB zu verwenden ist. Es geht darum, sie zu implementieren. Yü haben diese beiden Komponenten in der Konfigurationsdatei setzen:

Die gute Sache über MongoDB und Redis ist, dass beide können als Datenbankverbindung oder als Cache-Komponente verwendet werden. Sie können diese Konfigurationen zum Beispiel haben:

'components' => [ 

    'db' => [ 
     'class' => '\yii\mongodb\Connection', 
     'dsn' => 'mongodb://developer:[email protected]:27017/mydatabase', 
    ], 

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

Hier, während MongoDB als Standard-Datenbank gesetzt ist, wird Redis nur als Cache-Komponente verwendet, und weil alle Cache-Komponenten mit der gleichen Basisklasse yii\caching\Cache sie unterstützen nur those APIs. Was sollte in Ordnung sein, wenn Sie es nur zum Caching verwenden.

Überprüfen Sie die Yii2 Caching Guide, um alles zu sehen, was Sie mit einer Cache-Komponente tun können. Ein kurzes Beispiel dessen, was Sie zu tun versuchen, kann innerhalb von @Blizz answer here gesehen werden, wo er eine SQL-Abfrage als eine Abhängigkeit gesetzt hat, um zu überprüfen, ob zwischengespeicherte Daten stattdessen verwendet oder ungültig gemacht werden sollten.

Im Fall, dass Sie mehr die Redis-Datenbank verwenden, als nur das Caching dann können Sie stattdessen diese configs haben:

'components' => [ 

    'mongodb' => [ 
     'class' => '\yii\mongodb\Connection', 
     'dsn' => 'mongodb://developer:[email protected]: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 
    ], 

], 

Hier definiert wir zwei Datenbanken und ausgewählte von ihnen auch als Cache verwendet werden Komponente. Es sollte genau so funktionieren, außer dass Sie die Redis-Datenbank in Ihrer App auch als Redis ActiveRecord oder Redis ActiveQuery Klasse verwenden können. Sie müssen nur festlegen, welche DB in jedem Modell Klasse verwendet werden soll, wie es in this example getan wird.

Verwandte Themen