mirror of
https://github.com/friendica/friendica
synced 2025-04-24 01:50:17 +00:00
Added Lock Unittests & Bugfixings
Added Redis Lock Unittests Added Memcached Lock Unittests Fixed a bug in dba Fixed a bug in RedisLock
This commit is contained in:
parent
e719a25082
commit
1ffe0cfd81
10 changed files with 114 additions and 70 deletions
|
@ -18,6 +18,7 @@ abstract class AbstractCacheDriver extends BaseObject
|
|||
* @return string The cache key used for the cache
|
||||
*/
|
||||
protected function getCacheKey($key) {
|
||||
// We fetch with the hostname as key to avoid problems with other applications
|
||||
return self::getApp()->get_hostname() . ":" . $key;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue