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应用程序中)为什么我不应该使用多?
答
你应该使用的多,因为:
- 它会打开一个redis的交易:所有的查询将被处理一个接一个未经之间执行另一个Redis的客户端发送其他查询后(多是原子)
- 获得的数据不是错误的状态,没有多人其他人可以在执行循环期间修改redis上的值:您可能会得到奇怪的数据,这些数据在现实中毫无意义!
- 所有命令都运行或没有运行:如果在执行循环期间无法连接,则可能产生数据损坏,因为如果没有写入另一个值,对值的写查询可能没有意义(可以因为没有使用multi而失败)。
它在“node.js”部分中主要是异步行为,参见'async'模块来理解为什么async在许多情况下是必须和救命的,''multi'作为redis命令赋予权力来运行多个命令只有一个输入。 – Gntem