如果从包含列表的JSON对象设置了redis记录,那么稍后可以在该列表上使用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\"]}"
Run Code Online (Sandbox Code Playgroud)
添加新女友可以使用eval命令在一个操作中实现:
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
Run Code Online (Sandbox Code Playgroud)
另一种可能性是避免将JSON对象直接存储在Redis中,而是编写一个层以将JSON对象转换为多个Redis密钥(隔离其特定密钥中的列表部分).
例如:
{ "id":1, "name": "Rocco", "age":50,
girlfriends: [ "Ulla", "Bella", "Josepha", "Isabella" ] }
Run Code Online (Sandbox Code Playgroud)
可以存储为:
HMSET users:1:info name Rocco age 50
RPUSH users:1:girlfriends Ulla Bella Josepha Isabella
Run Code Online (Sandbox Code Playgroud)
这种方法的主要好处是性能和部分更新支持.主要缺点是失去了一些灵活性,转换代码编写起来可能很繁琐.
| 归档时间: |
|
| 查看次数: |
1898 次 |
| 最近记录: |