http://zendcoding.com/how-to-use-memcached-in-the-zend-framework
http://lenss.nl/2010/01/cache-data-with-zend-framework-and-memcached/
http://perevodik.net/en/posts/14/
Set memcache in PHP
http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
Install Memcache
aptitude install memcached
aptitude install php5-memcache
Check install memcache
php -m | grep memcache
Check memcache is run
$ ps -aux | grep memcached
nobody 20965 0.0 0.5 42900 23072 ? S Jan28 0:01 /usr/bin/memcached -m 64 -p 11211 -u nobody -l 127.0.0.1
root 22393 0.0 0.0 87940 776 pts/0 R+ 12:06 0:00 grep memcached
$ netstat -an | grep 11211
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN
Setup application.ini in Zend Framework
cache.backend.type = Memcached
cache.backend.options.servers.1.host = 127.0.0.1
cache.backend.options.servers.1.port = 11211
cache.backend.options.servers.1.persistent = true
cache.backend.options.servers.1.weight = 1
cache.backend.options.servers.1.timeout = 5
cache.backend.options.servers.1.retry_interval = 15
OR
- resources.session.saveHandler.class = "App_Session_SaveHandler_Cache"
- resources.session.saveHandler.options.type = "Libmemcached"
- resources.session.saveHandler.options.maxlifetime = 300
- resources.session.saveHandler.options.front.lifetime = 300
- resources.session.saveHandler.options.front.automatic_serialization = true
- resources.session.saveHandler.options.back.servers.0.host = "127.0.0.1"
- resources.session.saveHandler.options.back.servers.0.port = 11211
- resources.session.saveHandler.options.back.servers.0.persistent = true
- resources.session.saveHandler.options.back.servers.0.status = true
- resources.session.saveHandler.options.back.servers.1.host = "127.0.0.2"
- resources.session.saveHandler.options.back.servers.1.port = 11211
- resources.session.saveHandler.options.back.servers.1.persistent = true
- resources.session.saveHandler.options.back.servers.1.status = true
- protected function _initForceSession()
- {
- $this->bootstrap('session');
- Zend_Session::start();
- }
Add this function in bootstrap
protected function _initCache()
{
$options = $this->getOptions();
if (isset($options['cache'])) {
$cache = Zend_Cache::factory(
$options['cache']['frontend']['type'],
$options['cache']['backend']['type'],
$options['cache']['frontend']['options'],
$options['cache']['backend']['options']
);
Zend_Registry::set('cache', $cache);
return $cache;
}
}
OR
/**
* Initialize the Cache Manager
* Initializes the memcached cache into
* the registry and returns the cache manage.
* @return Zend_Cache_Manager */ protected function _initCachemanager() { $cachemanager = $this->getPluginResource('cachemanager') ->init(); // fetch the current revision from svn and use it as a prefix // why: we do not want to restart memcached, or you will lose sessions. if (!$appVersion = apc_fetch('progsite_version')) { $dir = getcwd(); chdir(dirname(__FILE__)); $appVersion = filter_var(`svn info | grep "Revision"`, FILTER_SANITIZE_NUMBER_INT); chdir($dir); unset($dir); if (!$appVersion) { $appVersion = mt_rand(0, 99999); // simply handles an export instead of checkout } apc_store('progsite_version', $appVersion); } $memcached = $cachemanager->getCache('memcached'); $memcached->setOption('cache_id_prefix', APPLICATION_ENV . '_' . $appVersion); return $cachemanager;
}
protected function _initSessionId() { $this->bootstrap('session'); $opts = $this->getOptions(); if ('Zend_Session_SaveHandler_Cache' == $opts['resources']['session']['saveHandler']['class']) { $cache = $this->bootstrap('cachemanager') ->getResource('cachemanager') ->getCache('memcached'); Zend_Session::getSaveHandler()->setCache($cache); } $defaultNamespace = new Zend_Session_Namespace(); if (!isset($defaultNamespace->initialized)) { Zend_Session::regenerateId(); $defaultNamespace->initialized = true; } }
Or set memcache
resources.session.saveHandler.class = "App_Session_SaveHandler_Cache"
resources.session.saveHandler.options.type = "Libmemcached"
resources.session.saveHandler.options.maxlifetime = 300
resources.session.saveHandler.options.front.lifetime = 300
resources.session.saveHandler.options.front.automatic_serialization = true
resources.session.saveHandler.options.back.servers.0.host = "127.0.0.1"
resources.session.saveHandler.options.back.servers.0.port = 11211
resources.session.saveHandler.options.back.servers.0.persistent = true
resources.session.saveHandler.options.back.servers.0.status = true
resources.session.saveHandler.options.back.servers.1.host = "127.0.0.2"
resources.session.saveHandler.options.back.servers.1.port = 11211
resources.session.saveHandler.options.back.servers.1.persistent = true
resources.session.saveHandler.options.back.servers.1.status = true
The session save handler class (App_Session_SaveHanlder_Cache implements Zend_Session_SaveHandler_Interface and uses Zend_Cache factory passing in the Libmemcached option for the backend storage.
In my bootstrap, I have an _init method listed as the first method which calls the session bootstrap:
protected function _initForceSession()
{
$this->bootstrap('session');
Zend_Session::start();
}
Use cache in webservice
$cache = Zend_Registry::get('cache');
$cache->setLifetime(86400);
$client = new Client();
$client->setCache($cache);
No comments:
Post a Comment