Laravel:我如何比较/从缓存中获取特定的数据



在我的正常轮询Laravel聊天应用程序中,我会将用户发送的新消息保存到文件缓存中,其中密钥为字符串,从date(current_time)函数和消息体中获取其值。

然后,当我想获得这些消息时,我将使用最后一个Poll值$lastPolled = Session::get('lastPolled')并与缓存中的键进行比较。大于$ lastpolling值的键将把它们的数据作为新消息并附加到对话中。

最后,我将更新上一次轮询的会话值Session::put('lastPolled',date(Y-m-d H:i:s)

那么,我如何比较$ lastpolling与缓存中的所有键并获得每个键的值?类似以下语句:

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

谢谢!

注。更好的建议可以加分。哦,由于技术原因,我不能使用memcache/redis/othersupercache,只能使用文件/数据库缓存。(

为什么不试试基于时间戳或密钥创建缓存文件呢?

进一步的细节和建议在:http://evertpot.com/107/

//这是你用function存储信息的函数存储(关键数据,美元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);

}

//查找某个私钥文件名的通用函数getFileName($key) {

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

}

//获取数据的函数如果失败返回falsefetch(键)美元{

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

}

相关内容

  • 没有找到相关文章

最新更新