RedisJSON - Redis的JSON数据类型¶
RedisJSON是一个复述,模块实现ECMA-404 JSON数据交换标准作为本机数据类型。它允许从Redis键(文档)存储、更新和获取JSON值。
主要特点:
- 完全支持JSON标准
- JSONPath类似于在文档中选择元素的语法
- 文档以二进制数据的形式存储在树结构中,允许快速访问子元素
- 所有JSON值类型的类型化原子操作
RedisJSON是用<3在复述,实验室. 源代码可从以下网址获得:https://github.com/RedisJSON/RedisJSON
快速启动¶
或者,您也可以自己构建和加载模块。构建并加载RedisJSON模块库
Redis云¶
RedisJSON可用于所有Redis云管理服务。Redis Cloud Essentials提供了一个完全免费的管理数据库,最大可达30MB。
使用Docker启动RedisJSON¶
使用Docker在Windows、MacOS或Linux上运行以下操作。
docker run-p6379:6379——名称redis-redisjson-redislabs/rejson:latest
使用RedisJSON¶
在使用RedisJSON之前,您应该熟悉它的命令和语法,详见命令参考文档。但是,要快速入门,只需查看此部分并获取:
- 运行该模块的Redis服务器(参见建筑和加载(如需说明)
- 任何复述,或RedisJSON客户端
与redis cli
¶
这个例子将使用redis cli
作为Redis客户端。要尝试的第一个RedisJSON命令是JSON.SET
,它使用JSON值设置Redis键。可以使用所有JSON值,例如字符串:
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。一串
JSON。得到
和JSON.TYPE
不管值的类型如何,都要这样做,但您确实应该签出JSON。得到
粉饰的权力。注意命令是如何使用句点字符的,例如。.
. 这是路径到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。foo barbaz \“\”””
JSON。STRLEN
告诉您字符串的长度,您可以使用JSON.end
.数字可以递增和倍增:
127.0.0.1:6379>JSON.SET num。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.SET amoreinterestingexample'[true,{“answer”:42},null]'OK 127.0.0.1:6379>JSON.GET-amoreinterestingexample“[true,{“answer\”:42},null]“127.0.1:6379>JSON.GET-amoreinterestingexample[1]。回答“42”127.0.0.1:6379>JSON.DEL-amoreinterestingexample[-1]1127.0.0.1:6379>JSON.GET-amoreinterestingexample”[true,{“answer\”:42}”
方便的JSON.DEL
命令删除您告诉它的任何内容。可以使用专用的JSON命令子集操作数组:
127.0.0.1:6379 > JSON。加勒比海盗。[] ok 127.0.0.1:6379> json。ARRAPPEND加勒比海盗。0(整数)1 127.0.0.1:6379> JSON。GET arr "[0]" 127.0.0.1:6379> JSON。ARRINSERT加勒比海盗。0 -2 -1 (integer) 3 127.0.0.1:6379> JSON。GET arr "[-2,-1,0]" 127.0.0.1:6379> JSON。ARRTRIM加勒比海盗。1 1 127.0.0.1:6379> json。得到arr "[-1]" 127.0.0.1:6379> JSON.ARRPOP arr "-1" 127.0.0.1:6379> JSON.ARRPOP arr (nil)
对象也有自己的命令:
127.0.0.1:6379>JSON.SET obj.{“name”:“Leonard Cohen”,“lastSeen”:1478476800,“loggedOut”:true}OK 127.0.0.1:6379>JSON.OBJLEN obj.(integer)3 127.0.0.1:6379>JSON.OBJKEYS obj.1)“name”2“lastSeen”3“loggedOut”
与任何其他客户¶
除非你复述,客户已经支持Redis模块(不太可能)或RedisJSON(更不可能),您应该可以使用它发送原始Redis命令的功能。根据您选择的客户端,具体的方法可能会有所不同。
Python示例¶
此代码段显示了如何将RedisJSON与来自Python的原始Redis命令一起使用redis py:
进口雷迪斯进口json数据={“福”:“酒吧”}r=雷迪斯.斯特里迪斯()r.执行命令(“JSON.SET”,“医生”,'.',json.转储(数据))回复=json.荷载(r.执行命令(“JSON。得到的,“医生”))
下载并运行二进制文件¶
首先从下载预编译版本RedisLabs下载中心.
接下来,使用RedisJSON运行Redis:
$redis server--loadmodule/path/to/module/rejson.so
构建和加载模块¶
Linux Ubuntu 16.04¶
要求:
- RedisJSON存储库:
git克隆https://github.com/RedisJSON/RedisJSON.git
- 这个
建立必要的
包裹:apt-get安装建设重要
要构建模块,请运行使
在项目的目录中。
祝贺 你!您可以在以下位置找到编译后的模块库:src/rejson.so
.
MacOSX¶
要构建模块,请运行使
在项目的目录中。
祝贺 你!您可以在以下位置找到编译后的模块库:src/rejson.so
.
将模块加载到Redis¶
要求:
我们建议您在启动过程中通过将以下内容添加到redis.conf
文件:
/ /模块/ rejson.so loadmodule /路径
在上面的行中,请更换/path/to/module/rejson.so
具有模块库的实际路径。或者,您可以让Redis使用以下命令行参数语法加载模块:
~/$redis服务器--loadmodule/path/to/module/rejson.so
最后,你也可以使用模块加载
命令。但是请注意,模块加载
是一个危险的命令出于安全考虑,将来可能会被阻止/弃用。
成功加载模块后,Redis日志的行应类似于:
... 1877:M 23 Dec 02:02:59.725#Redis的JSON数据类型-v1.0.0[encver 0]1877:M 23 Dec 02:02:59.725*模块“RedisJSON”从/src/rejson.so加载。。。
客户端库¶
某些语言具有支持RedisJSON命令的客户端库:
计划 | 语言 | 许可证 | 作者 | 星星 | 包裹 |
---|---|---|---|---|---|
伊奥雷森 | node . js | 麻省理工学院 | 埃文·黄@埃文·黄8 | npm | |
node_redis-rejson | node . js | 麻省理工学院 | 凯尔·戴维斯@stockholmux | npm | |
redis模块sdk | node . js | BSD-3-条款 | 达尼Tseitlin @danitseitlin | npm | |
杰雷迪森 | 爪哇 | BSD-2-条款 | 复述,实验室 | maven | |
再贴现 | Python | BSD-2-条款 | 复述,实验室 | pypi | |
快走 | 去 | 麻省理工学院 | Nitish Malhotra@nitishm | ||
rejonson | 去 | apache - 2.0 | 丹尼尔Krom @KromDaniel | ||
NReJSON | .NET | MIT/Apache-2.0 | 汤米·汉克斯@tombatron | 努吉 | |
phpredis-json | PHP | 麻省理工学院 | 拉法·坎波伊@averias | 作曲家 | |
redislabs-rejson | PHP | 麻省理工学院 | 穆罕默德Korkmaz @mkorkmaz | 作曲家 | |
rejson-rb | Ruby | 麻省理工学院 | Pavan Vachhani@Vachhanishpavan | rubygems |