Аннулирование кэша и всех ссылок - PullRequest
1 голос
/ 14 марта 2012

Я нахожу статью под названием How Basecamp Next got to be so damn fast without using much client-side UI из 37 сигналов ( здесь ), но не могу понять, как работает аннулирование кэша.

скажем:

iиметь post объект в виде массива, например:

$post = array(
    'id' => 3232,
    'title' => 'Test Post'
)

Я сохраняю его в кеше с ключом кеша с именем: post-3232.И у меня есть массив latest posts, подобный этому:

$latest = array(
    array(
        'id' => 3232,
        'title' => 'Test Post'
    ),
    array(
        'id' => 3233,
        'title' => 'Test Post 1'
    ),
    array(
        'id' => 3234,
        'title' => 'Test Post 2'
    )
)

Я сохраняю этот список в кеше с ключом кеша: latest-posts-140320121947

Как мой список последних сообщений знает, есликакие-либо сообщения удалены, изменены или добавлено новое сообщение?Я не могу понять это из статьи.может быть, я смогу найти какую-нибудь помощь от StackOverflow.

Ответы [ 2 ]

0 голосов
/ 18 марта 2012

Как мой список последних сообщений может узнать, были ли удалены, изменены или добавлены новые сообщения?

Проще говоря, они не могут - проблема с кэшированием заключается в том, что вы сознательно обслуживаете старые данные. Иногда это нормально, конечно.

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

Но если у вас есть кеш, который содержит большой объем данных (скажем, кэшированные версии разбитого на страницы экрана, такие как Последние сообщения , по одному элементу кэша на страницу), то он часто слишком неудобен / медлен обновить одну строку таблицы в нем. Если это так, то может быть лучше обслуживать этот экран без кэширования. Но если «Последние сообщения» содержат только последние 10 элементов, аннулируйте весь кеш для этого и перерисовайте его.

Вы можете иметь кэшированную копию этой страницы, содержащую кэшированный элемент для каждой строки таблицы (то есть несколько кэшированных строк в большой кэшированной таблице); тем не менее, чем меньше ваша область кэша, тем меньше вы получаете выгоды. Но это, безусловно, облегчит недействительность только одной строки.

0 голосов
/ 14 марта 2012

По комментариям:

Сакураба, он поддерживается в Active Record.belongs_to :project, touch: true означает, что проект будет автоматически обновлять свой updated_at при обновлении списка задач.

Вам необходимо внедрить этот тип системы зависимостей в вашей собственной установке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...