2017-01-11 9 views
3

Ich möchte Yii2 und Redis als Datenbank verwenden.Yii2 + Redis als Datenbank

Bisher habe ich Redis ActiveRecord Class für Yii2 von hier.

link1

link2

aber habe ich ein Problem. WARUM DIESE KLASSE ADDIERT ALLES ALS HASH IN REDIS ????

Darüber kann ich nicht finden, in welches Muster es Daten einfügen. Ich füge einen Benutzer hinzu und es wird einen Benutzer unter user:xxx Namespace und einen weiteren Datensatz unter s:user:xxx usw. hinzufügen, aber keines der Themen hat irgendwelche Felder, die ich in Attributen definiert habe !! enthalten nur IDs.

Ich weiß, dass eine Schlüssel-Wert-Typ-Datenbank und RDBMS sind anders und wissen auch, wie Relation wie Datensätze in Redis implementieren können, aber ich weiß nicht, warum es nur IDs speichern wird.

Ich konnte bisher kein Beispiel für die Verwendung von redis ActiveRecords finden.

Da ist eins drin und es ist nicht gut genug.

Also hier ist mein Hauptwuestion: Wie kann Daten zu Redis hinzufügen Verwendung von ActiveRecords und verschiedene Datentypen in YII2?

Und wenn es mit ActiveRecords unmöglich ist, was ist die beste Lösung? in diesem Fall

EINE ANDERE FRAGE: Ist es möglich, stattdessen ein Model zu verwenden und meine eigene model :: save() Methode zu schreiben? Und was ist die beste Datenvalidierungslösung in diesem Tempo?

Eigentlich möchte ich ein Telegramm Bot machen, also sollte ich Nachrichten bekommen und senden sie in RabitMQ und Daten in einem Arbeiter, den Prozess und speichern Sie Ergebnisse zu Redis, und senden Sie schließlich Antwort an Benutzer durch die RabitMQ.

Also brauche ich eine Menge Validierungen zu tun und natürlich Authentifizierungen und speichern und wählen Sie und Bereich und speichern eine Listen-Sets und dies und das ....

Ich möchte ein guter Weg, Modell machen oder aktiver Datensatz oder die richtige Lösung für die Validierung, Speichern und Abrufen von Daten zu Redis und Yii2.

+0

Bitte Hilfe .... –

Antwort

4

Redis DB kann als Cache Komponente oder als Datenbankverbindung oder beide deklariert werden.

wenn es als Cache Komponente (unter Verwendung des yii/redis/cache) erklärt wird, ist es erreichbar, dass in Komponente Schlüssel/Wert-Paareas shown here zu speichern.

$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 
); 

Auch andere Komponenten starten kann es für Caching schlägt wie session wenn ja oder die standardmäßig wie die yii\web\UrlManager tun konfiguriert werden versuchen, die generierten URL-Regeln in welcher gültige Caching-Mechanismus unter der Konfigurationsdatei definiert zwischenzuspeichern cache Komponente wie erklärt here. Es ist also normal, in diesem Fall einige andere gespeicherte Daten zu finden.

Wenn Redis als DB-Verbindung wie in den Links deklariert wird Ihnen zur Verfügung gestellt, was bedeutet, mit der yii\redis\Connection Klasse können Sie Ihr Modell erweitert sein \yii\redis\ActiveRecord Klasse wie jede andere Active Modell in Yü machen. Der einzige Unterschied, den ich bisher kenne, ist, dass Sie Ihre Attribute manuell definieren müssen, da es kein DB-Schema für die Analyse von NoSQL-Datenbanken gibt. Dann definieren Sie einfach Ihre Regeln, Szenarien, Beziehungen, Veranstaltungen, ... wie jedes andere Modell Active:

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() {...} 
    ... 
} 

Alle verfügbaren Methoden einschließlich save(), validate(), getErrors() ... könnte here und sollte verwendet werden, wie gefunden werden jede andere ActiveRecord-Klasse as shown in the official guide.

+0

Danke, also gibt es keine Möglichkeit, Attribute oder Datentypen zu anderen Dingen wie Listen oder Sets zu setzen? in vordefinierten Methoden. Kann ich meine eigene Speichermethode definieren und ihre Funktionalität ändern? Aber dann, Validierung ist ein Problem, würde es funktionieren, wenn ich die Speichermethode überschreiben? –

+0

Ja, Sie können das ursprüngliche [save()] (https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php#L632), das von ** BaseActiveRecord ** in Ihrem Modell geerbt wurde, immer überschreiben . Aber Sie müssen möglicherweise nur Methoden auf niedrigerer Ebene überschreiben, um besser zu verstehen, wie es funktioniert, schauen Sie sich yii/redis/ActiveRecord [Quellcode] an (https://github.com/yiisoft/yii2-redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/ActiveRecord .php). Sie können diese Methoden jederzeit überschreiben oder neue Methoden in Ihr Modell einfügen. '$ db-> executeCommand ($ command)' ist die Hauptfunktion für die Kommunikation mit REDIS ... –

+0

... und der Standard [die Befehlsliste ist hier zu sehen] (https://github.com/yiisoft/yii2- redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/Connection.php # L90) –