当前位置: 首页 > 面试题库 >

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

关项明
2023-03-14
问题内容

我有一个要存储在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不会很大,但是在使用这种方法时必须牢记这一点。



 类似资料:
  • 问题内容: 可以说我有一个由几个属性(ID,名称,Surename,Age)组成的对象(用户)。哪种方法最好在Redis中存储该对象? 将每个属性值存储在专用密钥中,例如,用户:{id}:id,用户:{id}:name,用户:{id}:surename,用户:{id}:age 将整个User对象作为JSON字符串存储在一个密钥中,例如user:{id}:json(密钥的值将如下所示:{“ ID”:

  • 问题内容: 这就是事情- 我想在特定键下的redis中存储本机JS(node.js)对象(闪存套接字引用)。当我简单地做到这一点时,它存储为一个字符串。当我尝试获得价值时,我得到的只是一个字符串。 有机会工作吗?这是我的代码: 问题答案: 下载者:这里的上下文是SET命令,可以存储任意对象。 不,你不能那样做。您应该接受以下事实:Redis将所有内容存储为字符串(毕竟,协议是基于文本的)。Redi

  • 问题内容: hmset函数可以设置每个字段的值,但是我发现,如果值本身是一个复杂的结构化对象,则从hget返回的值是一个序列化的字符串,而不是原始对象 例如 i的类型是字符串,而不是python对象,除了手动解析每个字段外,还有什么方法可以解决此问题? 问题答案: 您无法在Redis中创建嵌套结构,这意味着您无法(例如)在本地Redis哈希图中存储本地Redis列表。 如果确实需要嵌套结构,则可能

  • 如何在一个对象中存储对象和数组?更新一个对象内的对象和数组 const obj={key1:1,key2:2,key3:3,keys:['key1','key2','key3']};我在一次采访中得到了这个问题。现在我想在对象中添加一些新数据。2无论何时添加到对象中,都应在该主对象内的数组中更新“key_”(添加了key number)。 输出应该是这样的(你可以使用任何方法/函数/循环来更新它.

  • 问题内容: 我对Redis还是很陌生,希望看看是否有可能。想象一下我正在接收这样的数据: 并为另一个帐户接收此数据: 我想以类似的格式将这些数据保留在Redis中: 对于xyz: 所以问题是我应该使用哪种数据类型来存储此Redis? 问题答案: 如果您的目标是检查是否用作该帐户的解决方案,则解决方案应类似于: 样本数据 执行此操作( 使用redis集 ): 然后,您可以通过以下命令检查是否用作该帐

  • 问题内容: 我想在redis中存储哈希数组,最好的编码方法是什么? 问题答案: AFAIK的唯一方法是取消引用它们。假设您有2个散列数组,例如:。 您将它们分别存储,然后创建一个引用它们全部的SET: 然后,您可以通过查询set:来检索它们全部,然后调用所有返回的键来重建原始的哈希数组。 我希望这是有道理的。而且,如果您找到了更聪明的方法,我将很高兴听到。