• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

ReJSON 教程(Redis支持JSON)

JAVA web前端中文站 3年前 (2017-07-07) 1448次浏览 已收录 0个评论

ReJSON 是一个 Redis Module,它实现了 ECMA-404 The JSON Data Interchange Standard 作为本地数据类型。它允许从 Redis Keys(documents)中存储,更新和获取 JSON 值。

更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏

ReJSON 主要特性:

  • 完全支持 JSON 标准
  • 对于在文档内选择元素类似 JSONPath 语法
  • 文档作为二进制数据被存储在一个树形结构中,允许快速访问子元素
  • 对所有 JSON 数据类型按照原子操作进行分类

ReJSON 是有 Redis Labs 开发的,源码下载地址是 https://github.com/RedisLabsModules/ReJSON

ReJSON 教程(Redis 支持 JSON)

编译 Module

Linux Ubuntu 16.04

依赖:

为了编译这个 module,需要在项目目录下执行 make 命令
恭喜!你可以找到这个编译后的模块库文件在 src/rejson.so 下。

MaxOSX
为了编译这个 module,需要在项目目录下执行 make 命令
恭喜!你可以找到这个编译后的模块库文件在 src/rejson.so 下。

加载 Module 进 Redis

依赖:

  • Redis V4.0 或更高版本

我们推荐你使用下面的方式来加载 module 到 redis,即在启动的过程中,添加下面的一行内容到 redis.conf 文件中:
loadmodule /path/to/module/rejson.so

用 ReJSON module 库文件的真实路径替换上面的这行/path/to/module/rejson.so
或者,你也可以使用下面命令行参数语法来加载 module:

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

最后,你还可以使用 MODULE LOAD 命令。注意,然而,这个 MODULE LOAD 是一个危险命令,将来出于安全考虑或许会被封锁或者取消。
一旦 module 被加载成功,Redis log 中应该会出现下面类似的行:

 ... 1877:M 23 Dec 02:02:59.725 # <ReJSON> JSON data type for Redis - v1.0.0 [encver 0] 1877:M 23 Dec 02:02:59.725 * Module 'ReJSON' loaded from <redacted>/src/rejson.so ...

使用 ReJSON

开始使用 ReJSON 之前,你应该非常熟悉它的命令和语法,详细信息参考 commands reference 文档。然而,为了快速开始使用,只需要看本文就能了解:

  1. 一个运行包含该 module 的 Redis server(看编译和加载来指导)
  2. 任何 Redis 或 ReJSON 客户端

使用 redis-cli

这个例子将使用 redis-cli 作为 Redis 客户端。第一个来试用的 ReJSON 命令是 JSON.SET,用一个 JSON value 设置一个 Redis key。所有的 JSON values 都能被使用,例如一个 string:

 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

JSON.GET 和 JSON.TYPE 都能进行迭代而不管 values 的类型,但是你真的应该看看 JSON.GET 的美化能力。请注意这些命令是如何给出句点符号的,例如:. 。这是在 ReJSON 数据类型的 value 的路径(在这种情况下,它只是意味着 root)。两个字符串操作:

 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.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.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.DEL 命令来删除你告诉它要处理的。数组能够被操作用一个专用的 ReJSON 命令子集:

 127.0.0.1:6379> JSON.SET arr . [] OK 127.0.0.1:6379> JSON.ARRAPPEND arr . 0 (integer) 1 127.0.0.1:6379> JSON.GET arr "[0]" 127.0.0.1:6379> JSON.ARRINSERT arr . 0 -2 -1 (integer) 3 127.0.0.1:6379> JSON.GET arr "[-2,-1,0]" 127.0.0.1:6379> JSON.ARRTRIM arr . 1 1 1 127.0.0.1:6379> JSON.GET 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 客户端已经支持 Redis modules(不大可能)或者 特殊的 ReJSON 客户端(更不可能),你应该可以使用其发送原始 Redis 命令的能力,取决于你选择的客户端,做这件事的确切方法可能会有所不同。

Python 例子:

这个代码片段演示如何使用 redis-py 客户端从 Python 中用原始 Redis 命令应用 ReJSON:

 import redis import json  data = {     'foo': 'bar' }  r = redis.StrictRedis() r.execute_command('JSON.SET', 'doc', '.', json.dumps(data)) reply = json.loads(r.execute_command('JSON.GET', 'doc'))

客户端

一些语言有客户端库对 ReJSON 的命令提供支持:

ReJSON 教程(Redis 支持 JSON)

【注:本文源自网络文章资源,由站长整理发布】

参考资料


web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ReJSON 教程(Redis 支持 JSON)
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址