Redis'多'动机使用

时间:2013-12-09 16:21:10

标签: node.js redis

从文档中可以清楚地看到,我应该在循环中使用multi进行redis查询,或者经常调用事件或函数。

示例表格文档:

 var redis  = require("redis"),
    client = redis.createClient(), multi;

// start a separate multi command queue
multi = client.multi();
multi.incr("incr thing", redis.print);
multi.incr("incr other thing", redis.print);

// runs immediately
client.mset("incr thing", 100, "incr other thing", 1, redis.print);

// drains multi queue and runs atomically
multi.exec(function (err, replies) {
    console.log(replies); // 101, 2
});

// you can re-run the same transaction if you like
multi.exec(function (err, replies) {
    console.log(replies); // 102, 3
    client.quit();
});

1)我为什么要这样做?

2)如果我只为用户请求调用一次函数(例如在web应用程序中),为什么我不应该使用multi?

1 个答案:

答案 0 :(得分:3)

你应该使用multi,因为:

  • 它会打开一个redis事务:所有查询将一个接一个地处理,而不会发送另一个redis客户端之间执行的其他查询(多个是原子的)
  • 获得的数据没有处于错误的状态,没有其他人可以在执行循环期间修改redis上的值:你可能得到实际上没有意义的奇怪数据!
  • 所有命令都运行或者没有:如果在执行循环期间断开连接,则可能产生数据损坏,因为如果没有写入另一个值,可能对值的写入查询没有意义(可能由于没有使用multi而失败了。