我有一个要存储在Redis中的对象数组。我可以分解数组部分,并将它们存储为对象,但是我不知道如何获得类似
{0} : {"foo" :"bar", "qux" : "doe"}, {1} : {"name" "Saras", "age" : 23}
然后根据名称搜索数据库,并获取返回的密钥。我需要这样的东西。但几乎无法做到正确。
incr id //correct (integer) 3 get id //correct "3" SADD id {"name" : "Saras"} //wrong SADD myset {"name" : "Saras"} //correct (integer) 1
首先是使这一部分正确。
其次是以某种方式从值中获取密钥,即
if name==="Saras" then key=1
我觉得很难。或者,我可以将其直接存储为对象数组并使用简单的for循环。
for (var i = 0; i < userCache.users.length; i++) { if (userCache.users[i].userId == userId && userCache.users[i].deviceId == deviceId) { return i; } }
请建议哪种路线最适合某些实现?
我发现工作是将密钥存储为唯一标识符,并在存储数据时对整个对象进行字符串化,并在提取数据时应用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; });
尽管先进行字符串化然后再解析回去,这是一个计算量大的操作,并且如果JSON的大小变大,它将阻塞Node.js服务器。我可能已经准备好降低复杂性,因为我知道我的JSON不会很大,但是在使用这种方法时必须牢记这一点。