RedisJSON入门

2021-12-23  本文已影响0人  lcjyzm

变更记录

时间 描述
2022年5月27日15:04:37 2.介绍中新增特点;
3.安装中增加推荐标记
RedisJSON API命令部分新增: JSON.CLEAR,JSON.FORGET,JSON.RESP,JSON.TOGGLE

1,资料

github: https://github.com/RedisJSON/RedisJSON
website: https://oss.redis.com/redisjson/

2,介绍

使用RediSearch时,支持二级索引


#### 3,安装

##### 3.1,加载模块安装

```sh
方式1:
redis-server --loadmodule /usr/lib/redis/module/rejson.so

方式2(推荐):
在redis.conf中,添加一下内容:
loadmodule /usr/lib/redis/module/rejson.so
3.2,docker安装
image-20211222143720651.png

清空容器的值或将数字重置为0(要使用新版本,旧版本,标量值不变)

已经清空的会忽略,返回清空的值的数

JSON.CLEAR key [path]
JSON.SET doc $ '{"obj":{"a":1, "b":2}, "arr":[1,2,3], "str": "foo", "bool": true, "int": 42, "float": 3.14}'

清空,返回4,因为str,bool不会清空

JSON.CLEAR doc $.*

清空所有的,返回1

JSON.CLEAR doc

查询

JSON.GET doc $

删除指定的key的值,返回删除的数量

JSON.FORGET 等同于 json.del

json.set doc "{\"obj\":{},\"arr\":[1,2,3],\"str\":\"foo\",\"bool\":true,\"int\":42,\"float\":3.14}" json.forget doc.str

不支持,没办法使用

以redis序列化协议形式返回json https://redis.io/docs/reference/protocol-spec/#resp-bulk-strings

JSON.RESP key [path]
序列化是转化规则:
JSON Null映射到Bulk string reply
JSON false和true值映射到Simple string reply
JSON Numbers根据类型映射到[]
JSON字符串映射到Bulk string reply
JSON数组表示为[][后面跟着数组的元素
JSON对象表示为[]。

存储一个bool值,通过toggle来切换

redis> JSON.SET doc '{"bool": true}' OK redis> JSON.TOGGLE doc.bool

  1. (integer) 0
    redis> JSON.GET doc "[{\"bool\":false}]" redis> JSON.TOGGLE doc.bool
  2. (integer) 1
    redis> JSON.GET doc $
    "[{"bool":true}]"

字符串

```sh
#添加
127.0.0.1:6379> JSON.SET foo . '"bar"'
OK

#查询
127.0.0.1:6379> JSON.GET foo
"\"bar\""

#类型
127.0.0.1:6379> JSON.TYPE foo
"string"

#字符串长度
127.0.0.1:6379> JSON.STRLEN foo
(integer) 3

#字符串追加
127.0.0.1:6379> json.strappend foo . '"lish"'
(integer) 7

127.0.0.1:6379> json.get foo
"\"barlish\""

数字

#添加num
127.0.0.1:6379> json.set num . 0
OK

#num加1
127.0.0.1:6379> json.numincrby num . 1
"1"

#num加2.5
127.0.0.1:6379> json.numincrby num . 2.5
"3.5"

#num减0.5
127.0.0.1:6379> json.numincrby num . -0.5
"3"

#num乘10
127.0.0.1:6379> json.nummultby num . 10
"30"

127.0.0.1:6379> json.get num
"30.0"

json数据

#添加json字符串
127.0.0.1:6379> JSON.SET user . '{"name":"lcj","age":23}'
OK

#查询
127.0.0.1:6379> JSON.GET user
"{\"name\":\"lcj\",\"age\":23}"

#数据类型
127.0.0.1:6379> JSON.TYPE user
"object"

#数据元素个数
127.0.0.1:6379> json.objlen user
(integer) 2

#所有的key
127.0.0.1:6379> json.objkeys user
1) "name"
2) "age"

数组

#添加空数组
127.0.0.1:6379> json.set arr . []
OK

#追加数据
127.0.0.1:6379> json.arrappend arr . true
(integer) 1
127.0.0.1:6379> json.arrappend arr . '{"answer":42}'
(integer) 2
127.0.0.1:6379> json.arrappend arr . null
(integer) 3

#查询
127.0.0.1:6379> json.get arr
"[true,{\"answer\":42},null]"

#查询数组某个元素
127.0.0.1:6379> json.get arr [1].answer
"42"

#删除最后一个元素
127.0.0.1:6379> json.del arr [-1]
(integer) 1


#指定位置插入数据
127.0.0.1:6379> json.arrinsert arr . 0 -2 -1
(integer) 4

127.0.0.1:6379> json.get arr
"[-2,-1,true,{\"answer\":42}]"

#删除元素,只保留指定范围的元素
127.0.0.1:6379> json.arrtrim arr . 2 3
(integer) 1


#获取数据并删除
127.0.0.1:6379> json.arrpop arr
"true"
127.0.0.1:6379> json.arrpop arr
(nil)
3.3,内存使用(实验的和文档不一致)
RedisJSON的数据的值最少占用24字节(64位机器上)
使用json.debug memory key计算大小

字符串最少占用24字节
127.0.0.1:6379> json.set str . '""'
OK
127.0.0.1:6379> json.debug memory str
(integer) 24

数组最少占用24个字节
127.0.0.1:6379> json.set arr . []
OK
127.0.0.1:6379> json.debug memory arr
(integer) 24

json对象最少占用72个字节
127.0.0.1:6379> json.set obj . {}
OK
127.0.0.1:6379> json.debug memory obj
(integer) 72
3.4,路径语法
RedisJSON目前支持两种查询语法:JSONPath语法和RedisJSON第一个版本的路径语法。

RedisJSON根据路径查询的第一个字符决定使用哪种语法。如果查询以字符$开头,则使用JSONPath语法。否则,它默认为路径语法。

JSONPath:
RedisJSON 2.0引入了JSONPath支持。
JSONPath查询可以解析JSON文档中的多个位置。在这种情况下,JSON命令将操作每个可能的位置。这是对遗留查询的重大改进,早期查询只在第一条路径上运行。
注意,在使用JSONPath时,命令响应的结构通常不同。
新语法支持括号表示法,允许在键名中使用特殊字符,如冒号“:”或空格。

Legacy Path syntax (RedisJSON v1):
RedisJSON的第一个版本有以下实现。RedisJSON v2仍然支持它。
路径总是从JSON值的根开始。根由字符(.)表示。对于引用根的子级的路径,可以选择在路径前面加上根前缀。
要访问数组元素,请将其索引括在一对方括号内。索引是基于0的,0是数组的第一个元素。可以使用负偏移来访问从数组末端开始的元素。-1是数组中的最后一个元素

json key的规则:
必须以字符,$,_开头
可以包含字符,数字,$,_
大小写敏感

JSON value规则:
JSON值是指任何有效值。既可以是JSON数组,也可以是JSON对象。JSON标量是一个JSON数字,一个JSON字符串,或一个常量(JSON False, JSON True,或JSON Null)
3.5,搜索和索引
上一篇 下一篇

猜你喜欢

热点阅读