如何在Redis中存储对象数组?

Sar*_*rya 5 redis node-redis

我有一组要存储在 Redis 中的对象。我可以分解数组部分并将它们存储为对象,但我不知道如何获得类似的东西

{0} : {"foo" :"bar", "qux" : "doe"}, {1} : {"name" "Saras", "age" : 23} 
Run Code Online (Sandbox Code Playgroud)

然后根据名称搜索数据库并取回请求的密钥。我需要这样的东西。但不能接近正确。

incr id //correct
(integer) 3
get id //correct
"3"
SADD id {"name" : "Saras"} //wrong 
SADD myset {"name" : "Saras"} //correct
(integer) 1
Run Code Online (Sandbox Code Playgroud)

首先是正确处理这部分。

其次是以某种方式从值中获取密钥,即

if name==="Saras"  
then key=1
Run Code Online (Sandbox Code Playgroud)

我觉得很难。或者我可以将它直接存储为对象数组并使用简单的 for 循环。

 for (var i = 0; i < userCache.users.length; i++) {
            if (userCache.users[i].userId == userId && userCache.users[i].deviceId == deviceId) {
                return i;
            }
        }
Run Code Online (Sandbox Code Playgroud)

请建议哪种路线最适合某些实施?

Sar*_*rya 8

我发现有效的方法是将密钥存储为唯一标识符,并在存储数据时对整个对象进行字符串化,并在提取数据时应用 JSON.parse。

示例代码:

client
    .setAsync(obj.deviceId.toString(), JSON.stringify(obj))
    .then((doc) => {
        return client.getAsync(obj.deviceId.toString());
    })
    .then((doc) => {
        return JSON.parse(doc);
    }).catch((err) => {
        return err;
    });
Run Code Online (Sandbox Code Playgroud)

尽管字符串化然后解析它是一项计算量很大的操作,并且如果 JSON 的大小变大,将会阻塞 Node.js 服务器。我可能已经准备好接受较低复杂性的打击,因为我知道我的 JSON 不会很大,但在采用这种方法时需要牢记这一点。