public function set($key, $value, $ttl)
{
$file = $this->_getFileName($key);
$dir = dirname($file);
if (!@mkdir($dir, 0755, true) && !is_dir($dir)) {
throw new FileException('create `:dir` cache directory failed: :last_error_message', ['dir' => $dir]);
}
if (file_put_contents($file, $value, LOCK_EX) === false) {
throw new FileException('write `:file` cache file failed: :last_error_message', ['file' => $file]);
}
@touch($file, time() + $ttl);
clearstatcache(true, $file);
}