Redis
 sql >> Database >  >> NoSQL >> Redis

Yii2 + Redis come database

Redis DB può essere dichiarato come cache componente o come connessione al database o entrambi .

Quando viene dichiarato come cache componente (utilizzando yii/redis/cache ) è accessibile all'interno di quel componente per memorizzare chiave/valore coppie come mostrato qui.

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

Anche altri componenti potrebbero iniziare a usarlo per la memorizzazione nella cache di proposte come session se configurato per farlo o come yii\web\UrlManager che per impostazione predefinita proverà a memorizzare nella cache le regole URL generate in qualsiasi meccanismo di memorizzazione nella cache valido definito nella cache del file di configurazione componente come spiegato qui. Quindi è normale trovare alcuni dati archiviati diversi dai tuoi in quel caso.

Quando Redis viene dichiarato come connessione DB come nei link che hai fornito, il che significa che usando la classe yii\redis\Connection puoi estendere il tuo modello alla sua classe \yii\redis\ActiveRecord come qualsiasi altro modello ActiveRecord in Yii. L'unica differenza che conosco finora è che è necessario definire manualmente i propri attributi poiché non esiste uno schema DB da analizzare per i database NoSQL. Quindi definisci le tue regole, scenari, relazioni, eventi, ... come qualsiasi altro modello 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() {...}
    ...
}

Tutti i metodi disponibili, incluso save() , validate() , getErrors() , ... può essere trovato qui e dovrebbe essere utilizzato come qualsiasi altra classe ActiveRecord come mostrato nella guida ufficiale.