Как получить все значения из кеша, которые начинаются с определенного ключа

В качестве заголовка я хочу получить все значения из кеша, которые начинаются с определенного значения.

Например, я подсчитываю просмотры постов в своем проекте и сохраняю их в кеше. Затем я хочу получить доступ ко всем сохраненным просмотренным значениям в кеше.

с помощником сеанса он разделяет ключи точкой и создает многомерный массив.

Таким образом, мы можем получить сохраненные элементы, такие как Session::get("views"), он предоставляет всем сохраненным элементам используемые «просмотры». ключ.

Как мы можем сделать то же самое с кешем?

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;
}

Тингир, можешь попробовать первым?

Jignesh Joisar 31.10.2018 13:49

@JigneshJoisar Я нашел решение, но не лучшую практику. Я вставил в цикл foreach все идентификаторы сообщений. Но это слишком долго, я ищу более элегантный способ

Teoman Tıngır 31.10.2018 13:52

Тингир может добавить код, который у вас есть. так что я могу помочь лучше, если возможно.

Jignesh Joisar 31.10.2018 13:56

@JigneshJoisar Я редактировал свой вопрос

Teoman Tıngır 31.10.2018 14:16
1
4
309
1

Ответы 1

not proper answer but i give u my best answer

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;
 }

note first time if key is not exists then store cache values on keys next time always get on cache so better performance

only work if not updated your keys array every time

для большего понимания кеша видеть

Другие вопросы по теме