【发布时间】:2018-11-15 21:16:50
【问题描述】:
背景
我有一个原子操作,我需要使用锁来防止其他客户端读取不稳定的值。
- 平台:节点 10.1.0
- 图书馆:redis
解决方案
根据官方文档,解决方案是使用WATCH和MULTI:
问题
现在,MULTI 的用法已记录在案,我对如何使用它有了一个大致的了解。
var redis = require( "redis" );
var bluebird = require( "bluebird" );
var client = redis.createClient();
var multi = client.multi();
multi.hsetAsync( "test", "array", "[1, 2]" );
multi.hgetAsync( "test", "array" );
multi.execAsync( ).then( console.log ); // [ 0, "[1, 2]" ]
我知道这是 multi 的正确实现。首先我需要创建一个客户端,然后创建一个多查询。
我知道multi 和client 共享相同的界面,但也不清楚在multi 查询中使用hgetAsync 而不是hget 有什么好处(如果有的话),因为我假设 multi 所做的只是将所述请求同步添加到队列中(因此我不需要 Async vartiant )。
在调用multi.execAsync( ) 时,查询的执行将自动发生。
但我不明白WATCH 应该如何输入这里。我在文档中找不到任何关于它的参考,也没有任何关于 REDIS 的乐观锁系统的信息。
问题
所以我有以下问题:
-
WATCH支持MULTI吗? - 如果可以,可以分享一下代码 sn-p 吗?
- 在这个例子中使用
multi.hgetAsync( "test", "array" );代替multi.hget( "test", "array" );有意义吗?
【问题讨论】:
标签: javascript node.js redis node-redis