XIKEW.COM - 实用教程 - RedisJSON 学习手册三 - 实用教程,Redis,json,RedisJSON - RedisJSON标准交互指令是基本功,所以需要一个篇幅去介绍。LINKCORE的Data层与RedisJSON的交互驱动业主要关联内容之一

RedisJSON 学习手册三
REDIS REDISJSON JSON 12/21/2021 2:30:49 PM 阅读:191

RedisJSON标准交互指令是基本功,所以需要一个篇幅去介绍。LINKCORE的Data层与RedisJSON的交互驱动业主要关联内容之一 关键字:Redis,json,RedisJSON

原文地址

https://oss.redis.com/redisjson/commands/

RedisJSON API

每个模块的命令如下所述。每个部分的标题显示了命令的语法,其中:

  • 命令和子命令的名称都是大写的,例如 JSON.SETINDENT
  • 强制参数用尖括号括起来,例如 <path>
  • 可选参数用方括号括起来,例如 [索引]
  • 其他可选参数由三个句点字符表示,即 ...
  • 特殊字符 | 表示逻辑或

命令通常需要键的名称作为第一个参数。如果没有指定路径,则通常假定路径为根 命令的时间复杂度不包括路径的时间复杂度。

标准指令

JSON.SET

版本:1.0.0+ 复杂度:O(M+N)当路径计算为单个值时,其中 M 是原始值的大小(如果存在) ,N 是新值的大小,当 path 计算为多个值时,其中 M 是键的大小,N 是新值的大小。

语法:

JSON.SET <key> <path> <json>
         [NX | XX]

说明: 在 key 的 path 处设置 JSON 值 对于新的 Redis 键,路径必须是根。对于现有键,当整个路径存在时,它包含的值将被 json 值替换。

NX - 只有在key不存在的情况下设置 XX - 只有在key存在的情况下设置

返回值: 如果返回字符串 OK 则表示执行正常, 如果返回 Null Bulk 则表示 NXXX 条件未命中

JSON.GET

版本:1.0.0+ 复杂度:O(N)当路径被求值为单个值时,其中 N 是值的大小,当路径被求值为多个值时,其中 N 是键的大小。

语法:

JSON.GET <key>
         [INDENT indentation-string]
         [NEWLINE line-break-string]
         [SPACE space-string]
         [path ...]

说明: 以 JSON 序列化形式返回 path 处的值。 此命令接受多个 path s,如果没有给出 path,则默认为值的根。 默认情况下子命令为空,* INDENT 设置嵌套级别的缩进字符串,* NEWLINE 设置每行末尾打印的字符串,* SPACE 设置置于键和值之间的字符串 通过以下示例,可以使用 redis-cli 生成漂亮格式的 JSON:

~/$ redis-cli --raw
127.0.0.1:6379> JSON.GET myjsonkey INDENT "缩进" NEWLINE "换行" SPACE "空格" path.to.value[1]

返回值: 批量字符串数组(Array of Bulk Strings),具体来说,是根据path匹配出来的JSON的序列化后以字符串的方式返回。 当使用 JSONPath(而不是传统路径)时,匹配值的根总是一个数组。而传统路径返回单个值。如果是混合两种路径的情况下,返回的值符合 JSONPath 版本。

例子:

127.0.0.1:6379> JSON.SET doc $ '{"a":2, "b": 3, "nested": {"a": 4, "b": null}}'
OK

使用单个 JSONPath (json 数组大容量字符串) :

127.0.0.1:6379> JSON.GET doc $..b
"[3,null]"

使用至少有一个 JSONPath 的多个路径(每个路径有一个 json 值数组的映射) :

127.0.0.1:6379> JSON.GET doc ..a $..b
"{\"$..b\":[3,null],\"..a\":[2,4]}"

JSON.MGET

版本:1.0.0+ 复杂度:O(M*N)当路径计算为单个值时,其中 M 是键的个数,N 是值的大小

语法:

