|
|
@ -35,15 +35,12 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver |
|
|
|
$return = null; |
|
|
|
$cachekey = $this->getCacheKey($key); |
|
|
|
|
|
|
|
// We fetch with the hostname as key to avoid problems with other applications
|
|
|
|
$cached = $this->redis->get($cachekey); |
|
|
|
|
|
|
|
// @see http://php.net/manual/en/redis.get.php#84275
|
|
|
|
if (is_bool($cached) || is_double($cached) || is_long($cached)) { |
|
|
|
return $return; |
|
|
|
if ($cached === false && !$this->redis->exists($cachekey)) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
$value = @unserialize($cached); |
|
|
|
$value = json_decode($cached); |
|
|
|
|
|
|
|
// Only return a value if the serialized value is valid.
|
|
|
|
// We also check if the db entry is a serialized
|
|
|
@ -59,17 +56,18 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver |
|
|
|
{ |
|
|
|
$cachekey = $this->getCacheKey($key); |
|
|
|
|
|
|
|
// We store with the hostname as key to avoid problems with other applications
|
|
|
|
$cached = json_encode($value); |
|
|
|
|
|
|
|
if ($ttl > 0) { |
|
|
|
return $this->redis->setex( |
|
|
|
$cachekey, |
|
|
|
time() + $ttl, |
|
|
|
serialize($value) |
|
|
|
$cached |
|
|
|
); |
|
|
|
} else { |
|
|
|
return $this->redis->set( |
|
|
|
$cachekey, |
|
|
|
serialize($value) |
|
|
|
$cached |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
@ -81,7 +79,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver |
|
|
|
|
|
|
|
public function clear() |
|
|
|
{ |
|
|
|
return true; |
|
|
|
return $this->redis->flushAll(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -91,10 +89,7 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver |
|
|
|
public function add($key, $value, $ttl = Cache::FIVE_MINUTES) |
|
|
|
{ |
|
|
|
$cachekey = $this->getCacheKey($key); |
|
|
|
|
|
|
|
if (!is_int($value)) { |
|
|
|
$value = serialize($value); |
|
|
|
} |
|
|
|
$cached = json_encode($value); |
|
|
|
|
|
|
|
return $this->redis->setnx($cachekey, $value); |
|
|
|
} |
|
|
@ -106,16 +101,14 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver |
|
|
|
{ |
|
|
|
$cachekey = $this->getCacheKey($key); |
|
|
|
|
|
|
|
if (!is_int($newValue)) { |
|
|
|
$newValue = serialize($newValue); |
|
|
|
} |
|
|
|
$newCached = json_encode($newValue); |
|
|
|
|
|
|
|
$this->redis->watch($cachekey); |
|
|
|
// If the old value isn't what we expected, somebody else changed the key meanwhile
|
|
|
|
if ($this->get($cachekey) === $oldValue) { |
|
|
|
if ($this->get($key) === $oldValue) { |
|
|
|
if ($ttl > 0) { |
|
|
|
$result = $this->redis->multi() |
|
|
|
->setex($cachekey, $ttl, $newValue) |
|
|
|
->setex($cachekey, $ttl, $newCached) |
|
|
|
->exec(); |
|
|
|
} else { |
|
|
|
$result = $this->redis->multi() |
|
|
|