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

slhcrj9b  于 2023-11-16  发布在  Redis
关注(0)|答案(4)|浏览(145)

我有一个对象数组,我想存储在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;
            }
        }


请建议哪种路线是最好的一些实施?

gblwokeq

gblwokeq1#

我发现的工作是将键存储为唯一标识符,并在存储数据时对整个对象进行字符串化,并在提取数据时应用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不会很大,但在使用这种方法时需要记住这一点。

t5fffqht

t5fffqht2#

Redis是非常简单的键值存储。是的,还有其他数据结构,如集合,但它的查询能力非常有限。例如,如果你想通过名称查找数据,那么你必须这样做:
SET名称“对象的序列化数据”
SET Name 2“对象2的序列化数据”
SET Name 3“对象3的序列化数据”
然后:
获取名称
将返回数据。
当然,这意味着你不能存储两个同名的条目。
您可以使用http://redis.io/commands/scan对键进行有限的文本匹配

总结一下:我认为你应该使用其他工具来进行复杂的查询。

63lcw9qa

63lcw9qa3#

第一个问题,SADD id {“name”:“Saras”} //wrong,很明显,因为“id”键不是set类型,而是字符串类型。
在redis中,数据的唯一访问点是通过它的密钥,正如kiss所说,也许你应该寻找其他工具。

blmhpbnm

blmhpbnm4#

如果你试图存储一个[ {}, {}, {} ]形式的对象数组,
只要设置数据,因为它是在形式和检索时,只是解析它,我希望这将工作。

相关问题