Консультация № 173856
31.10.2009, 11:32
25.00 руб.
0 3 1
Здравствуйте.
Скажите пожалуйста как осуществить кэширование запросов к базе данных ?
Например есть таблица users
в ней поля : id, nic, name,email
Как надо составить запрос на sql или может использовать php что бы данные кэшировались ? Используется: апач , MySQL-5 -й версии.
Спасибо.

Обсуждение

Неизвестный
31.10.2009, 16:57
общий
Я не использую фреймворк и не могу на него уже перейти - это наверное не совсем подходит, я не понял за счёт чего осуществляется кэширование и где хранится этот кэш в памяти или файле - лучше бы конечно простой пример с запросом к таблице user (типа select*from user как этот запрос например кэшировать?)
Неизвестный
31.10.2009, 21:29
общий
это ответ
Здравствуйте, Dima1967.
Советник F®ost меня опередил - я сам хотел предложить этот вариант, потому как использую его очень активно - и он помогает, реально ускоряет работу сайта.
Что касается хранилища, то на этот счет у Zend_Cache существуют адаптеры. Самый простой случай - файл в виде хранилища.

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

После сохранения результата запроса в кэше алгоритм действий такой: проверяете наличие чего-либо в кэше под уникальным идентификатором, и если кэш по каким-либо причинам пуст(например, устарел и очистился) или просто устарел и его данные более не актуальны, выполняете обращение к базе данных, после чего сохраняете результат в кэше под новым идентификатором. Если же в кэше есть актуальные данные, выдергиваете их, выполняете их десериализацию с помощью функции unserialize, и подставляете в свой код. Все довольно просто. В Zend Framework кэширование осуществляется по такому принципу, и я Вам, по сути, рассказал, как оно там происходит. Но оно правильно происходит, и нет особого смысла огород городить! С помощью Zend_Cache Вы можете кэшировать любые данные. И весь остальной фреймворк использовать для этого, по-видимому, не обязательно, хотя я и не пробовал, потому что я как раз использую весь ZF.

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

С уважением, Товарищ Бородин
5
Неизвестный
31.10.2009, 21:32
общий
Dima1967:
В качестве идентификатора могу предложить результат применения функции md5 к самому запросу + дата кэширования данных. На мой взгляд, это будет вполне приемлемо.
Форма ответа