soines
Новичок
Правильное кеширование
Задался целью написать кэш для своего движка, но уперся в стенку.
Есть что-то вроде ORM с примерно таким интерфейсом:
Закэшировать статью в таком случае легко, просто добавляем в тот-же memcache данные с ключом article:5, при редактировании - дропаем кэш или заменяем его ( это в принципе неважно, интерфейс все равно остается такой же ).
Вся загвоздка заключается в том, что нам, например, нужно получить все статьи из определенной категории.
Но как кэшировать в данном случае? Как вариант при запросе вытаскивать не все поля, а только удовлетворяющие нас id`шники, потом смотреть есть ли данные в кэше или нет. Но хорошо если они есть в кэше, то у нас будет 1 запрос, а если нету, то 1+n запросов, что не есть гуд.
Другой вариант, что при данном поиске вытаскивать все данные из базы, но в кеш класть отдельно каждую статью article:1, article:2 и т.д. и создавать записать вида article#category_id:10, где будет массив ( 1, 2, и т.д. ) тогда при поиске мы получим id необходимых нам статей и потом будем проверять есть ли они в кэше или нет. Но здесь есть другая проблема: при редактировании заголовка статьи мы просто обновим её, поиск по категории будет актуальным. Но если мы захотим сменить категорию, то как мы узнаем что нужно дропнуть запись article#category_id:10?
Вполне возможно, что я просто жутко туплю и иду в абсолютно неправильном направление. Хотелось бы услышать ваше мнение.
Задался целью написать кэш для своего движка, но уперся в стенку.
Есть что-то вроде ORM с примерно таким интерфейсом:
PHP:
$id = 5;
$article = ORM::factory( 'article' );
$article->find( $id );
Вся загвоздка заключается в том, что нам, например, нужно получить все статьи из определенной категории.
PHP:
$category = 10;
$articles = ORM::factory( 'article' );
$articles->find( $category, 'category_id' );
Другой вариант, что при данном поиске вытаскивать все данные из базы, но в кеш класть отдельно каждую статью article:1, article:2 и т.д. и создавать записать вида article#category_id:10, где будет массив ( 1, 2, и т.д. ) тогда при поиске мы получим id необходимых нам статей и потом будем проверять есть ли они в кэше или нет. Но здесь есть другая проблема: при редактировании заголовка статьи мы просто обновим её, поиск по категории будет актуальным. Но если мы захотим сменить категорию, то как мы узнаем что нужно дропнуть запись article#category_id:10?
Вполне возможно, что я просто жутко туплю и иду в абсолютно неправильном направление. Хотелось бы услышать ваше мнение.