如果 redis 记录是从一个包含列表的 JSON 对象设置的,LPUSH 命令是否可以稍后在该列表上使用来更新它? (在 node.js 上使用 redis) 谢谢
最佳答案
没有。 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
另一种可能性是避免将 JSON 对象直接存储在 Redis 中,而是编写一个层将 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
这种方法的主要好处是性能和部分更新支持。主要缺点是失去了一些灵 active ,并且转换代码可能编写起来很乏味。
关于redis - LPUSH 命令是否适用于从 JSON 初始化的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10396764/