如何从缓存中获取以某些键开头的所有值

时间:2018-10-31 12:44:19

标签: php laravel caching

作为标题,我想从缓存中获取所有以特定值开头的值。

例如,我在我的项目中计算帖子视图,并将其存储在缓存中。然后,我想访问缓存上所有已存储的查看值。

使用会话帮助程序,它通过点分隔键并创建多维数组。

所以我们可以得到像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;
}

1 个答案:

答案 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