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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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
|
||||
*
|
||||
|
|
|
@ -19,6 +19,14 @@ class ArrayCache extends AbstractCacheDriver implements IMemoryCacheDriver
|
|||
/** @var array Array with the cached data */
|
||||
protected $cachedData = array();
|
||||
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
public function getAllKeys()
|
||||
{
|
||||
return array_keys($this->cachedData);
|
||||
}
|
||||
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
|
|
|
@ -13,6 +13,16 @@ use Friendica\Util\DateTimeFormat;
|
|||
*/
|
||||
class DatabaseCacheDriver extends AbstractCacheDriver implements ICacheDriver
|
||||
{
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
public function getAllKeys()
|
||||
{
|
||||
$stmt = DBA::select('cache', ['k'], ['`expires` >= ?', DateTimeFormat::utcNow()]);
|
||||
|
||||
return DBA::toArray($stmt);
|
||||
}
|
||||
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
|
|
|
@ -11,6 +11,13 @@ use Friendica\Core\Cache;
|
|||
*/
|
||||
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
|
||||
*
|
||||
|
|
|
@ -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)
|
||||
*/
|
||||
|
|
|
@ -53,6 +53,14 @@ class MemcachedCacheDriver extends AbstractCacheDriver implements IMemoryCacheDr
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
public function getAllKeys()
|
||||
{
|
||||
return $this->memcached->getAllKeys();
|
||||
}
|
||||
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
|
|
|
@ -38,6 +38,14 @@ class RedisCacheDriver extends AbstractCacheDriver implements IMemoryCacheDriver
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
public function getAllKeys()
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* (@inheritdoc)
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue