这次我们来学习数组指令(用来对于path路径下为数组的值进行处)、对象指令及模组指令 关键字: Redis,RedisJSON,JSON,Array,Object,Module
[[toc]]
数组指令
JSON.ARRAPPEND
版本:1.0.0+ 复杂度:O(1)当路径计算为单个值时,O(N)当 path 计算为多个值时,其中 N 是键的数量。
语法:
JSON.ARRAPPEND <key> <path> <json> [json ...]
说明:
将 <json>
值追加到 path 路径下的值类型为数组的最后一位。
返回值: 数字数组,对于每个路径,表示字符串的新长度,如果匹配的 JSON 值不是数组,则表示空元素。
例子:
127.0.0.1:6379> JSON.SET doc $ '{"a":[1], "nested": {"a": [1,2]}, "nested2": {"a": 42}}'
OK
127.0.0.1:6379> JSON.ARRAPPEND doc $..a 3 4
1) (integer) 3
2) (integer) 4
3) (nil)
127.0.0.1:6379> JSON.GET doc $
"[{\"a\":[1,3,4],\"nested\":{\"a\":[1,2,3,4]},\"nested2\":{\"a\":42}}]"
JSON.ARRINDEX
版本:1.0.0+ 复杂度:O(N)当path值为单个数组时N表示为数组长度,当path值为多个数组时则N表键的数量。
语法:
JSON.ARRINDEX <key> <path> <json-scalar> [start [stop]]
说明: 搜索数组中标量 JSON 值的第一次出现。 可选参数 [start] (默认值为0) 和 [stop] (默认值为0,意思是包含最后一个元素) 指定要搜索的数组的切片,负值被解释为从末尾开始。
返回值: 数字数组,对于每个路径,返回的数字表示搜索的值在数组中第一次出现的标量值,负数则表示在数组内找不到,如果匹配的 JSON 值不是数组,则表示null。
例子:
127.0.0.1:6379> JSON.SET doc $ '{"a":[1,2,3,2], "nested": {"a": [3,4]}}'
OK
127.0.0.1:6379> JSON.ARRINDEX doc $..a 2
1) (integer) 1
2) (integer) -1
127.0.0.1:6379> JSON.SET doc $ '{"a":[1,2,3,2], "nested": {"a": false}}'
OK
127.0.0.1:6379> JSON.ARRINDEX doc $..a 2
1) (integer) 1
2) (nil)
JSON.ARRINSERT
版本:1.0.0+ 复杂度:O(N)当path值为单个数组时N表示为数组长度,当path值为多个数组时则N表键的数量。
语法:
JSON.ARRINSERT <key> <path> <index> <json> [json ...]
说明:
将 <json>
值插入到 <path>
对应的数组的 <index>
位置的前面。索引必须在数组的范围内。<index>
为 0
则表示加到数组的第一个位置,负索引值被解释为从末尾开始。
返回值: 数字数组,对于每个路径,表示字符串的新长度,如果匹配的 JSON 值不是数组,则表示空元素。
例子:
127.0.0.1:6379> JSON.SET doc $ '{"a":[3], "nested": {"a": [3,4]}}'
OK
127.0.0.1:6379> JSON.ARRINSERT doc $..a 0 1 2
1) (integer) 3
2) (integer) 4
127.0.0.1:6379> JSON.GET doc $
"[{"a":[1,3,4],"nested":{"a":[1,2,3,4]},"nested2":{"a":42}}]"
127.0.0.1:6379> JSON.SET doc $ '{"a":[1,2,3,2], "nested": {"a": false}}'
OK
127.0.0.1:6379> JSON.ARRINSERT doc $..a 0 1 2
1) (integer) 6
2) (nil)
JSON.ARRLEN
版本:1.0.0+ 复杂度:O(1)当path值为单个值时,当path值为多个值时则N表键的数量。
语法:
JSON.ARRLEN <key> [path]
说明:
返回指定的<path>
下的<key>
对应的数组的长度
不提供<path>
时默认为根目录,<path>
和<key>
都不提供时返回null
返回值: 整数数组,确切的说返回对应的数组长度,当无法匹配到数组时返回null
例子:
127.0.0.1:6379> JSON.SET doc $ '{"a":[3], "nested": {"a": [3,4]}}'
OK
127.0.0.1:6379> JSON.ARRLEN doc $..a
1) (integer) 1
2) (integer) 2
127.0.0.1:6379> JSON.SET doc $ '{"a":[1,2,3,2], "nested": {"a": false}}'
OK
127.0.0.1:6379> JSON.ARRLEN doc $..a
1) (integer) 4
2) (nil)
JSON.ARRPOP
版本:1.0.0+ 复杂度:O(N)当 path 被评估为单个值时,其中 N 是数组的大小并且指定的索引不是最后一个元素,O(1)当 path 被评估为单个值并且指定的索引是最后一个元素时,O(N) 当 path 被评估为多个值时,其中 N 被视为 键的大小
语法:
JSON.ARRPOP <key> [path [index]]
说明:
从数组中的索引中删除并返回元素。
<path>
未被提供时默认为根目录,<index>
数组中开始出栈的位置(默认为-1,最后的位置),超出范围的索引四舍五入到它们各自的数组末端,空数组会产生 null
返回值: 出栈值的数组,确切的说是出栈的JSON值,或者在非数组情况下返回null
例子:
127.0.0.1:6379> JSON.SET doc $ '{"a":[3], "nested": {"a": [3,4]}}'
OK
127.0.0.1:6379> JSON.ARRPOP doc $..a
1) "3"
2) "4"
127.0.0.1:6379> JSON.GET doc $
"[{\"a\":[],\"nested\":{\"a\":[3]}}]"
127.0.0.1:6379> JSON.SET doc $ '{"a":["foo", "bar"], "nested": {"a": false}, "nested2": {"a":[]}}'
OK
127.0.0.1:6379> JSON.ARRPOP doc $..a
1) "\"bar\""
2) (nil)
3) (nil)
JSON.ARRTRIM
版本:1.0.0+ 复杂度:O(N)当path值为单个数组时N表示为数组长度,当path值为多个数组时则N表键的数量。
语法:
JSON.ARRTRIM <key> <path> <start> <stop>
说明:
修剪数组,使其仅包含指定的包含范围的元素。
此命令非常宽容,将它与超出范围的索引一起使用不会产生错误。如果 <start>
大于数组的大小或 <start>
> <stop>
,结果将是一个空数组。如果 <start>
< 0 那么它将被视为 0。如果 <stop>
大于数组的末尾,它将被视为其中的最后一个元素。
返回值: 数字数组,对于每个路径,表示字符串的新长度,如果匹配的 JSON 值不是数组,则表示空元素。
例子:
127.0.0.1:6379> JSON.ARRTRIM doc $..a 1 1
1) (integer) 0
2) (integer) 1
127.0.0.1:6379> JSON.GET doc $
"[{\"a\":[],\"nested\":{\"a\":[4]}}]"
127.0.0.1:6379> JSON.SET doc $ '{"a":[1,2,3,2], "nested": {"a": false}}'
OK
127.0.0.1:6379> JSON.ARRTRIM doc $..a 1 1
1) (integer) 1
2) (nil)
对象指令
JSON.OBJKEYS
版本:1.0.0+ 复杂度:O(N)当path值为单个值时N为keys对应的对象数量,当path值为多个值时则N表键的大小。
语法:
JSON.OBJKEYS <key> [path]
说明:
返回由 path 引用的对象中的键。
[path]
未提供时默认为根目录,当<key>
和[path]
都不存在时返回null
返回值: 包含键的数组,准确的说匹配path的对象的键数组,当无匹配内容时返回null
例子:
127.0.0.1:6379> JSON.SET doc $ '{"a":[3], "nested": {"a": {"b":2, "c": 1}}}'
OK
127.0.0.1:6379> JSON.OBJKEYS doc $..a
1) (nil)
2) 1) "b"
2) "c"
JSON.OBJLEN
版本:1.0.0+ 复杂度:O(1)当path值为单个值时,当path值为多个值时则N表键的大小。
语法:
JSON.OBJLEN <key> [path]
说明:
[path]
对应的 <key>
的 JSON对象。
[path]
未提供则默认为根目录,无匹配结果则返回null。
返回值: 整数,确切的说是对象中的键数。
例子:
暂无
模块指令
JSON.TYPE
版本:1.0.0+ 复杂度:O(N)当path值为单个值时N为keys对应的对象数量,当path值为多个值时则N表键的大小。
语法:
JSON.TYPE <key> [path]
说明:
返回 [path]
对应的 JSON 值类型。
[path]
未提供则默认为根目录,无匹配结果则返回null。
返回值: 字符串数组,对应每一个路径的JSON值类型。
例子:
127.0.0.1:6379> JSON.SET doc $ '{"a":2, "nested": {"a": true}, "foo": "bar"}'
OK
127.0.0.1:6379> JSON.TYPE doc $..foo
1) "string"
127.0.0.1:6379> JSON.TYPE doc $..a
1) "integer"
2) "boolean"
127.0.0.1:6379> JSON.TYPE doc $..dummy
(empty array)
JSON.DEBUG
版本:1.0.0+ 复杂度:O(N)其中N为JSON值大小。
语法:
JSON.DEBUG <subcommand & arguments>
说明: 报告信息。 支持的子命令如下:
MEMORY <key> [path]
- 以字节的方式报告内存使用情况,[path]
未提供时默认为根目录HELP
- 报告帮助信息
返回值: 取决于所使用的子命令。
MEMORY
- 整数,内存使用的大小HELP
- 数组,帮助列表
例子:
无
JSON.FORGET
与 JSON.DEL
指令相同
JSON.RESP
版本:1.0.0+ 复杂度:O(N)当path值为单个值时N为值的大小,当path值为多个值时则N表键的大小。
语法:
JSON.RESP <key> [path]
说明:
返回<key>
对应符合 Redis Serialization Protocol (RESP) 协议的 JSON
[path]
未提供则默认为根目录。
返回值: 数组, 详细的 JSON 的 RESP 表格。
例子:
无