72
Умное кэширование в Rails

Умное кэширование в Rails

  • Upload
    -

  • View
    295

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Умное кэширование в Rails

Умное кэширование в Rails

Page 2: Умное кэширование в Rails

?

Page 3: Умное кэширование в Rails

«Premature optimizationis the root of all evil»

Donald Knuth

Page 4: Умное кэширование в Rails

Два вида кэширования:

Page 5: Умное кэширование в Rails

Вредное

Page 6: Умное кэширование в Rails

Жизненно необходимое

Page 7: Умное кэширование в Rails

Когда нужно кэшировать?

Page 8: Умное кэширование в Rails

Если за время жизникэш будет прочтен

более 1 раза

Page 9: Умное кэширование в Rails

Если работа с кэшем экономит

ресурсы сервера

Page 10: Умное кэширование в Rails

Что кэшировать?

Page 11: Умное кэширование в Rails

«Горячие» данные

Page 12: Умное кэширование в Rails

Результаты сложныхили долгих операций

Page 13: Умное кэширование в Rails

Части ответа сервера

Page 14: Умное кэширование в Rails

Ответ сервера целиком

Page 15: Умное кэширование в Rails

Где хранить кэш?

Page 16: Умное кэширование в Rails

Память приложения

● «Горячие» данные● Результаты операций

Page 17: Умное кэширование в Rails

Memcached

● «Горячие» данные● Результаты операций● Фрагменты ответа

Page 18: Умное кэширование в Rails

База данных :)

● «Горячие» данные● Результаты операций

Page 19: Умное кэширование в Rails

Redis

● «Горячие» данные● Результаты операций

Page 20: Умное кэширование в Rails

Файловая система

● Результаты операций● Фрагменты ответа● Ответ целиком

Page 21: Умное кэширование в Rails

Кэширующий proxy-сервер

● Фрагменты ответа● Ответ целиком

Page 22: Умное кэширование в Rails

Например...

Page 23: Умное кэширование в Rails

«Горячие» данные

Page 24: Умное кэширование в Rails

Muuviz

Page 25: Умное кэширование в Rails

Ответы пользователей

Статистика

Вопросы пользователям

Page 26: Умное кэширование в Rails

~ 10.000 записей

SQL — 300msRedis — 20ms

Переменная — 0ms

Page 27: Умное кэширование в Rails

~ 10.000 записей

SQL — 300msRedis — 20ms

Переменная — 0ms

Page 28: Умное кэширование в Rails

Результаты операций

Page 29: Умное кэширование в Rails

Railorz RPG Engine

Page 30: Умное кэширование в Rails

Character Inventory Item

Item Attack DefenceSword 3Bow 2Shield 1Armor 3

5 4

Page 31: Умное кэширование в Rails

На каждого игрока:

В среднем — 10 предметов

Максимум (сейчас) — 128

Page 32: Умное кэширование в Rails

Считать каждый раз — безумно дорого и долго

Page 33: Умное кэширование в Rails

Выход:

serialize :inventory_effects

Page 34: Умное кэширование в Rails

или

class InventoryEffect < AR::Bbelongs_to :character

end

Page 35: Умное кэширование в Rails

Лучший выбор:

Зависит от задачи

Page 36: Умное кэширование в Rails

Фрагменты ответа

Page 37: Умное кэширование в Rails

<% cache 'disisdakey' do %> ...неприлично медленная

операция...<% end %>

Page 38: Умное кэширование в Rails

Лучший выбор:memcached

Page 39: Умное кэширование в Rails

@user.cache_key

Page 40: Умное кэширование в Rails

'users/9-20101027173032'

Page 41: Умное кэширование в Rails

@user.save!

Page 42: Умное кэширование в Rails

'users/9-20101027198122'

Page 43: Умное кэширование в Rails

Кэш «протухает» автоматически

Page 44: Умное кэширование в Rails

Не только для моделей

Page 45: Умное кэширование в Rails

def daily_cache_key 'my_key/%s' % Time.now.end_of_day.to_i

end

Page 46: Умное кэширование в Rails

cache(daily_cache_key)

Page 47: Умное кэширование в Rails

Ответ целиком

Page 48: Умное кэширование в Rails

class MyController < AC::B caches_page :show

end

Page 49: Умное кэширование в Rails

Nginx

location / { try_files $uri @passenger;

} location @passenger { passenger_enabled on;

}

Page 50: Умное кэширование в Rails

Проблемы

Page 51: Умное кэширование в Rails

Выбор хранилища

Page 52: Умное кэширование в Rails

Нет «серебрянной пули»

Page 53: Умное кэширование в Rails

Контентные проекты:

● memcached● База данных● Файловая система

Page 54: Умное кэширование в Rails

Игровые приложения:

● memcached● Redis● Память приложения

Page 55: Умное кэширование в Rails

«Протухание» кэша

Page 56: Умное кэширование в Rails

« There are only two hard things in Computer Science: cache invalidation and naming things »

Phil Karlton

Page 57: Умное кэширование в Rails

«Протухание» кэша

Page 58: Умное кэширование в Rails

Память приложения

Page 59: Умное кэширование в Rails
Page 60: Умное кэширование в Rails

База данных

Page 61: Умное кэширование в Rails

before_save :update_cache

def update_cache self.cache = {…}

end

Page 62: Умное кэширование в Rails

Memcached

Page 63: Умное кэширование в Rails

Автоматическое «протухание»

Page 64: Умное кэширование в Rails

Можем удалять только зная ключ

Page 65: Умное кэширование в Rails

Redis

Page 66: Умное кэширование в Rails

Redis — это не кэш!

Это хранилище данных

Page 67: Умное кэширование в Rails

Удаление ключей по маске

Page 68: Умное кэширование в Rails

Файловая система

Page 69: Умное кэширование в Rails

Observer

Page 70: Умное кэширование в Rails

Удаление по маске

Page 71: Умное кэширование в Rails

Страшные истории

Page 72: Умное кэширование в Rails

Вопросы?

Алексей Дмитриев

[email protected]://railorz.ru@dekart1234