2017-01-11 3 views
3

データベースとしてYii2とredisを使いたいです。Yii2 +データベースとしてのRedis

これまでのところ、ここからYii2のRedis ActiveRecord Classを入手しました。

link1

link2

しかし、私は問題を抱えて。なぜこのクラスは、何かをハッシュとしてレディスに追加しますか?

上記の私はどのパターンでデータを挿入することはできません。私は1人のユーザーを追加し、user:xxx名前空間の下に別のレコードを追加し、s:user:xxxなどのレコードを追加しますが、テーマには属性で定義したフィールドはありません!! IDのみが含まれています。

私は、Key-value型のデータベースとRDBMSが異なり、またRedisのレコードのような関係をどのように実装できるのか知っていますが、なぜIDだけを保存するのかわかりません。

これまでにredis ActiveRecordsを使用した例は見つかりませんでした。

ここに1つがあり、十分ではありません。

これは私の主な魅力です:どのようにredisにデータを追加することができますactiveRecordsと異なるデータ型を使用してYII2で?

ActiveRecordsで不可能なことは何が最善の解決策ですか?この場合

もう1つの質問:代わりにモデルを使用し、自分のモデル:: save()メソッドを記述することは可能ですか?このレートで最高のデータ検証ソリューションは何ですか?

実際に私は電報のボットを作りたいので、メッセージを取得してRabitMQで送信し、作業者にデータを取得し、処理を行い、結果をRedisに保存し、最後にRabitMQを通じてユーザーに応答を送信する必要があります。

だから私は、私はモデルを作るための良い方法をしたい

....検証の、そしてもちろん認証の多くを行うと、保存して選択し、範囲とセットにリストとこれとそれを保存する必要がありますかRedisとYii2にデータを保存し、取得することができます。

+0

お願いします.... –

答えて

4

RedisのDBは、キャッシュ成分として、またはデータベース接続又は両方として宣言することができます。

それは(yii/redis/cacheを用いキャッシュ成分として宣言され、それは、キー/値ペアas shown hereを格納するために、そのコンポーネント内でアクセス可能です。

また
$cache = Yii::$app->cache; 

// try retrieving $data from cache 
$data = $cache->get($key); 
// store $data in cache so that it can be retrieved next time 
$cache->set($key, $data); 

// one more example: 
$access_token = Yii::$app->security->generateRandomString(); 
$cache->add(
    // key 
    $access_token, 
    // data (can also be an array) 
    [ 
     'id' => Yii::$app->user->identity->id 
     'name' => Yii::$app->user->identity->name 
    ], 
    // expires 
    60*60*3 
); 

他のコンポーネントのキャッシュのためにそれを使用して起動することがそのように設定するか、デフォルトで設定ファイルのcacheの下で定義されたものは何でも、有効なキャッシュメカニズムで生成されたURLのルールをキャッシュしようとしますyii\web\UrlManagerのような場合sessionよう提案しています説明されているようなコンポーネントhere。その場合、あなたのもの以外のいくつかの保存されたデータを見つけるのが普通です。Redisのは、あなたがあなたのモデルがYiiの内の他のActiveRecordのモデルとしてその\yii\redis\ActiveRecordクラスを拡張することができますyii\redis\Connectionクラスを使用して意味しているリンクのようにDB接続として宣言されている

。これまでに知っている唯一の違いは、NoSQLデータベースを解析するDBスキーマがないため、属性を手動で定義する必要があることです。それからちょうど他のActiveRecordモデルとして...、あなたのルール、シナリオ、関係、イベントを定義します。

class Customer extends \yii\redis\ActiveRecord 
{ 
    public function attributes() 
    { 
     return ['id', 'name', 'address', 'registration_date']; 
    } 

    public function rules() 
    { 
     return [ 
      ['name', 'required'], 
      ['name', 'string', 'min' => 3, 'max' => 12, 'on' => 'register'], 
      ... 
     ]; 
    } 

    public function attributeLabels() {...} 
    ... 
} 

を含むすべての利用可能な方法save()validate()getErrors()、... here見つけることができると同じように使用する必要がありますその他のActiveRecordクラスas shown in the official guide

+0

ありがとうございますので、属性やデータ型をリストやセットなどの他のものに設定する方法はありませんか?事前定義された方法で自分のsaveメソッドを定義してその機能を変更できますか?しかし、検証方法は、saveメソッドをオーバーライドすると問題になりますか? –

+0

はい、モデル内で** BaseActiveRecord **から継承した元の[save()](https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php#L632)を上書きすることができます。しかし、yii/redis/ActiveRecord [ソースコード](https://github.com/yiisoft/yii2-redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/ActiveRecord)がどのように動作するかを理解するために、低レベルのメソッドをオーバーライドするだけでよいでしょう。 .php)。それらのメソッドを常にオーバーライドしたり、モデル内に新しいメソッドを導入したりできます。 –

+0

...とデフォルト[コマンドリストはここにあります](https://github.com/yiisoft/yii2-documentation)ここでは、 '$ db-> executeCommand($ command)'がREDISと通信するための主要な機能です。 redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/Connection.php#L90) –

関連する問題