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:
Philipp Holzer 2018-07-07 16:15:03 +02:00
parent e719a25082
commit 1ffe0cfd81
No known key found for this signature in database
GPG key ID: 58160D7D6AF942B6
10 changed files with 114 additions and 70 deletions

View file

@ -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;
}
}

View file

@ -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()