кеширование yii и диванная база

нужна помощь, чтобы прояснить концепцию.

$sql = 'SELECT * FROM tbl_post LIMIT 20'; 
$dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post'); 
$rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();

1.если кэш содержит запись, проиндексированную оператором SQL.

2.если зависимость не изменилась (максимальное значение update_time такое же, как при сохранении результата запроса в кэше).

Я не понимаю, что означает приведенное выше объяснение. Особенно второй в отношении максимального времени обновления. Пожалуйста, поправьте меня, если я ошибаюсь.

В таблице tbl_post есть столбец update_time. Всякий раз, когда обновляется строка, время обновления также обновляется. Если сообщение извлекается из кеша, CDbCacheDependency сначала запросит в базе данных MAX(update_time)? Какова цель этого и как именно это работает при обновлении кеша?

Другой вопрос касается memcache. Я понимаю, что можно кластеризовать серверы memcache. Скажем, у меня есть следующие конфигурации.

1 сервер memcache в США. 1 сервер memcache в Европе.

Мой веб-сайт Yii использует кластер из 2 узлов. memcache разделит кэширование между двумя узлами.

1.user A извлекает сообщение из базы данных и кэширует его. предположим (123,$model) в узле США.

2. пользователь B хочет получить тот же пост из Европы. Будет ли ищущий ключ 123 находит кеш? Имеет ли значение, находятся ли оба пользователя в США или Европе?

Спасибо!!


person twb    schedule 11.07.2012    source источник


Ответы (1)


После первого запуска - компонент БД ставит егоs result into cache. Also it puts there result of dependency-query (max update time in your case). Then when your try to get data, db component executs dependency query and compare it with cached one. If dependency is unchanged (there is no new postс) получает результаты запроса из кеша, в противном случае выполняет запрос.

person sl4mmer    schedule 11.07.2012
comment
Таким образом, зависимость помогает сохранить запрос БД за счет выполнения другого короткого запроса каждый раз? Я думаю, что есть значительная экономия, если запрос сложный, но в остальном зависимость не очень помогает? Есть ли лучший способ избавиться от запроса зависимости? - person twb; 12.07.2012
comment
В большинстве случаев вам не нужна зависимость. Вы должны использовать его только тогда, когда вам действительно нужны свежие данные - person sl4mmer; 12.07.2012
comment
Кстати - если мой ответ был полезен, вы можете проголосовать, или отметить его как решение - person sl4mmer; 12.07.2012