2016-05-19 4 views
1

私はMongoDB Active Records(モデル)を持っていますが、Redisのストレージからモデルを自動的に設定/取得/削除するためにRedisを使用できるかどうか疑問です。私が実行した場合RedisとMongoDB ActiveRecordsをYii2で一緒に使用

たとえば、:

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

Redisのは、結果を格納し、それを私は、同じコードを実行する次の時間を返すようにする方法はありますか?

また、モデルをid = 1に更新すると、Redisはキャッシュを無効にすると思います。

これはすべて可能ですか?

答えて

0

どのDBを使用するかは関係ありません。それはそれらを実装する方法です。

  • デシベル:モデルやQuery Buildersか...
  • キャッシュを表現するためにActive Recordクラスのように、必要な場所に使用するデータベース接続Yiiは、configファイルで設定し、これらの二つの成分を持っています:HTMLページやHTTPリクエストからのものをdatabase queries related dataにキャッシュするように設計されています。

良いこと約のMongoDBRedisのは、両方のデータベース接続として、またはキャッシュ成分として使用することができることです。あなたは、たとえば、これらのconfigsを持っていることがあります。

'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, 
     ] 
    ], 
], 

をここで、MongoDBのは、デフォルトのデータベースとして設定されている間、Re​​disのは、唯一のキャッシュコンポーネントとして使用され、すべてのキャッシュコンポーネントは同じベースクラスyii\caching\Cacheを持っているので、彼らは唯一のthose APIsをサポートしています。あなたがそれをキャッシュするためだけに使用しているのであればうまくいくはずです。

Yii2 Caching Guideを確認して、キャッシュコンポーネントでできることをすべて確認してください。あなたがしようとしていることの簡単な例は、@Blizz answer hereの中で見ることができます。ここでは、キャッシュされたデータを使用するか無効にするかをチェックする依存関係としてSQLクエリを設定しました。

ここ
'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 
    ], 

], 

我々は2つのデータベースを定義し、また、キャッシュとして使用するためにそれらのいずれかを選択:あなただけの、あなたが代わりにそれらのconfigsを有することができるキャッシュより多くのためのRedisデータベースを使用する必要がある場合には

成分。アプリ内のRedisデータベースをRedis ActiveRecordまたはRedis ActiveQueryクラスとして使用することができる点を除いて、まったく同じ方法で動作するはずです。各モデルクラス内で使用するDBをthis exampleに設定するだけで済みます。

関連する問題