CHANGELOG | ●●●●● patch | view | raw | blame | history | |
config/main.inc.php.dist | ●●●●● patch | view | raw | blame | history | |
program/include/rcmail.php | ●●●●● patch | view | raw | blame | history | |
program/include/rcube_cache.php | ●●●●● patch | view | raw | blame | history | |
program/include/rcube_imap.php | ●●●●● patch | view | raw | blame | history |
CHANGELOG
@@ -1,7 +1,7 @@ CHANGELOG Roundcube Webmail =========================== - Added general rcube_cache class with memcache support - Added general rcube_cache class with Memcache and APC support - Improved caching performance by skipping writes of unchanged data - Option enable_caching replaced by imap_cache and messages_cache options - Add forward-as-attachment feature config/main.inc.php.dist
@@ -109,7 +109,7 @@ // Optional IMAP authentication password to be used for imap_auth_cid $rcmail_config['imap_auth_pw'] = null; // Type of IMAP indexes cache. Supported values: 'db' and 'memcache'. // Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache'. $rcmail_config['imap_cache'] = null; // Enables messages cache. Only 'db' cache is supported. program/include/rcmail.php
@@ -356,7 +356,7 @@ * Initialize and get cache object * * @param string $name Cache identifier * @param string $type Cache type ('db' or 'memcache') * @param string $type Cache type ('db', 'apc' or 'memcache') * * @return rcube_cache Cache object */ program/include/rcube_cache.php
@@ -51,17 +51,22 @@ /** * Object constructor. * * @param string $type Engine type ('db' or 'memcache') * @param string $type Engine type ('db' or 'memcache' or 'apc') * @param int $userid User identifier * @param string $prefix Key name prefix */ function __construct($type, $userid, $prefix='') { $rcmail = rcmail::get_instance(); $type = strtolower($type); if (strtolower($type) == 'memcache') { if ($type == 'memcache') { $this->type = 'memcache'; $this->db = $rcmail->get_memcache(); } else if ($type == 'apc') { $this->type = 'apc'; $this->db = function_exists('apc_exists'); // APC 3.1.4 required } else { $this->type = 'db'; @@ -208,7 +213,17 @@ } if ($this->type == 'memcache') { $data = $this->db->get($this->mc_key($key)); $data = $this->db->get($this->ckey($key)); if ($data) { $this->cache_sums[$key] = md5($data); $data = unserialize($data); } return $this->cache[$key] = $data; } if ($this->type == 'apc') { $data = apc_fetch($this->ckey($key)); if ($data) { $this->cache_sums[$key] = md5($data); @@ -263,11 +278,18 @@ } if ($this->type == 'memcache') { $key = $this->mc_key($key); $key = $this->ckey($key); $result = $this->db->replace($key, $data, MEMCACHE_COMPRESSED); if (!$result) $result = $this->db->set($key, $data, MEMCACHE_COMPRESSED); return $result; } if ($this->type == 'apc') { $key = $this->ckey($key); if (apc_exists($key)) apc_delete($key); return apc_store($key, $data); } // update existing cache record @@ -314,7 +336,11 @@ } if ($this->type == 'memcache') { return $this->db->delete($this->mc_key($key)); return $this->db->delete($this->ckey($key)); } if ($this->type == 'apc') { return apc_delete($this->ckey($key)); } $this->db->query( @@ -328,12 +354,12 @@ /** * Creates per-user Memcache key * Creates per-user cache key (for memcache and apc) * * @param string $key Cache key * @access private */ private function mc_key($key) private function ckey($key) { return sprintf('[%d]%s', $this->userid, $key); } program/include/rcube_imap.php
@@ -3738,7 +3738,7 @@ /** * Enable or disable indexes caching * * @param boolean $type Cache type (memcache' or 'db') * @param boolean $type Cache type (@see rcmail::get_cache) * @access public */ function set_caching($type)