2013-12-13 4 views
-1

Попытки кэшировать запрос:Кэширования выполняет DB запрос в любом случае

$cache = new CDbCacheDependency("SELECT * FROM team WHERE team_url = '$url' LIMIT 1"); 
$teamModel = Team::model()->cache(100000, $cache)->findByAttributes(array("team_url" => $url)); 

В журнале я вижу:

system.db.CDbCommand 
Querying SQL: SELECT * FROM team WHERE team_url = 'someteamname' 
LIMIT 1 
--- 
system.caching.CFileCache 
Serving "yii:dbquerymysql:host=localhost;dbname=xxx:xxx_user:SELECT 
* FROM `team` `t` WHERE `t`.`team_url`=:yp0 LIMIT 
1:a:1:{s:4:":yp0";s:14:"someteamname";}" from cache 
in 

если запрос кэшируются почему он выполняется каждый раз?

EDIT:

Я подтвердил, что запрос ударяя в базу данных.

ответ

1

Эта строка всегда будет отображаться, поскольку она записывается на след безоговорочно. См. CDbCommand:484.

+0

Право, но я смотрел на запросы, выполненные на сервере, и я видел, как он выполняется, хотя он должен был кэшироваться ... – keeg

+0

А ... подождите ... Кэш-зависимость и будущий Кэш-запрос по сути тот же. Возможно ли, что вы повторно оцениваете зависимость кэша на сервере db? – DaSourcerer

+0

hmm .. Я думаю, что вы правы ... запрос зависимости будет запускаться каждый раз вправо? – keeg

0

Потому что он показывает запрос, даже если он вытаскивает запрос из кеша. Так оно и работает.

0

Вы можете проверить, действительно ли запрос выполняется, проверяя журнал запросов mysql.

В MySQL консоли

mysql> SET GLOBAL general_log = 'ON'; 

mysql> show variables like '%general%'; 

вы получите выход как этот

+------------------+-----------------------------------------------------------+ 
| Variable_name | Value              
+------------------+-----------------------------------------------------------+ 
| general_log  | ON               
| general_log_file | /Applications/XAMPP/xamppfiles/var/mysql/Mac-mini.log 
+------------------+-----------------------------------------------------------+ 

Возьмите вкладку терминала и введите следующую команду

tail -f general_log_file name 

(например:/Applications/XAMPP /xamppfiles/var/mysql/Mac-mini.log)

Затем обновите страницу в своем приложении. Теперь вы можете увидеть, какие запросы действительно выполняются в mysql.

Смежные вопросы