| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Кеширование отдельных объектов |
| Автор: qsajeal 5.7.2009, 11:10 |
| Доброго времени суток!!! Есть проблема. Допусти у нас выводится список топиков. Эти топики связаны с другими объектами (пользователи, их автары, блоги и т.д.) Если мы выберем скажем 50 топиков одним запросом с кучей джоинов и закешируем его, то, например, когда у нас изменится аватар одного из пользователей, то нам прийедтся сбрасывать кеш для ВСЕХ подобных пачек с топиками. Вопрос как этого избежать? Как построить кеширование, чтобы при изменении аватара - сбрасывался кеш только топиков этого автора? Я предлагал такое решение: сначала выбираются айдишники этих объектов, а потом в соответствии с этим списком выбираются объекты поштучно. Т.е. 50+1 запрос. Если выбирать только ID, то наверное можно добиться их поиска только по индексу (covering), хотя это сложно тоже достаточно... А как ВЫ решаете эту проблему? |
| Автор: qsajeal 5.7.2009, 17:25 |
| >как организуется кеш? Ну я уже много способов перепробовал, вы расскажите лучше как по вашему нужно его организовывать? >в течене какого времени он живет - на время формирования одной страницы или ограниченное время? Никакого. Кеш вечен. Кеш должен сбрасываться при изменении объекта только, либо пачки объектов. Я вот кроме как способа с кешированием отдельных объектов ничего придумать не могу. Т.е. Кеш пачки (с айдишниками объектов)+ много кешей каждого из объектов. Но это не кошерно как-то 100 запросов в мемкеш на 100 комментов, поэтому и спрашиваю вас. |
| Автор: skyboy 6.7.2009, 11:38 |
о, значит, memcache. в таком случае(теоретическое предположение - с memcache я не работал), можно использовать механизм тегов. и всему, что кешируется для объекта "пользователь #100" задавать соответствующий тег. И при изменении информации сбрасывать кеш только для элементов с соответствующим тегом. |
| Автор: qsajeal 6.7.2009, 13:44 |
| Мда уж... Если вы внимательно прочтитаете мой вопрос, то поймете какую глупость написали... (извините за резкость) Теги не обязательно для мемкеша только. Их можно сделать и для файлов и APC и чего хочешь. Это лишь отдельные key-value пары с информацией. Здесь вопрос совсем в другом. Чтобы сбросить пачку комментов для данного топика нам надо сделать к нему 100 тегов всех юзеров, 100 тегов всех аватаров и т.д. Ну поняли? Чтоб не сбрасывать кеш для комментов ВСЕХ топиков,а тольк для топиков, у которых комменты добавил данный юзер, изменивший аватар. А в реальных проектах таких связей ОЧЕНЬ много (здесь только для примера комменты) Добавлено через 5 минут и 26 секунд Надеюсь почему 200 тегов к одному кешу - зло - вам понятно. |