RedisJSON—Redis的JSON数据类型¶
RedisJSON是一个雷迪斯实现的模块ECMA-404 JSON数据交换标准作为本机数据类型。它允许存储,更新和获取JSON值从Redis键(文档)。
主要特点:
- 完全支持JSON标准
- JSONPath-类似于在文档中选择元素的语法
- 文档以树结构的二进制数据存储,允许快速访问子元素
- 所有JSON值类型的类型化原子操作
RedisJSON是在小于3 at的情况下开发的Redis实验室.源代码可以在https://github.com/RedisJSON/RedisJSON上找到
快速入门¶
或者,您也可以自己构建和加载模块。构建和加载RedisJSON模块库
复述,云¶
RedisJSON可用于所有Redis云托管服务。RedisCloud Essentials提供了一个高达30MB的完全免费托管数据库。
使用Docker启动RedisJSON¶
使用Docker在Windows, MacOS或Linux上运行以下命令。
Docker运行-p 6379:6379——name redis-redisjson redislabs/rejson:latest
使用RedisJSON¶
在使用RedisJSON之前,您应该熟悉其命令和语法,如命令参考文档。然而,要快速开始,只需回顾这一节并获取:
- 运行该模块的Redis服务器(请参阅建筑和加载指令)
- 任何雷迪斯或RedisJSON客户
与redis-cli
¶
本示例将使用redis-cli
作为Redis客户端。要尝试的第一个RedisJSON命令是JSON。集
,它设置一个带有JSON值的Redis键。可以使用所有JSON值,例如字符串:
127.0.0.1:6379 > JSON。设置foo。'"bar"' OK 127.0.0.1:6379> JSON。GET foo "\"bar\"" 127.0.0.1:6379> JSON。输入foo。字符串
JSON.GET
和JSON。类型
不管值的类型,都要按字面意思做,但你真的应该检查出来吗JSON.GET
美化权力。注意命令是如何被赋予句点字符的,即。.
.这是路径到RedisJSON数据类型中的值(在本例中,它只是表示根)。还有两个字符串操作:
127.0.0.1:6379>JSON.STRLEN foo.3 127.0.0.1:6379>JSON.STRAPPEND foo.“baz”6 127.0.0.1:6379>JSON.GET foo.“barbaz”
JSON.STRLEN
告诉您字符串的长度,您可以将另一个字符串附加到它JSON。STRAPPEND
.数字可以是增加和增加:
127.0.0.1:6379 > JSON。全国矿工工会。0 ok 127.0.0.1:6379> json。NUMINCRBY num。1" 1" 127.0.0.1:6379> json。NUMINCRBY num。1.5”2.5”127.0.0.1:6379> json。NUMINCRBY num。-0.75 "1.75" 127.0.0.1:6379> json。NUMMULTBY num。24“42”
当然,一个更有趣的例子可能涉及数组或对象:
127.0.0.1:6379 > JSON。集amoreinterestingexample . '[ true, { "answer": 42 }, null ]' OK 127.0.0.1:6379> JSON.GET amoreinterestingexample "[true,{\"answer\":42},null]" 127.0.0.1:6379> JSON.GET amoreinterestingexample [1].answer "42" 127.0.0.1:6379> JSON.DEL amoreinterestingexample [-1] 1 127.0.0.1:6379> JSON.GET amoreinterestingexample "[true,{\"answer\":42}]"
手巧的JSON。▽
命令删除您告诉它的任何内容。可以使用RedisJSON命令的专用子集来操作数组:
127.0.0.1:6379>JSON.SET arr。[]确定127.0.0.1:6379>JSON.ARRAPPEND arr.0(整数)1127.0.1:6379>JSON.GET arr“[0]”127.0.0.1:6379>JSON.arr插入arr.0-2-1(整数)3127.0.0.1:6379>JSON.GET arr”[-2,-1,0]“127.0.0.1:6379>JSON.0.1:6379>127.0.0.1:6379>JSON.ARRPOP-arr(无)
对象也有自己的命令:
127.0.0.1:6379 > JSON。obj。'{"name":"Leonard Cohen","lastSeen":1478476800,"loggedOut": true}' OK 127.0.0.1:6379> JSON。OBJLEN obj。(整数)3 127.0.0.1:6379> JSON。OBJKEYS obj。1)“名称”2)“lastSeen”3)“后”
与任何其他客户¶
除非你的Redis客户端已经支持Redis模块(不太可能)或RedisJSON特别(甚至更不可能),你应该可以使用它的能力发送原始的Redis命令。根据您选择的客户,具体的方法可能会有所不同。
Python示例¶
这个代码片段展示了如何使用原始的Redis命令从Pythonredis-py:
进口复述,进口json数据={“foo”:“酒吧”}r=复述,.StrictRedis()r.execute_command(“JSON。设置”,“医生”,“。”,json.倾倒(数据))回复=json.加载(r.execute_command('JSON.GET',“医生”))
下载并运行二进制文件¶
首先下载预编译的版本RedisLabs下载中心.
接下来,使用RedisJSON运行Redis:
$ redis-server——loadmodule /path/to/module/rejson.so
构建和加载模块¶
Linux Ubuntu 16.04¶
要求:
- RedisJSON存储库:
git克隆https://github.com/RedisJSON/RedisJSON.git
- 的
建设重要
包:apt获取安装构建必需
要构建模块,请运行制作
在项目目录中。
恭喜你!你可以在下面找到编译的模块库src / rejson.so
.
马科斯¶
要构建模块,请运行制作
在项目目录中。
恭喜你!你可以在下面找到编译的模块库src / rejson.so
.
加载模块到Redis¶
要求:
我们建议你有Redis加载模块在启动期间添加以下到您的redis.conf
文件:
loadmodule/path/to/module/rejson.so
在上面的行中替换/ /模块/ rejson.so /路径
使用模块库的实际路径。或者,你可以使用下面的命令行参数语法让Redis加载模块:
~/$ redis-server——loadmodule /path/to/module/rejson.so
最后,您还可以使用模块负载
但是,请注意模块负载
是一个危险命令出于安全考虑,将来可能会被阻止/弃用。
一旦模块加载成功,Redis日志应该有类似这样的行:
...1877:M 23 Dec 02:02:59.725 # JSON data type for Redis - v1.0.0 [encver 0]所以…
客户端库¶
一些语言有支持RedisJSON命令的客户端库:
项目 | 语言 | 许可证 | 作者 | 星星 | 包 |
---|---|---|---|---|---|
iorejson | Node.js | 麻省理工学院 | 埃文·黄@evanhuang8 | npm | |
node_redis-rejson | Node.js | 麻省理工学院 | 凯尔·戴维斯@stockholmux | npm | |
redis-modules-sdk | Node.js | BSD-3-Clause | Dani Tseitlin@danitseitlin | npm | |
JRedisJSON | Java | BSD-2-Clause | Redis实验室 | 专家 | |
redisjson-py | python | BSD-2-Clause | Redis实验室 | 皮皮 | |
go-rejson | 去 | 麻省理工学院 | Nitish Malhotra @nitishm | ||
雷琼森 | 去 | Apache-2.0 | Daniel Krom@KromDaniel | ||
NReJSON | net | 麻省理工学院/ apache - 2.0 | 汤米·汉克斯@tombatron | nuget | |
phpredisjson | PHP | 麻省理工学院 | 拉法Campoy @averias | 创作者 | |
redislabs rejson | PHP | 麻省理工学院 | Mehmet Korkmaz@mkorkmaz | 创作者 | |
rejson rb | 红宝石 | 麻省理工学院 | 孔雀舞Vachhani @vachhanihpavan | rubygems |