我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

苏南大叔刚刚给大家讲解了nodejs的初级使用,那么今天的话题就稍稍进阶一下,说说nodejs对redis的hash集合的操作方法。

苏南大叔:nodejs 如何操作 redis 的 hash 集合? - nodejs-redis-hash
nodejs 如何操作 redis 的 hash 集合?(图7-1)

函数说明

redis对集合的操作,相对普通的getset操作来说,有些复杂。他主要有下面的一些函数:hset,hget,hgetall,hmset,hkeys。 对,这些函数都是以h开头的,对应的就是hash的意思哦。那么请具体查看下面的demo。

var redis = require('redis');
var client = redis.createClient("6379","127.0.0.1",{auth_pass: "yoursecret"});
client.on("error", function (err) {
    console.log("redis client连接失败",err);
});
client.on('ready', function (res) {
    console.log('client ready');
});
client.on('connect', function () {
    client.hset("hash key", "field 1", "v1", redis.print);
    client.hset(["hash key", "field 2", "v2"], redis.print);
    client.hget("hash key", "field 1", redis.print);
    client.hgetall("hash key",function (err, items) {
        console.log(err,items);
    });
    client.hmset("hash key 2", "field3", "3", "field4", "4");
    client.hgetall("hash key 2", function (err, obj) {
        console.log("hgetall:",obj);
    });
    client.hmset("hash key 3", {
        "012345": "abcdefghij", // NOTE: key and value will be coerced to strings
        "field5": "5"
    });
    client.hgetall("hash key 3", function (err, obj) {
        console.log("hgetall:",obj);
    });
    client.hkeys("hash key", function (err, replies) {
        console.log("hkeys:",err,replies);
        replies.forEach(function (reply, i) {
            console.log("    " + i + ": " + reply);
        });
    });
    //client.quit();
});
client.on("error", function (err) {
    console.log("Error " + err);
});

运行结果

运行结果如下:

苏南大叔:nodejs 如何操作 redis 的 hash 集合? - 010
nodejs 如何操作 redis 的 hash 集合?(图7-2)

苏南大叔:nodejs 如何操作 redis 的 hash 集合? - 012
nodejs 如何操作 redis 的 hash 集合?(图7-3)

这个例子,我们可以看到,hset和hmset都可以赋值给一个hash集合,而hget可以取得某个集合中的某个filed,hgetall则可以取得某个集合内的所有值,hkeys,就是取得hash里面的key(field)。

情景复现

我们在命令行redis-cli里面,再加深一下印象。

苏南大叔:nodejs 如何操作 redis 的 hash 集合? - 015
nodejs 如何操作 redis 的 hash 集合?(图7-4)

苏南大叔:nodejs 如何操作 redis 的 hash 集合? - 016
nodejs 如何操作 redis 的 hash 集合?(图7-5)

苏南大叔:nodejs 如何操作 redis 的 hash 集合? - 017
nodejs 如何操作 redis 的 hash 集合?(图7-6)

在对比中,我们可以看到hmset的参数必须是基数个,因为第一个参数是hash的名字,后面的是key和val成对出现。而hgetall和hkeys的区别在于,hgetall不但返回key,还返回val,而hkeys仅仅返回key。而想象中的仅仅返回value的hvalue或者hvalues是不存在的哦。

苏南大叔:nodejs 如何操作 redis 的 hash 集合? - 018
nodejs 如何操作 redis 的 hash 集合?(图7-7)

这些就是hash集合的基本redis操作,其中key以及filed的概念较为混乱,redis-cli和redis-desktop里面关于这个的概念,似乎有些冲突,不过大家看看,明白就行了。

结语

欢迎大家关注苏南大叔的redis相关文章: https://newsn.net/tag/redis/
更多关于redis的npm包的使用问题,可以点击这里查看: https://npm.js.cn/package/redis

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   js    redis