你可以用memcached,新浪有个免费的开源系统memched db,既能保证速度,又能定时保存入库。他们的博客,播客等系统都是这么做的。

解决方案 »

  1.   

    恩 
    如果就问题本身而言呢
    既然file_put_contents这个函数新增了把锁,我想ZEND肯定是考虑到了并发问题,那么为什么没能解决问题呢?
      

  2.   

    如果用文件形式,最好加锁。
    bool flock ( int handle, int operation [, int &wouldblock] )
    PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。 注: 在 Windows 下 flock() 将会强制执行。 flock() 操作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一: 要取得共享锁定(读取程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。 要取得独占锁定(写入程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。 要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。 如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。 
    flock() 允许你执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),请将可选的第三个参数设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。 如果成功则返回 TRUE,失败则返回 FALSE。 
      

  3.   

    没锁文件,WINDOW下并发访问,出问题正常,
      

  4.   

    在写入的时候加了锁,你仔细看一下代码
    服务器是linux系统
      

  5.   

    我也觉得用db好点, 
    用memcache可以提高读写速度,发生频率应该下降清零是整个文件为空吗?还是统计数据成了0?
    加点log,看一下出问题前是读还是写的时候出了问题还可以把锁去了,看看问题发生频率是高了还是低了