如果从包含列表的JSON对象设置了redis记录,那么稍后可以在该列表上使用LPUSH命令来更新它吗? (在node.js上使用redis) 感谢
答案 0 :(得分:8)
没有。 Redis格式不可知。 它无法解析JSON,也不是面向文档的数据库。
LPUSH仅适用于Redis列表对象。
然而,使用Lua Redis 2.6服务器端脚本功能可以做什么,是一个解码JSON对象,添加项目,编码回来并存储它的脚本。
例如,使用以下JSON对象:
set users:1 "{\"id\":1,\"name\":\"Rocco\",\"age\":50,girlfriends:[\"Ulla\"]}"
添加新女友可以使用eval command:
在一次操作中实施eval "local t = cjson.decode( redis.call('get',KEYS[1] ))
if t.girlfriends then
table.insert(t.girlfriends,ARGV[1])
else
t.girlfriends = {ARGV[1]}
end
return redis.call('set',KEYS[1], cjson.encode(t))
" 1 user:1 Augusta
另一种可能性是避免直接在Redis中存储JSON对象,但写一个层将JSON对象转换为几个Redis键(隔离其特定键中的列表部分)。
例如:
{ "id":1, "name": "Rocco", "age":50,
girlfriends: [ "Ulla", "Bella", "Josepha", "Isabella" ] }
可以存储为:
HMSET users:1:info name Rocco age 50
RPUSH users:1:girlfriends Ulla Bella Josepha Isabella
此方法的主要优点是性能和部分更新支持。主要缺点是失去了一些灵活性,转换代码编写起来可能很繁琐。