跳转到内容

标志

RedisJSON—Redis的JSON数据类型

论坛不一致

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

主要特点:

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

RedisJSON是在小于3 at的情况下开发的Redis实验室.源代码可以在https://github.com/RedisJSON/RedisJSON上找到

快速入门

  1. 在Redis Cloud中创建一个免费的数据库
  2. 使用Docker启动RedisJSON
  3. 任何Redis客户端,例如:

与redis-cli 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之前,您应该熟悉其命令和语法,如命令参考文档。然而,要快速开始,只需回顾这一节并获取:

  1. 运行该模块的Redis服务器(请参阅建筑加载指令)
  2. 任何雷迪斯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.GETJSON。类型不管值的类型,都要按字面意思做,但你真的应该检查出来吗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()rexecute_command“JSON。设置”“医生”“。”json倾倒数据))回复json加载rexecute_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 node_redis-rejson-stars npm
redis-modules-sdk Node.js BSD-3-Clause Dani Tseitlin@danitseitlin redis-modules-sdk-stars npm
JRedisJSON Java BSD-2-Clause Redis实验室 杰雷迪森之星 专家
redisjson-py python BSD-2-Clause Redis实验室 rejson-py-stars 皮皮
go-rejson 麻省理工学院 Nitish Malhotra @nitishm go-rejson-stars
雷琼森 Apache-2.0 Daniel Krom@KromDaniel rejonson-stars
NReJSON net 麻省理工学院/ apache - 2.0 汤米·汉克斯@tombatron 红星 nuget
phpredisjson PHP 麻省理工学院 拉法Campoy @averias phpredis-json-stars 创作者
redislabs rejson PHP 麻省理工学院 Mehmet Korkmaz@mkorkmaz 雷森星 创作者
rejson rb 红宝石 麻省理工学院 孔雀舞Vachhani @vachhanihpavan 瑞星 rubygems
Baidu