Странности с memcached

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Странности с memcached

Сообщение vitalik1183 »

В конфиге:

Код: Выделить всё

'cache' => [
            'class' => 'yii\caching\MemCache',
            'useMemcached' => true
        ],
 
В контроллере:

Код: Выделить всё

if (!$uidDataProviderQuery = \Yii::$app->cache->get('uidDataProviderQuery')) {

            $uidDataProviderQuery = StatsSearch::find()
                ->with(['uidCommentContent'])
                ->excluded()
                ->select('COUNT(`uid`) AS count, `uid`')
                ->groupBy('uid')
                ->orderBy(['count' => SORT_DESC])
                ->limit(\Yii::$app->config->get('GENERAL.ACTIVE_PER_PAGE'));

            \Yii::$app->cache->set('uidDataProviderQuery', $uidDataProviderQuery, 3600);
        }

        $uidDataProvider = new ActiveDataProvider([
            'query' => $uidDataProviderQuery,
            'pagination' => false,
        ]);
 
Вроде как кешируется, но судя по времени работы запросов к бд на основе дебаг-панель кеш никак не час держится в памяти. Например загружаю страницу. пишет 15 запросов и 220 милисекунд выполнения, обновляю - пишет 3 запроса и 2мс. Все вроде чики чики, захожу через 5 минут - опять 220мс, кеш скинулся чтоли? Или по дебаг панели это не смотреть вообще? Откройте глаза кто в теме, чота я малеха запутался.
Yii2!
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

Если подписать например ->all() и переделать без провайдера - вроде то что нада. Как быть с провайдером?
Yii2!
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Странности с memcached

Сообщение astronin »

хватает ли память в кеше? он может очищаться и раньше времени
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

128 метров стоит. Ну там вся база 20 метров весит. При самом хутшем раскладе все влезет неоднократно!
phpMemcachedAdmin пишет занято 6 метров!
Yii2!
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

Неужели никто не кешировал сложные выборки для грида?
Yii2!
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Странности с memcached

Сообщение astronin »

а вообще не понятно, зачем вы пишите провайдер в кеш, там у вас будет только сериализованный объект, если вам нужна выборка из базы, то надо в кеш хранить то, что выдает метод getModels()
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

Код: Выделить всё

if (!$uidDataProviderCache = \Yii::$app->cache->get('uidDataProviderCache')) {

            $uidDataProvider = new ActiveDataProvider([
                'query' => StatsSearch::find()
                    ->with(['ipCommentContent'])
                    ->excluded()
                    ->select('COUNT(`uid`) AS count, `uid`')
                    ->groupBy('uid')
                    ->orderBy(['count' => SORT_DESC])
                    ->limit(\Yii::$app->config->get('GENERAL.ACTIVE_PER_PAGE')),
                'pagination' => false,
            ]);

            $uidDataProviderCache = $uidDataProvider->getModels();

            \Yii::$app->cache->set('uidDataProviderCache', $uidDataProviderCache, 3600);
        }
На выходе:
Serialization of 'Closure' is not allowed
https://github.com/yiisoft/yii2/blob/ma ... e.php#L196
Последний раз редактировалось vitalik1183 2015.03.02, 11:00, всего редактировалось 1 раз.
Yii2!
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Странности с memcached

Сообщение lynicidn »

vitalik1183 писал(а):Если подписать например ->all() и переделать без провайдера - вроде то что нада. Как быть с провайдером?
попробуй

Код: Выделить всё

'allModels' => Model::find()->all()
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

Если Вы про ArrayDataProvider то вариант работает, НО тогда мы ломаемся на:

Код: Выделить всё

if (!is_null($data->ipCommentContent) && strlen($data->ipCommentContent->comment) > 3) {
в ячейке грида ибо

Код: Выделить всё

$ipCommentContent = NULL; 
Yii2!
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Странности с memcached

Сообщение astronin »

вообще лучше не городить велосипедов и сделать кеширование через встроенные метод кеширования запросов
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

Предлагаете отказаться от AR и переписать все на чистые запросы?
А какой это велосипед? Простая задача, как закешировать выборку, чтобы ее можно было юзать впоследствии в дата-провайдере?
Yii2!
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

Вопщем как сделал я - кеширование работает!!!
Вопрос, почему обнуляется кеш при изменении модели? От чего это может зависеть? В моем случае - вставке данных.
Yii2!
astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Странности с memcached

Сообщение astronin »

предлагаю использовать готовые методы, вроде это
http://www.yiiframework.com/doc-2.0/gui ... ry-caching
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

Как вы выборку с all запихаете в дата-провайдер?
У меня там в модели есть scopes и прочие вспомогательные методы, Вы предлагаете переписать 3 модели на чистый скл ради кеширования? Я думаю есть нативное решение, к тому же как выяснилось - кеш работает, но почему то сбрасывается при вставке данных!
Yii2!
sanex3339
Сообщения: 66
Зарегистрирован: 2014.10.16, 20:30

Re: Странности с memcached

Сообщение sanex3339 »

vitalik1183, покажите, пожалуйста ваш итоговый код, который работает. Мне тоже надо кешировать выборку датапровайдера.
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

В 1-ом сообщении.
Yii2!
sanex3339
Сообщения: 66
Зарегистрирован: 2014.10.16, 20:30

Re: Странности с memcached

Сообщение sanex3339 »

Ну я вот сделал, почти так же как у вас, у меня не работает, т.е. в кеш кладется, но выборку не ускоряет, по логике это правильно, т.к. мы в кеш не кладем результат выборки, а только запрос в виде объекта. Но мне надо тоже именно с activedataprovider'ом подружить все это дело и если добавить в конце ->all(), то работать не будет.

Код: Выделить всё

if (!$cachedQuery = Yii::$app->cache->get('query')) {
            $cachedQuery = $this->model->find()->where($this->where)->limit($this->limit)->offset($this->offset);
            Yii::$app->cache->set('query', $cachedQuery, 15);
        }
        
Ну и дальше в датапровайдер кладем
Аватара пользователя
vitalik1183
Сообщения: 1675
Зарегистрирован: 2014.07.01, 08:42

Re: Странности с memcached

Сообщение vitalik1183 »

ну дык я уже 2 рабочих дня пытаюсь разгадать загадку :)
Yii2!
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Странности с memcached

Сообщение lynicidn »

astronin
Сообщения: 606
Зарегистрирован: 2012.01.30, 17:46

Re: Странности с memcached

Сообщение astronin »

vitalik1183 писал(а):Как вы выборку с all запихаете в дата-провайдер?
У меня там в модели есть scopes и прочие вспомогательные методы, Вы предлагаете переписать 3 модели на чистый скл ради кеширования? Я думаю есть нативное решение, к тому же как выяснилось - кеш работает, но почему то сбрасывается при вставке данных!
не пойму, что сложного?:
http://www.yiiframework.com/doc-2.0/gui ... igurations
читаем мануалы
Ответить