2017-01-11 6 views
3

Я хочу использовать Yii2 и redis как базу данных.Yii2 + Redis as База данных

До сих пор я получил Redis ActiveRecord Class для Yii2 отсюда.

link1

link2

, но я получил проблему. ПОЧЕМУ ЭТОТ КЛАСС ОБЪЯВЛЯЕТ НИЧЕГО КАК ХАШ В РЕДИС ????

Выше того, что я не могу найти, в каком шаблоне он вставляет данные. Я добавляю одного пользователя, и он добавит пользователя в домене user:xxx и другую запись под s:user:xxx и так далее, но ни одна из тем не имеет полей, которые я определил в атрибутах! содержат только идентификаторы.

Я знаю, что база данных типа ключевого слова и СУБД различны, а также знают, как можно реализовать отношение, подобное записи в Redis, но я не знаю, почему он будет сохранять только идентификаторы.

Я пока не нашел примера использования redis ActiveRecords.

Существует один здесь, и его недостаточно.

Итак, вот мое основное предположение: как добавить данные в redis Использование активныхRecords и разных типов данных В YII2?

И если это невозможно с помощью ActiveRecords, то лучшее решение? в этом случае

ДРУГОЙ ВОПРОС: можно ли использовать модель и написать мою собственную модель :: save() метод? и каково наилучшее решение для проверки данных с такой скоростью?

На самом деле я хочу сделать телеграмму ботом, поэтому я должен получать сообщения и отправлять их в RabitMQ и получать данные у рабочего, выполнять процесс и сохранять результаты в Redis и, наконец, отправлять ответ пользователю через RabitMQ.

Так что мне нужно сделать много валидаций И ​​конечно же авторизации и сохранить и выбрать и диапазон и сохранить Устанавливает списки и это, и что ....

Я хочу хороший способ, чтобы сделать модель или активную запись или правильное решение для проверки, сохранения и извлечения данных в Redis и Yii2.

+0

Пожалуйста, помогите .... –

ответ

4

Redis DB может быть объявлен как кэша компонента или как подключение к базе данных или как.

Когда он объявлен как кэша компоненты (с помощью yii/redis/cache) он доступен в пределах этого компонента для хранения ключа/значения пара 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 
); 

Также другие компоненты могут начать использовать его для кэширования предлагает как session если настроен сделать так или как yii\web\UrlManager, который по умолчанию будет пытаться кэшировать сгенерированные правила URL в любой механизм действует кэширование, определенных в конфигурационный файл-х cache как объяснено here. Таким образом, в этом случае можно найти некоторые сохраненные данные, отличные от ваших.

Когда Redis объявлен как подключение к DB как в звеньях вы указали, что означает, используя yii\redis\Connection класс, который вы можете сделать вашу модель расширяет свой \yii\redis\ActiveRecord класс, как и любой другой модели ActiveRecord в Yii. Единственная разница, которую я знаю до сих пор, заключается в том, что вам нужно определить свои атрибуты вручную, поскольку нет схемы БД для анализа баз данных NoSQL. Тогда просто определить свои правила, сценарии, отношения, события, ... как и любой другой модели 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() {...} 
    ... 
} 

Все доступные методы, включая save(), validate(), getErrors() ... можно было бы узнать here и должны использоваться как любой другой класс ActiveRecord as shown in the official guide.

+0

спасибо, так что нет способа установить атрибуты или типы данных для других вещей, таких как списки или наборы? в предопределенных методах. могу ли я определить свой собственный метод сохранения и изменить его функциональность? но тогда, проверка является проблемой, будет ли она работать, если я переопределяю метод сохранения? –

+0

Да, вы всегда можете переопределить исходный [save()] (https://github.com/yiisoft/yii2/blob/master/framework/db/BaseActiveRecord.php#L632), унаследованный от ** BaseActiveRecord ** внутри вашей модели , Но вам просто нужно переопределить методы нижнего уровня, чтобы лучше понять, как это работает, посмотрите на yii/redis/ActiveRecord [исходный код] (https://github.com/yiisoft/yii2-redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/ActiveRecord .php). вы всегда можете переопределять эти методы или вводить новые в своей модели. '$ db-> executeCommand ($ command)' является основной функцией здесь для связи с REDIS ... –

+0

... и по умолчанию [список команд можно увидеть здесь] (https://github.com/yiisoft/yii2- redis/blob/a920547708c4a7091896923abc2499bc8c1c0a3b/Connection.php # L90) –