论坛风格切换
  • 4047阅读
  • 0回复

大网站文件缓存问题解决方案 [复制链接]

上一主题 下一主题
离线ensoon
 

发帖
166
金币
0
威望
15
只看楼主 倒序阅读 使用道具 楼主  发表于: 2011-08-26
背景是:大网站用nfs来文件共享
问题:当对文件写入频繁的时候,会出现缓存文件会写坏的情况
原因:是写的时候没有锁文件,nfs不支持文件锁

解决方案:1)用memcache 来锁,2)用数据库来保存文件内容
  1. function writeover($fileName, $data, $method = 'rb+', $ifLock = true, $ifCheckPath = true, $ifChmod = true) {
  2.     $fileName = S::escapePath($fileName, $ifCheckPath);
  3.     touch($fileName);
  4.     $memcache = new memcache_file();
  5.     if ($ifLock === true) {
  6.         if ($memcache->add($fileName, 1)) {
  7.             $handle = fopen($fileName, $method);
  8.             $ifLock && flock($handle, LOCK_EX);
  9.             $writeCheck = fwrite($handle, $data);
  10.             $method == 'rb+' && ftruncate($handle, strlen($data));
  11.             fclose($handle);
  12.             $ifChmod && @chmod($fileName, 0777);
  13.             $memcache->delete($fileName);
  14.             return $writeCheck;
  15.         } else {
  16.             return false;
  17.         }
  18.     } else {
  19.         $handle = fopen($fileName, $method);
  20.         $ifLock && flock($handle, LOCK_EX);
  21.         $writeCheck = fwrite($handle, $data);
  22.         $method == 'rb+' && ftruncate($handle, strlen($data));
  23.         fclose($handle);
  24.         $ifChmod && @chmod($fileName, 0777);
  25.         $memcache->delete($fileName);
  26.         return $writeCheck;
  27.     }
  28. }



open source ,like douban.com [color=#ff0000][url]www.ensoon.com[/url][/color]
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
提到某人:
选择好友
上一个 下一个