作为标题,我想从缓存中获取所有以特定值开头的值。
例如,我在我的项目中计算帖子视图,并将其存储在缓存中。然后,我想访问缓存上所有已存储的查看值。
使用会话帮助程序,它通过点分隔键并创建多维数组。
所以我们可以得到像Session::get("views")
这样的存储项目吗,它给所有存储的项目使用了“视图”。键。
我们如何使用Cache做同样的事情?
function get_all_cache(){
$filesystem = \Cache::getStore()->getFilesystem();
$cache_dir = (\Cache::getDirectory());
$keys = [];
foreach ($filesystem->allFiles($cache_dir) as $file1) {
if (is_dir($file1->getPath())) {
foreach ($filesystem->allFiles($file1->getPath()) as $file2) {
$keys = array_merge($keys, [$file2->getRealpath() => unserialize(substr(\File::get($file2->getRealpath()), 10))]);
}
}
}
return $keys;
}
答案 0 :(得分:0)
不正确的答案,但我给你我最好的答案
try like this
function get_all_cache(){
if(\Cache::has('viewsValue')) {
$keys = \Cache::get('viewsValue');
}else {
$filesystem = \Cache::getStore()->getFilesystem();
$cache_dir = (\Cache::getDirectory());
$keys = [];
foreach ($filesystem->allFiles($cache_dir) as $file1) {
if (is_dir($file1->getPath())) {
foreach ($filesystem->allFiles($file1->getPath()) as $file2) {
$keys = array_merge($keys, [$file2->getRealpath() => unserialize(substr(\File::get($file2->getRealpath()), 10))]);
}
}
}
\Cache::put('viewsValue',$keys,60); ///add key array into cache
}
return $keys;
}
如果密钥不存在,请第一次注意,然后在密钥上存储缓存值 时间总是在缓存上,因此性能更好
only work if not updated your keys array every time
更多了解缓存see