- Added general rcube_cache class with memcache support

- Improved caching performance by skipping writes of unchanged data                                                                       
- Option enable_caching replaced by imap_cache and messages_cache options
This commit is contained in:
alecpl
2011-05-18 11:48:47 +00:00
parent 76d4019a35
commit 5cf5ee66c1
5 changed files with 437 additions and 191 deletions

View File

@@ -122,6 +122,7 @@ class rcmail
private $texts;
private $address_books = array();
private $caches = array();
private $action_map = array();
@@ -351,6 +352,24 @@ class rcmail
}
/**
* Initialize and get cache object
*
* @param string $name Cache identifier
* @param string $type Cache type ('db' or 'memcache')
*
* @return rcube_cache Cache object
*/
public function get_cache($name, $type)
{
if (!isset($this->caches[$name])) {
$this->caches[$name] = new rcube_cache($type, $_SESSION['user_id'], $name.'.');
}
return $this->caches[$name];
}
/**
* Return instance of the internal address book class
*
@@ -531,14 +550,22 @@ class rcmail
if (is_object($this->imap))
return;
$this->imap = new rcube_imap($this->db);
$this->imap = new rcube_imap();
$this->imap->debug_level = $this->config->get('debug_level');
$this->imap->skip_deleted = $this->config->get('skip_deleted');
// enable caching of imap data
if ($this->config->get('enable_caching')) {
$this->imap->set_caching(true);
$imap_cache = $this->config->get('imap_cache');
$messages_cache = $this->config->get('messages_cache');
// for backward compatybility
if ($imap_cache === null && $messages_cache === null && $this->config->get('enable_caching')) {
$imap_cache = 'db';
$messages_cache = true;
}
if ($imap_cache)
$this->imap->set_caching($imap_cache);
if ($messages_cache)
$this->imap->set_messages_caching(true);
// set pagesize from config
$this->imap->set_pagesize($this->config->get('pagesize', 50));
@@ -1116,6 +1143,11 @@ class rcmail
$book->close();
}
foreach ($this->caches as $cache) {
if (is_object($cache))
$cache->close();
}
if (is_object($this->imap))
$this->imap->close();