Redis'multi'使用动机

问题描述:

从文档中可以清楚地看到,我应该在循环中或通常称为事件或函数中使用多用于redis查询。Redis'multi'使用动机

实例文档形式:

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应用程序中)为什么我不应该使用多?

+0

它在“node.js”部分中主要是异步行为,参见'async'模块来理解为什么async在许多情况下是必须和救命的,''multi'作为redis命令赋予权力来运行多个命令只有一个输入。 – Gntem

你应该使用的多,因为:

  • 它会打开一个redis的交易:所有的查询将被处理一个接一个未经之间执行另一个Redis的客户端发送其他查询后(多是原子)
  • 获得的数据不是错误的状态,没有多人其他人可以在执行循环期间修改redis上的值:您可能会得到奇怪的数据,这些数据在现实中毫无意义!
  • 所有命令都运行或没有运行:如果在执行循环期间无法连接,则可能产生数据损坏,因为如果没有写入另一个值,对值的写查询可能没有意义(可以因为没有使用multi而失败)。