LPUSH命令是否可以处理从JSON初始化的记录?

use*_*956 3 redis

如果从包含列表的JSON对象设置了redis记录,那么稍后可以在该列表上使用LPUSH命令来更新它吗?(在node.js上使用redis)谢谢

Did*_*zia 8

不,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)

这种方法的主要好处是性能和部分更新支持.主要缺点是失去了一些灵活性,转换代码编写起来可能很繁琐.