Add ICacheDriver->getAllKeys method
This commit is contained in:
parent
640f76b05a
commit
71c08a044f
7 changed files with 86 additions and 0 deletions
|
@ -46,6 +46,29 @@ class Cache extends \Friendica\BaseObject
|
||||||
return self::$driver;
|
return self::$driver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns all the cache keys sorted alphabetically
|
||||||
|
*
|
||||||
|
* @return array|null Null if the driver doesn't support this feature
|
||||||
|
*/
|
||||||
|
public static function getAllKeys()
|
||||||
|
{
|
||||||
|
$time = microtime(true);
|
||||||
|
|
||||||
|
$return = self::getDriver()->getAllKeys();
|
||||||
|
|
||||||
|
// Keys are prefixed with the node hostname, let's remove it
|
||||||
|
array_walk($return, function (&$value) {
|
||||||
|
$value = preg_replace('/^' . self::getApp()->get_hostname() . ':/', '', $value);
|
||||||
|
});
|
||||||
|
|
||||||
|
sort($return);
|
||||||
|
|
||||||
|
self::getApp()->save_timestamp($time, 'cache');
|
||||||
|
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Fetch cached data according to the key
|
* @brief Fetch cached data according to the key
|
||||||
*
|
*
|
||||||
|
|
|
@ -19,6 +19,14 @@ class ArrayCache extends AbstractCacheDriver implements IMemoryCacheDriver
|
||||||
/** @var array Array with the cached data */
|
/** @var array Array with the cached data */
|
||||||
protected $cachedData = array();
|
protected $cachedData = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (@inheritdoc)
|
||||||
|
*/
|
||||||
|
public function getAllKeys()
|
||||||
|
{
|
||||||
|
return array_keys($this->cachedData);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (@inheritdoc)
|
* (@inheritdoc)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,6 +13,16 @@ use Friendica\Util\DateTimeFormat;
|
||||||
*/
|
*/
|
||||||
class DatabaseCacheDriver extends AbstractCacheDriver implements ICacheDriver
|
class DatabaseCacheDriver extends AbstractCacheDriver implements ICacheDriver
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* (@inheritdoc)
|
||||||
|
*/
|
||||||
|
public function getAllKeys()
|
||||||
|
{
|
||||||
|
$stmt = DBA::select('cache', ['k'], ['`expires` >= ?', DateTimeFormat::utcNow()]);
|
||||||
|
|
||||||
|
return DBA::toArray($stmt);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (@inheritdoc)
|
* (@inheritdoc)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -11,6 +11,13 @@ use Friendica\Core\Cache;
|
||||||
*/
|
*/
|
||||||
interface ICacheDriver
|
interface ICacheDriver
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Lists all cache keys
|
||||||
|
*
|
||||||
|
* @return array|null Null if it isn't supported by the cache driver
|
||||||
|
*/
|
||||||
|
public function getAllKeys();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches cached data according to the key
|
* Fetches cached data according to the key
|
||||||
*
|
*
|
||||||
|
|
|
@ -40,6 +40,28 @@ class MemcacheCacheDriver extends AbstractCacheDriver implements IMemoryCacheDri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (@inheritdoc)
|
||||||
|
*/
|
||||||
|
public function getAllKeys()
|
||||||
|
{
|
||||||
|
$list = [];
|
||||||
|
$allSlabs = $this->memcache->getExtendedStats('slabs');
|
||||||
|
foreach($allSlabs as $slabs) {
|
||||||
|
foreach(array_keys($slabs) as $slabId) {
|
||||||
|
$cachedump = $this->memcache->getExtendedStats('cachedump', (int)$slabId);
|
||||||
|
foreach($cachedump as $keys => $arrVal) {
|
||||||
|
if (!is_array($arrVal)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$list = array_merge($list, array_keys($arrVal));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (@inheritdoc)
|
* (@inheritdoc)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -53,6 +53,14 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (@inheritdoc)
|
||||||
|
*/
|
||||||
|
public function getAllKeys()
|
||||||
|
{
|
||||||
|
return $this->memcached->getAllKeys();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (@inheritdoc)
|
* (@inheritdoc)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -38,6 +38,14 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* (@inheritdoc)
|
||||||
|
*/
|
||||||
|
public function getAllKeys()
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (@inheritdoc)
|
* (@inheritdoc)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue