Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Yii2 + Redis como banco de dados


Redis DB pode ser declarado como um cache componente ou como uma conexão de banco de dados ou ambos .

Quando é declarado como um cache componente (usando o yii/redis/cache ) é acessível dentro desse componente para armazenar chave/valor pares como mostrado aqui.
$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
);

Além disso, outros componentes podem começar a usá-lo para fins de armazenamento em cache, como session se configurado para isso ou como o yii\web\UrlManager que, por padrão, tentará armazenar em cache as regras de URL geradas em qualquer mecanismo de cache válido definido no cache do arquivo de configuração componente como explicado aqui. Portanto, é normal encontrar alguns dados armazenados que não sejam os seus nesse caso.

Quando o Redis é declarado como uma conexão de banco de dados como nos links que você forneceu, o que significa que usando a classe yii\redis\Connection você pode fazer seu modelo estender sua classe \yii\redis\ActiveRecord como qualquer outro modelo ActiveRecord no Yii. A única diferença que conheço até agora é que você precisa definir seus atributos manualmente, pois não há esquema de banco de dados para analisar bancos de dados NoSQL. Depois é só definir suas regras, cenários, relações, eventos,... como qualquer outro modelo 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 os métodos disponíveis, incluindo save() , validate() , getErrors() , ... pode ser encontrado aqui e deve ser usado como qualquer outra classe ActiveRecord conforme mostrado no guia oficial.