php – 如何在Laravel 5中按键获取所有缓存项目的列表?

laravel中的Cache类具有诸如get(‘itemKey’)之类的方法来从缓存中检索项目,并记住(‘itemKey’,[‘myData1′,’myData2’])以将项目保存在缓存中.

还有一种方法可以检查缓存中是否存在项目:Cache :: has(‘myKey’);

有没有办法(使用基于文件的缓存驱动程序时)获取缓存中所有项目的列表?

例如,某些可能被命名为“Cache :: all()”的东西会返回:

[
    'itemKey' => [
        'myData1',
        'myData2'
   ],
   'myKey' => 'foo'
]

我能想到的唯一方法是使用Cache :: has()方法遍历所有可能的键名.即aaa,aab,aac,aad ……但当然,这不是解决方案.

我在文档或API中看不到任何描述这样的函数的内容,但我认为认为必须存在它是不合理的.

使用Cache facade无法做到这一点.它的界面代表所有底层存储提供的功能,而某些商店不允许列出所有密钥.

如果您正在使用FileCache,您可以尝试通过直接与底层存储交互来实现这一点.它不提供您需要的方法,因此您需要遍历缓存目录.由于可能需要进行大量磁盘I / O,因此效率不高.

要访问存储,您需要这样做

$storage = Cache::getStore(); // will return instance of FileStore
$filesystem = $storage->getFilesystem(); // will return instance of Filesystem

$keys = [];
foreach ($filesystem->allFiles('') as $file1) {
  foreach ($filesystem->allFiles($file1) as $file2) {
    $keys = array_merge($keys, $filesystem->allFiles($file1 . '/' . $file2));
  }
}
翻译自:https://stackoverflow.com/questions/31791178/how-to-get-list-of-all-cached-items-by-key-in-laravel-5

转载注明原文:php – 如何在Laravel 5中按键获取所有缓存项目的列表?