将会话数据存储在数据库和内存缓存中


Storing session data in database AND memcache

Google App Engine for PHP 将会话数据存储在 memcache 中,这又好又快(而且便宜(,但来自 memcache 的会话数据似乎在 8-10 分钟后清除,这比我需要的要少得多。遵循谷歌的建议,

。App Engine memcache 中的数据可能会定期刷新,这意味着 任何会话信息都将丢失。对于寿命较长的会话,它 可能最好使用替代存储服务,例如云 .SQL。(https://developers.google.com/appengine/docs/php/#PHP_Sessions(

我正在使用Zend_Session_SaveHandler_DbTable将会话数据存储在数据库中。但是,据我所知,这样做的缺点是必须在每个页面请求中访问数据库(延迟和成本都会增加(。

我的问题

有没有办法将会话数据持久保存在数据库中,但也使用 memcache,这样数据库就不会每次都被命中?(我正在使用Zend框架1.12(

当然。只需指定一个保存到两者的自定义session_set_save_handler,并首先检查 memcache 的负载,如果未找到,则回退到数据库。

现在,会话仍然需要保存到两者(否则在清除 memcache 时可能会丢失数据(,因此成本可能会保持相似,但它会减少延迟,因为会话保存是在页面呈现之后,因此不包括在用户可见的延迟中。它还将减少加载会话所需的读取次数。