Zend_Session_SaveHandler_DbTableを使用して、セッションをテーブルに保存しています
私のプロファイラーは、各ページのリクエストでzendが行うことを教えてくれます:
#クエリ時間
(1)接続0.0032038688659668
(2)DESCRIBE session
0.0041539669036865
(3)SELECT session
。* FROM session
WHERE(((session
。session_id
= '7nnan8ltd6h64sigs6dlkicvh0'AND session
。save_path
=''AND session
。name
='PHPSESSID')))0.00057697296142578
合計時間:0.008秒
他のテーブルでクエリを実行する場合、zendはそれらを1回(そのテーブルに初めてアクセスするときに)DESCRIBEします。次に、ページを更新すると、Describeなしでクエリのみが実行され、セッションテーブルではすべてのページでDESCRIBEが実行されます(認証を使用する...)
セッションテーブルのメタデータのみをキャッシュするにはどうすればよいですか?
私は現在これを使用しています
class Gestionale_Application_Resource_Cache extends Zend_Application_Resource_ResourceAbstract{
public function init ()
{
$options = $this->getOptions();
// Get a Zend_Cache_Core object
//valori che vengono presi dal file di configurazione
$cache = Zend_Cache::factory(
$options['frontEnd'],
$options['backEnd'],
$options['frontEndOptions'],
$options['backEndOptions']);
Zend_Registry::set('cache', $cache);
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);//per mettere in cache la meta-info
return $cache;
}
これは私の設定ファイルです
...
;cache stuff
resources.cache.frontEnd = core
resources.cache.backEnd = file
resources.cache.frontEndOptions.lifetime = 1200 ; in secondi
resources.cache.frontEndOptions.automatic_serialization = true
resources.cache.backEndOptions.lifetime = 3600 ; in secondi
resources.cache.backEndOptions.cache_dir = APPLICATION_PATH "/../cache"
pluginPaths.Gestionale_Application_Resource = APPLICATION_PATH "/../library/Gestionale/Application/Resource"
;;fine cache stuff
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.db.params.charset = "utf8"
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.dbname = "gestionale"
resources.db.isDefaultTableAdapter = true
autoloaderNamespaces[] = "Gestionale_";serve per caricare il plugin di sotto quando si usa anche ZFdebug
resources.frontController.plugins.acl = "Gestionale_Controller_Plugin_Acl"
resources.db.params.profiler = true
...
これは私のセッションテーブルです
CREATE TABLE IF NOT EXISTS `session` (
`session_id` char(32) NOT NULL,
`save_path` varchar(32) NOT NULL,
`name` varchar(32) NOT NULL DEFAULT '',
`modified` int(11) DEFAULT NULL,
`lifetime` int(11) DEFAULT NULL,
`session_data` text,
PRIMARY KEY (`session_id`,`save_path`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
ありがとう