我想要在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 %}
请建议哪些路线最适合某些实施?
答案 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中,数据的唯一访问点是通过其密钥。 亲吻说,也许你应该寻找其他工具。