redis - LPUSH 命令是否适用于从 JSON 初始化的记录?

标签 redis

如果 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/

相关文章:

ruby - 如何减少 Ruby/Sinatra 应用程序中的 Redis 连接?使用连接池?

redis - 使用前缀匹配模式的 redis 扫描是否扫描数据库中的所有键?

node.js - 如何使用 NodeJs 在 Redis 中插入数据?

c# - Catch Microsoft.Extensions.Caching.Redis 连接失败?

redis - SignalR.Redis 和 ServiceStack.Redis 在同一个网络应用程序中

javascript - Redis:使用列表保存 Javascript 对象

sql-server - 调用的目标抛出了异常。 (REDIS缓存)

performance - 实时查询亿条记录

django - 连接 django-rq 时出错 : ImportError: cannot import name get_failed_queue

docker - 如何在 jenkins 的 docker 容器中运行 redis?