当前位置:  开发笔记 > 编程语言 > 正文

如何在Node.js中使用Redis WATCH?

如何解决《如何在Node.js中使用RedisWATCH?》经验,为你挑选了1个好方法。



1> Flame_Phoeni..:

n

没有关于在节点redis中使用WATCH的文档。但是,我确实在MDN中找到了一组非常有用的提示:

https://developer.mozilla.org/zh-CN/docs/Mozilla/Redis_Tips

总而言之,WATCH的用法如下:

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

client.watch("foo", function( err ){
    if(err) throw err;

    client.get("foo", function(err, result) {
        if(err) throw err;

        // Process result
        // Heavy and time consuming operation here

        client.multi()
            .set("foo", "some heavy computation")
            .exec(function(err, results) {

                /**
                 * If err is null, it means Redis successfully attempted 
                 * the operation.
                 */ 
                if(err) throw err;

                /**
                 * If results === null, it means that a concurrent client
                 * changed the key while we were processing it and thus 
                 * the execution of the MULTI command was not performed.
                 * 
                 * NOTICE: Failing an execution of MULTI is not considered
                 * an error. So you will have err === null and results === null
                 */

            });
    });
});

因此,回答我的问题:

    是的,尽管watchRedisClient原型而不是原型上被调用Multi

    上面提供的代码段。

    因为具有Multi原型的对象中的每个方法都会返回对象本身,所以使用Async方法的版本不会带来任何好处,除了execAsync它使您可以执行多个查询并在Promise中处理响应而不是回调。

重要笔记

另一个真正重要的事情是watch仅适用于KEYS,而不适用于哈希。因此,就我而言,您无法查看arrayhash 的字段test。您可以观看整个test比赛,但不能观看特定的比赛。

因此,因为在我的代码中,我实际上想监视哈希中的字段。这是不可能的。相反,我必须使用一个密钥命名系统来代替:

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

client.watchAsync( "test_array" )
    then( ( ) =>
        multi.set( "test_array", "[1, 2]" )
            .get( "test_array" )
            .execAsync( ) 
    )
    .then( console.log ); // [ 0, "[1, 2]" ]

有关此文档的文档确实很少,但是我希望这个问题对将来的人有所帮助。


您从未来开始阅读吗?

如果您日后阅读此书,现在就可以享受我对node_redis项目的个人贡献并查看更新的文档:

https://github.com/NodeRedis/node_redis#optimistic-locks

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有