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

时间:2016-08-03 15:06:59

标签: redis node-redis

我想要在Redis中存储一个对象数组。我可以分解数组部分并将它们存储为对象,但我不知道如何获得像{0}这样的东西:{" foo" :" bar"," qux" :" doe"},{1}:{" name" " Saras","年龄" :23}然后根据名称搜索数据库并获取请求的密钥。我需要这样的东西。但是不能接近正确的做法。

incr id //正确 (整数)3 得到id //正确 " 3" SADD id {" name" :" Saras"} //错了 SADD myset {" name" :" Saras"} //正确 (整数)1

首先是让这部分正确。

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

PlayerInGame

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

{% for game in games %}
  Current game is: {{ game.name }}
  The players in the game are:
  <ul>
  {% for player in game.players.all %}
    <li>{{ player.player.first_name }} {{ player.player.last_name }}</li>
  {% endfor %}
  </ul>
{% endfor %}

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

Redis是非常简单的键值存储。是的,还有其他数据结构,如集合,但它具有非常有限的查询功能。例如,如果您想按名称查找数据,那么您将不得不这样:

SET名称“对象的序列化数据”

SET Name2“object2的序列化数据”

SET Name3“object3的序列化数据”

然后:

获取名称

会返回数据。

当然这意味着你不能存储两个名称相同的条目。

您可以使用以下方法对密钥进行有限的文本匹配:http://redis.io/commands/scan

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

答案 2 :(得分:0)

你有第一个问题,SADD id {&#34; name&#34; :&#34; Saras&#34;} //错误,因为&#34; id&#34; key不是类型集,它是字符串类型。

在redis中,数据的唯一访问点是通过其密钥。 亲吻说,也许你应该寻找其他工具。