我有一个对象数组,我想存储在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;
}
}
型
请建议哪种路线是最好的一些实施?
4条答案
按热度按时间gblwokeq1#
我发现的工作是将键存储为唯一标识符,并在存储数据时对整个对象进行字符串化,并在提取数据时应用JSON.parse。
示例代码:
字符串
虽然字符串化然后解析它是一个计算量很大的操作,并且如果JSON的大小变大,会阻塞Node.js服务器。我可能已经准备好降低复杂性,因为我知道我的JSON不会很大,但在使用这种方法时需要记住这一点。
t5fffqht2#
Redis是非常简单的键值存储。是的,还有其他数据结构,如集合,但它的查询能力非常有限。例如,如果你想通过名称查找数据,那么你必须这样做:
SET名称“对象的序列化数据”
SET Name 2“对象2的序列化数据”
SET Name 3“对象3的序列化数据”
然后:
获取名称
将返回数据。
当然,这意味着你不能存储两个同名的条目。
您可以使用http://redis.io/commands/scan对键进行有限的文本匹配
总结一下:我认为你应该使用其他工具来进行复杂的查询。
63lcw9qa3#
第一个问题,SADD id {“name”:“Saras”} //wrong,很明显,因为“id”键不是set类型,而是字符串类型。
在redis中,数据的唯一访问点是通过它的密钥,正如kiss所说,也许你应该寻找其他工具。
blmhpbnm4#
如果你试图存储一个
[ {}, {}, {} ]
形式的对象数组,只要设置数据,因为它是在形式和检索时,只是解析它,我希望这将工作。