Я потратил некоторое время на изучение кэширования с помощью (redis и memcached в основном ), и мне трудно понять, где именно использовать кэширование, когда ваши данные постоянно меняются.
Возьмем, к примеру, Twitter (только что прочитал Делаем Twitter на 10000% быстрее). Как вы (или они )кэшируют свои данные, когда большой процент записей в их базе данных постоянно меняется?
Скажите, что в Твиттере есть эти модели:User
, Tweet
, Follow
, Favorite
.
Кто-то может опубликовать твит, который ретвитят один раз в день, а другой — тысячу ретвитов в день. Для этого 1000-кратного ретвита, поскольку в день около 24 * 60 == 1440
минут, это означает, что твит обновляется почти каждую минуту (, скажем, он также получил 440 избранных ). То же самое с подпиской на кого-то, Чарли Шин даже привлек 1 миллион подписчиков в Твиттере за 1 день . Кажется, в этих случаях не стоит кэшировать, но, может быть, просто потому, что я еще не достиг этого уровня.
Скажем также, что среднестатистический подписчик в Твиттере либо пишет твиты, либо подписывается на них, либо добавляет в избранное по крайней мере один раз в день. Это означает, что в наивном интро -в случае схемы rails таблица пользователей обновляется не реже одного раза в день (tweet_count
. и т. д. ). Этот случай имеет смысл для кэширования профиля пользователя.
Но что рекомендуется для приведенных выше примеров с 1000 твитов и 1 млн подписчиков, когда речь идет о кэшировании данных?
В частности, (предполагается использование memcached или redis и использование только JSON API (без кэширования страниц/фрагментов)):
20
каждый )?Чего я не понимаю, так это соотношения того, насколько данные изменяются, и того, следует ли их кэшировать (и иметь дело со сложностями, связанными с истечением срока действия кэша ). Похоже, что Твиттер может кэшировать различные пользовательские твиты и домашние твиты для каждого пользователя , но тогда аннулирование кеша каждый раз, когда кто-то добавляет в избранное/твитит/ретвитит, будет означать обновление всех этих элементов кеша (. и, возможно, кешированные списки записей ), что в какой-то момент кажется означающим, что аннулирование кеша контрпродуктивно.
Каковы рекомендуемые стратегии кэширования данных, которые сильно меняются?