- Add TTL parameter to rcube_cache class (and rcmail::get_cache method)

release-0.6
alecpl 14 years ago
parent 89b2d1ba7f
commit 7ad8e2c318

@ -333,7 +333,7 @@ class rcmail
$this->memcache = false;
return false;
}
$this->memcache = new Memcache;
$mc_available = 0;
foreach ($this->config->get('memcache_hosts', array()) as $host) {
@ -343,11 +343,11 @@ class rcmail
if ($this->memcache->addServer($host, $port) && !$mc_available)
$mc_available += intval($this->memcache->connect($host, $port));
}
if (!$mc_available)
$this->memcache = false;
}
return $this->memcache;
}
@ -357,13 +357,14 @@ class rcmail
*
* @param string $name Cache identifier
* @param string $type Cache type ('db', 'apc' or 'memcache')
* @param int $ttl Expiration time for cache items in seconds
*
* @return rcube_cache Cache object
*/
public function get_cache($name, $type)
public function get_cache($name, $type='db', $ttl=0)
{
if (!isset($this->caches[$name])) {
$this->caches[$name] = new rcube_cache($type, $_SESSION['user_id'], $name);
$this->caches[$name] = new rcube_cache($type, $_SESSION['user_id'], $name, $ttl);
}
return $this->caches[$name];

@ -41,6 +41,7 @@ class rcube_cache
private $type;
private $userid;
private $prefix;
private $ttl;
private $index;
private $cache = array();
private $cache_keys = array();
@ -54,12 +55,13 @@ class rcube_cache
* @param string $type Engine type ('db' or 'memcache' or 'apc')
* @param int $userid User identifier
* @param string $prefix Key name prefix
* @param int $ttl Expiration time of memcache/apc items in seconds (max.2592000)
*/
function __construct($type, $userid, $prefix='')
function __construct($type, $userid, $prefix='', $ttl=0)
{
$rcmail = rcmail::get_instance();
$type = strtolower($type);
if ($type == 'memcache') {
$this->type = 'memcache';
$this->db = $rcmail->get_memcache();
@ -74,6 +76,7 @@ class rcube_cache
}
$this->userid = (int) $userid;
$this->ttl = (int) $ttl;
$this->prefix = $prefix;
}
@ -179,7 +182,6 @@ class rcube_cache
* @param string $key Cache key name
*
* @return mixed Cached value
* @access private
*/
private function read_record($key)
{
@ -228,7 +230,6 @@ class rcube_cache
*
* @param string $key Cache key name
* @param mxied $data Serialized cache data
* @access private
*/
private function write_record($key, $data)
{
@ -285,7 +286,6 @@ class rcube_cache
* @param boolean $prefix_mode Enable it to clear all keys starting
* with prefix specified in $key
*
* @access private;
*/
private function remove_record($key=null, $prefix_mode=false)
{
@ -341,28 +341,26 @@ class rcube_cache
/**
* Adds entry into memcache/apc DB.
* @access private
*/
private function add_record($key, $data)
{
if ($this->type == 'memcache') {
$result = $this->db->replace($key, $data, MEMCACHE_COMPRESSED);
$result = $this->db->replace($key, $data, MEMCACHE_COMPRESSED, $this->ttl);
if (!$result)
$result = $this->db->set($key, $data, MEMCACHE_COMPRESSED);
$result = $this->db->set($key, $data, MEMCACHE_COMPRESSED, $this->ttl);
return $result;
}
if ($this->type == 'apc') {
if (apc_exists($key))
apc_delete($key);
return apc_store($key, $data);
return apc_store($key, $data, $this->ttl);
}
}
/**
* Deletes entry from memcache/apc DB.
* @access private
*/
private function delete_record($index=true)
{
@ -381,7 +379,6 @@ class rcube_cache
/**
* Writes the index entry into memcache/apc DB.
* @access private
*/
private function write_index()
{
@ -411,7 +408,6 @@ class rcube_cache
/**
* Gets the index entry from memcache/apc DB.
* @access private
*/
private function load_index()
{
@ -441,7 +437,6 @@ class rcube_cache
* @param string $key Cache key name
*
* @return string Cache key
* @access private
*/
private function ckey($key)
{
@ -453,7 +448,6 @@ class rcube_cache
* Creates per-user index cache key name (for memcache and apc)
*
* @return string Cache key
* @access private
*/
private function ikey()
{

Loading…
Cancel
Save