Итак, я пытаюсь получить работу memcache на моем сайте с Yii 2. У меня есть кеширование, работающее на материал схемы базы данных, но, похоже, это не работает для ActiveRecord запросы.Работа с memcache с Yii и ActiveRecords
Это мой конфиг для БД:
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=127.0.0.1;dbname=db_name',
'username' => 'user_name',
'password' => 'password',
'charset' => 'utf8',
'enableQueryCache' => true,
'queryCache' => 'cache',
'queryCacheDuration' => 600,
'enableSchemaCache' => true,
'schemaCache' => 'cache',
'schemaCacheDuration' => 3600,
]
По словам гида (http://www.yiiframework.com/doc-2.0/guide-caching-data.htm), это должно быть достаточно, чтобы получить глобальное кэширование работает. Насколько я понимаю, если эти переменные установлены, то он должен кэшировать все запросы за указанное время или мне еще нужно специально позвонить, если со следующим?
$result = Customer::getDb()->cache(function ($db) {
return Customer::find()->where(['id' => 1])->one();
});
Я пошел рыть в кодовую базу, чтобы увидеть, что происходит, и это похоже на \yii\db\Connection::getQueryCacheInfo()
был изменен, чтобы начать следующий вид: он будет работать отлично:
public function getQueryCacheInfo($duration, $dependency)
{
if (!$this->enableQueryCache) {
return null;
}
$duration = (isset($duration)) ? $duration : $this->queryCacheDuration;
$dependency = (isset($dependency)) ? $dependency : $this->queryCache;
Могу ли я сделать что-то Неправильно здесь? Почему я не могу использовать memcache по умолчанию для всех запросов?
Благодаря
FYI: 'return Customer :: findOne (1);' также будет работать. – Blizz
@Blizz, да, это была только копия-паста из документа Yii. – SynackSA