RedisJSON标准交互指令是基本功,所以需要一个篇幅去介绍。LINKCORE的Data层与RedisJSON的交互驱动业主要关联内容之一 关键字:Redis,json,RedisJSON [[toc]]
原文地址
https://oss.redis.com/redisjson/commands/
RedisJSON API
每个模块的命令如下所述。每个部分的标题显示了命令的语法,其中:
- 命令和子命令的名称都是大写的,例如
JSON.SET
或INDENT
- 强制参数用尖括号括起来,例如
<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
则表示 NX
或 XX
条件未命中
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)