sql >> Base de Datos >  >> NoSQL >> Redis

Yii2 + Redis como base de datos

Redis DB se puede declarar como un caché componente o como una conexión de base de datos o ambos .

Cuando se declara como caché componente (usando el yii/redis/cache ) es accesible dentro de ese componente para almacenar clave/valor pares como se muestra aquí.

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

También otros componentes pueden comenzar a usarlo para almacenar en caché propuestas como session si está configurado para hacerlo o le gusta el yii\web\UrlManager que por defecto intentará almacenar en caché las reglas de URL generadas en cualquier mecanismo de almacenamiento en caché válido definido en el cache del archivo de configuración componente como se explica aquí. Por lo tanto, es normal encontrar algunos datos almacenados que no sean los suyos en ese caso.

Cuando Redis se declara como una conexión de base de datos como en los enlaces que proporcionó, lo que significa que al usar la clase yii\redis\Connection puede hacer que su modelo extienda su clase \yii\redis\ActiveRecord como cualquier otro modelo ActiveRecord en Yii. La única diferencia que conozco hasta ahora es que debe definir sus atributos manualmente, ya que no hay un esquema de base de datos para analizar las bases de datos NoSQL. Luego simplemente defina sus reglas, escenarios, relaciones, eventos, ... como cualquier otro modelo de 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() {...}
    ...
}

Todos los métodos disponibles, incluido save() , validate() , getErrors() , ... se pueden encontrar aquí y se deben usar como cualquier otra clase de ActiveRecord, como se muestra en la guía oficial.