Laravel: Как да сравня/получа конкретни данни от кеша?

В моето нормално приложение за чат Laravel за анкети ще запазя нови съобщения, изпратени от потребител, в файлов кеш с ключа като низ, получавайки стойността му от функцията date(current_time) и тялото на съобщението.

След това, когато искам да получа тези съобщения, ще използвам последната стойност на анкетата $lastPolled = Session::get('lastPolled') и ще сравня с ключа в кеша. Ключовете, които са по-големи от стойността $lastPolled, ще имат своите данни, които ще бъдат взети като нови съобщения и добавени към разговорите.

Накрая ще актуализирам стойността на последната анкетирана сесия Session::put('lastPolled',date(Y-m-d H:i:s)

И така, как да сравня $lastPolled с всички ключове в кеша и да получа стойностите на всеки ключ? Нещо от рода на:

$latestMessages = array();
foreach(KeysInCache as Key=>value){
   if($lastPolled>Key)
      array_push($latestMessages,Key=>value);
}

Благодаря ти!

P.s. бонус точки за по-добри предложения. О, и не мога да използвам memcache/redis/otherSuperCaches по технически причини, само кеш файл/база данни. :(


person Ricardo    schedule 25.06.2014    source източник


Отговори (1)


Защо не опитате нещо като това, като създадете кеш файлове въз основа на клеймо за време или ключ:

Допълнителни подробности и предложения за същото на адрес: http://evertpot.com/107/

// Това е функцията, която съхранявате информация с функция store($key,$data,$ttl) {

// Opening the file
$h = fopen($this->getFileName($key),'w');
if (!$h) throw new Exception('Could not write to cache');
// Serializing along with the TTL
$data = serialize(array(time()+$ttl,$data));
if (fwrite($h,$data)===false) {
  throw new Exception('Could not write to cache');
}
fclose($h);

}

// Обща функция за намиране на името на файл за определен ключ private function getFileName($key) {

  return '/tmp/s_cache' . md5($key);

}

// Функцията за извличане на данни връща false при повреда function fetch($key) {

  $filename = $this->getFileName($key);
  if (!file_exists($filename) || !is_readable($filename)) return false;

  $data = file_get_contents($filename);

  $data = @unserialize($data);
  if (!$data) {

     // Unlinking the file when unserializing failed
     unlink($filename);
     return false;

  }

  // checking if the data was expired
  if (time() > $data[0]) {

     // Unlinking
     unlink($filename);
     return false;

  }
  return $data[1];
}

}

person Chhavi Gangwal    schedule 25.06.2014