JSON.MGET <key> [key ...] <path>

说明: 返回来自多个键的路径值,不存在的键和不存在的路径报告为空。

返回值: 批量字符串数组(Array of Bulk Strings),确切的说是每个键的路径值的 JSON 序列化。

例子:

127.0.0.1:6379> JSON.SET doc1 $ '{"a":1, "b": 2, "nested": {"a": 3}, "c": null}'
OK
127.0.0.1:6379> JSON.SET doc2 $ '{"a":4, "b": 5, "nested": {"a": 6}, "c": null}'
OK
127.0.0.1:6379> JSON.MGET doc1 doc2 $..a
1) "[1,3]"
2) "[4,6]"

JSON.DEL

版本:1.0.0+ 复杂度:O(N)当路径计算为单个值时,其中 N 是已删除值的大小。当 path 计算为多个值时,其中 N 是键的大小。

语法:

JSON.DEL <key> [path]

说明: 删除一个值。

返回值: 整数,确切的说是删除的路径数(0或更多)。

例子:

127.0.0.1:6379> JSON.SET doc $ '{"a": 1, "nested": {"a": 2, "b": 3}}'
OK
127.0.0.1:6379> JSON.DEL doc $..a
(integer) 2

JSON.NUMINCRBY

版本:1.0.0+ 复杂度:O(1)当路径计算为单个值时,O(N)当 path 计算为多个值时,其中 N 是键的大小。

语法:

JSON.NUMINCRBY <key> <path> <number>

说明: 将存储在路径的数字值递增。

返回值: Bulk String 批量字符串,如果匹配的JSON值不是数字,则每个路径的合成新值或null元素。

例子:

127.0.0.1:6379> JSON.SET doc . '{"a":"b","b":[{"a":2}, {"a":5}, {"a":"c"}]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY doc $.a 2
"[null]"
127.0.0.1:6379> JSON.NUMINCRBY doc $..a 2
"[null,4,7,null]"

JSON.NUMMULTBY

不赞成-将被删除在下一个版本 版本:1.0.0+ 复杂度:O(M*N)当路径计算为单个值时,其中 M 是键的个数,N 是值的大小

用法同 JSON.NUMINCRBY

JSON.STRAPPEND

版本:1.0.0+ 复杂度:O(M*N)当路径计算为单个值时,其中 M 是键的个数,N 是值的大小

语法:

JSON.STRAPPEND <key> [path] <json-string>

说明: 将JSON-String值附加到路径的字符串。如果没有提供,路径默认为 root。

返回值: 数字数组,对于每个路径,表示字符串的新长度,如果匹配的 JSON 值不是数组,则表示空元素。

例子:

127.0.0.1:6379> JSON.SET doc $ '{"a":"foo", "nested": {"a": "hello"}, "nested2": {"a": 31}}'
OK
127.0.0.1:6379> JSON.STRAPPEND doc $..a '"baz"'
1) (integer) 6
2) (integer) 8
3) (nil)
127.0.0.1:6379> JSON.GET doc $
"[{\"a\":\"foobaz\",\"nested\":{\"a\":\"hellobaz\"},\"nested2\":{\"a\":31}}]"

JSON.STRLEN

版本:1.0.0+ 复杂度:O(M*N)当路径计算为单个值时,其中 M 是键的个数,N 是值的大小

语法:

JSON.STRLEN <key> [path]

说明: 用 key 报告 JSON 字符串在 path 处的长度。如果没有提供路径,则默认为 root。如果键或路径不存在,则返回 null。

返回值: 数字数组,对于每个路径,表示字符串的新长度,如果匹配的 JSON 值不是数组,则表示空元素。

例子:

127.0.0.1:6379> JSON.SET doc $ '{"a":"foo", "nested": {"a": "hello"}, "nested2": {"a": 31}}'
OK
127.0.0.1:6379> JSON.STRLEN doc $..a
1) (integer) 3
2) (integer) 5
3) (nil)