当文件当前写入时如何处理readFile

时间:2016-05-25 02:36:45

标签: node.js asynchronous io

这可能有点模糊但是我有一个节点应用程序在做了一堆东西之后将一个小计数器写入文件:

Fs.readFile( Blender.LOG , function(error, data) { //read the log file
    if( error ) {
        throw error;
    }

    counter = parseInt( data ) + 1; //add this blend

    if(!isNaN( counter )) { //check if the number is a number
        Fs.writeFile( Blender.LOG, counter, function(error) {
            if( error ) {
                throw error;
            }

            Blender.debugging( 'counter: added', 'report' );
        });
    }
    else { //throw error
        Blender.log.error('             Counter number not valid ("' + counter + '"). Leaving it alone for now!');
    }
});

由于对应用程序的需求很高,我在isNaN的回调中经常会得到readFile,因为该文件已经打开,可以从之前的writeFile开始写入实例

(我很有意思,虽然没有抛出任何错误)

你会怎么处理这个?我真的不想让这个阻塞写入以保持应用程序的快速,但我也想排队写入?我对一切都开放。 :)

由于

1 个答案:

答案 0 :(得分:1)

看起来你想要实现文件计数器,因为它是原子的,你需要这样做:

lock file
read counter from file
increment counter
write counter to file
unlock file

如果要锁定文件,建议使用fs-ext模块。

另一种方法:使用redis来存储计数器,它具有原子增量,并且它的性能更好,因为无需经常写入磁盘。