2013-11-28 4 views
0

Google App Engine для PHP хранит данные сеанса в memcache, что является хорошим и быстрым (и дешевым), но данные сеанса из memcache, по-видимому, очищаются через 8-10 минут, что значительно меньше, чем мне нужно. Следуя советам Google,Хранение данных сеанса в базе данных И memcache

... данные в memcache App Engine могут периодически перерисоваться, то есть любая информация о сеансе будет потеряна. Для более продолжительных сеансов может быть предпочтительным использовать альтернативную службу хранения, такую ​​как Cloud SQL. (https://developers.google.com/appengine/docs/php/#PHP_Sessions)

Я использую Zend_Session_SaveHandler_DbTable для хранения данных сеанса в базе данных. Тем не менее, недостатком этого, насколько я могу судить, является доступ к базе данных каждый запрос на страницу (с задержкой и стоимостью как вверх).

мой вопрос

Есть ли способ сохраняться данные сессии в базе данных, но и использовать кэш памяти, поэтому база данных не ударил каждый раз? (Я использую Zend Framework 1.12)

ответ

2

Несомненно. Просто укажите пользовательский session_set_save_handler, который сохраняет оба, и сначала проверяет memcache для загрузки, возвращаясь к базе данных, если он не найден.

Теперь сеанс по-прежнему должен быть сохранен для обоих (в противном случае вы можете потерять данные при сбросе memcache), поэтому стоимость, вероятно, останется похожей, но это уменьшит задержку, так как сеанс сохраняется после того, как страница визуализируется и, таким образом, не включается в видимость пользователя. Это также уменьшит количество чтений, необходимых для загрузки сеанса.

+0

Ах! Я не думал о необходимости фактически экономить каждый раз ... конечно ... Спасибо! –

Смежные вопросы