跳到内容

标志

RedisJSON - Redis的JSON数据类型

论坛不和

RedisJSON是一个复述,模块实现ECMA-404 JSON数据交换标准作为本机数据类型。它允许从Redis键(文档)存储、更新和获取JSON值。

主要特点:

  • 完全支持JSON标准
  • JSONPath类似于在文档中选择元素的语法
  • 文档以二进制数据的形式存储在树结构中,允许快速访问子元素
  • 所有JSON值类型的类型化原子操作

RedisJSON是用<3在复述,.源代码可在:https://github.com/RedisJSON/RedisJSON

快速启动

  1. 在Redis云中创建免费数据库
  2. 使用Docker启动RedisJSON
  3. 使用它从任何复述,客户,例如:

RedisJSON与rediscli

或者,您也可以自己构建和加载模块。构建并加载RedisJSON模块库

Redis云

RedisJSON可用于所有Redis云管理服务,包括高达30MB的完全免费层!

从这里开始

使用Docker启动RedisJSON

使用Docker在Windows、MacOS或Linux上运行以下操作。

docker run-p6379:6379——名称redis-redisjson-redislabs/rejson:latest

使用RedisJSON

在使用RedisJSON之前,您应该熟悉它的命令和语法,详见命令参考文档。但是,要快速入门,只需查看此部分并获取:

  1. 运行该模块的Redis服务器(参见建筑物加载(如需说明)
  2. 任何复述,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。得到的,“医生”))

下载并运行二进制文件

首先从下载预编译版本Redis下载中心

接下来,使用RedisJSON运行Redis:

$redis server--loadmodule/path/to/module/rejson.so

构建和加载模块

货物构建——发布

基于Ubuntu 20.04的构建

在Ubuntu 20.04上成功构建需要以下软件包:

sudo apt安装构建基本llvm cmake libclang1 libclang dev cargo

然后,跑使货物构建——发布在存储库目录中

将模块加载到Redis

要求:

我们建议您在启动过程中通过将以下内容添加到redis.conf文件:

loadmodule / / /模块/目标/释放/ librejson.so

在Mac OS上,如果这个模块已经被构建为一个动态库使用:

loadmodule/path/to/module/target/release/librejson.dylib

在上面的行中,替换/路径/到/模块/使用模块库的实际路径。

或者,你可以使用下面的命令行参数语法让Redis加载模块:

~/$ redis-server——loadmodule ./target/release/librejson.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 iorejson-stars npm
node_redis-rejson node . js 麻省理工学院 凯尔·戴维斯@stockholmux node_redis-rejson-stars npm
redis模块sdk node . js BSD-3-条款 达尼Tseitlin @danitseitlin redis模块 npm
杰雷迪森 JAVA BSD-2-条款 复述, JRedisJSON-stars maven
redis-modules-java JAVA apache - 2.0 李明邓@dengliming redis模块java stars maven
再贴现 Python BSD-2-条款 复述, 雷皮星 pypi
快走 麻省理工学院 Nitish Malhotra@nitishm 去看星星吧
rejonson apache - 2.0 丹尼尔Krom @KromDaniel 雷琼森之星
NReJSON MIT/Apache-2.0 汤米·汉克斯@tombatron NReJSON-stars 努吉
phpredis-json PHP 麻省理工学院 拉法·坎波伊@averias phpredisjson星 作曲家
redislabs-rejson PHP 麻省理工学院 穆罕默德Korkmaz @mkorkmaz redislabs-rejson-stars 作曲家
rejson-rb Ruby 麻省理工学院 Pavan Vachhani@Vachhanishpavan rejson-rb-stars rubygems
Baidu