2017-01-11 1 views
3

Je veux utiliser Yii2 et Redis comme base de données. Jusqu'à présent, j'ai reçu la classe Redis ActiveRecord pour Yii2 d'ici.Yii2 + Redis comme base de données

link1

link2

mais j'ai eu un problème. POURQUOI CETTE CLASSE AJOUTE COMME QUOI QUE CE SOIT EN HASH REDIS ???? Au-dessus de cela, je ne peux pas trouver dans quel motif il insère des données. J'ajoute un utilisateur et il va ajouter un utilisateur sous espace de noms user:xxx et un autre enregistrement sous s:user:xxx et ainsi de suite, mais aucun de thème a des domaines que je définis dans les attributs !! contient uniquement des ID. Je sais qu'une base de données de type valeur-clé et un SGBDR sont différents et savent également comment implémenter des enregistrements de type relation dans Redis, mais je ne sais pas pourquoi ils enregistreront seulement des identifiants.

Je n'ai trouvé aucun exemple d'utilisation de redis ActiveRecords jusqu'à présent.

Il y a un ici et ce ne est pas assez bon.

Voici donc ma principale interrogation: comment ajouter des données à redis Utiliser ActiveRecords et différents types de données Dans YII2?

Et si c'est impossible avec ActiveRecords quelle est la meilleure solution? dans ce cas

UNE AUTRE QUESTION: est-il possible d'utiliser un modèle à la place et d'écrire ma propre méthode modèle :: save()? et quelle est la meilleure solution de validation des données à ce rythme? En fait je veux faire un bot de télégramme, donc je devrais recevoir des messages et les envoyer dans RabitMQ et obtenir des données dans un travailleur, faire le processus et sauvegarder les résultats dans Redis, et enfin envoyer une réponse à l'utilisateur via le RabitMQ.

donc je dois faire beaucoup de Validations et d'authentifications de cours et enregistrer et sélectionner et plage et enregistrez fixe une liste et ceci et cela ....

Je veux une bonne façon de faire ou modèle enregistrement actif ou la solution appropriée à la validation, de sauvegarder et de récupérer des données à Redis et Yii2.

+0

S'il vous plaît aider .... –

Répondre

4

Redis DB peut être déclarée en tant que composant de cache ou une connexion de base de données ou deux.

Quand elle est déclarée en tant que composant de cache (utilisant le yii/redis/cache) est accessible à l'intérieur de ce composant pour stocker clé/valeur paires 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 
); 

également d'autres composants peuvent commencer à l'utiliser pour la mise en cache propose comme session si elle est configurée pour le faire ou comme le yii\web\UrlManager qui, par défaut va essayer de mettre en cache les règles d'URL générées dans tout mécanisme de mise en cache valide défini dans cache de fichier de configuration composant comme expliqué here. Il est donc normal de trouver des données stockées autres que les vôtres dans ce cas.

Lorsque Redis est déclaré comme connexion DB comme dans les liens que vous avez fournis ce qui signifie en utilisant la classe yii\redis\Connection vous pouvez faire votre modèle étendre sa classe \yii\redis\ActiveRecord comme tout autre modèle ActiveRecord dans Yii. La seule différence que je connais jusqu'à présent est que vous devez définir vos attributs manuellement car il n'y a pas de schéma DB à analyser pour les bases de données NoSQL. Ensuite, il suffit de définir vos règles, des scénarios, des relations, des événements, ... comme tout autre modèle 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() {...} 
    ... 
} 

Toutes les méthodes disponibles, y compris save(), validate(), getErrors() ... pourrait être trouvé here et doit être utilisé comme toute autre classe ActiveRecord as shown in the official guide.

+0

merci, donc il n'y a aucun moyen de définir des attributs ou des types de données à d'autres choses comme des listes ou des ensembles? dans des méthodes prédéfinies. puis-je définir ma propre méthode de sauvegarde et modifier ses fonctionnalités? mais alors, la validation est un problème cela fonctionnerait-il si je substitue la méthode de sauvegarde? –

+0

Oui, vous pouvez toujours remplacer l'original [save()] (https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php#L632) hérité de ** BaseActiveRecord ** dans votre modèle . Mais il se peut que vous deviez simplement remplacer les méthodes de niveau inférieur, pour mieux comprendre comment cela fonctionne, jetez un oeil à yii/redis/ActiveRecord [code source] (https://github.com/yiisoft/yii2-redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/ActiveRecord .php). vous pouvez toujours remplacer ces méthodes ou en introduire une nouvelle dans votre modèle. '$ db-> executeCommand ($ commande)' est la fonction principale ici pour communiquer avec REDIS ... –

+0

... et par défaut [liste de commande peut être vu ici] (https://github.com/yiisoft/yii2- redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/Connection.php # L90) –