Commit 31106a92 authored by Taylor Otwell's avatar Taylor Otwell

Support implicit sectioned caching using :: syntax.

parent 4d2ecdbf
......@@ -16,6 +16,20 @@ class Memcached extends Driver implements Sectionable {
*/
protected $key;
/**
* Indicates that section caching is implicit based on keys.
*
* @var bool
*/
public $implicit = true;
/**
* The implicit section key delimiter.
*
* @var string
*/
public $delimiter = '::';
/**
* Create a new Memcached cache driver instance.
*
......@@ -47,7 +61,13 @@ class Memcached extends Driver implements Sectionable {
*/
protected function retrieve($key)
{
if (($cache = $this->memcache->get($this->key.$key)) !== false)
if ($this->sectionable($key))
{
list($section, $key) = $this->parse($key);
return $this->get_from_section($section, $key);
}
elseif (($cache = $this->memcache->get($this->key.$key)) !== false)
{
return $cache;
}
......@@ -81,7 +101,16 @@ class Memcached extends Driver implements Sectionable {
*/
public function put($key, $value, $minutes)
{
$this->memcache->set($this->key.$key, $value, $minutes * 60);
if ($this->sectionable($key))
{
list($section, $key) = $this->parse($key);
return $this->put_in_section($section, $key, $value, $minutes);
}
else
{
$this->memcache->set($this->key.$key, $value, $minutes * 60);
}
}
/**
......@@ -107,7 +136,16 @@ class Memcached extends Driver implements Sectionable {
*/
public function forever($key, $value)
{
return $this->put($key, $value, 0);
if ($this->sectionable($key))
{
list($section, $key) = $this->parse($key);
return $this->forever_in_section($section, $key, $value);
}
else
{
return $this->put($key, $value, 0);
}
}
/**
......@@ -160,7 +198,23 @@ class Memcached extends Driver implements Sectionable {
*/
public function forget($key)
{
$this->memcache->delete($this->key.$key);
if ($this->sectionable($key))
{
list($section, $key) = $this->parse($key);
if ($key == '*')
{
$this->forget_section($section);
}
else
{
$this->forget_in_section($section, $key);
}
}
else
{
$this->memcache->delete($this->key.$key);
}
}
/**
......@@ -223,6 +277,17 @@ class Memcached extends Driver implements Sectionable {
return $section.'#'.$this->section_id($section).'#'.$key;
}
/**
* Indicates if a key is sectionable.
*
* @param string $key
* @return bool
*/
protected function sectionable($key)
{
return $this->implicit and $this->sectioned($key);
}
/**
* Determine if a key is sectioned.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment