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

时间:2012-05-01 10:59:41

标签: redis

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

1 个答案:

答案 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

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