JSON

Redis支持JSON数据类型

字号+ 作者:H5之家 来源:H5之家 2017-07-10 08:00 我要评论( )

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

> 数据库 > Redis >

Redis支持JSON数据类型 2017-07-07 17:14 出处:清屏网 人气: 

ReJSON介绍

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

主要特性:

  • 完全支持JSON标准

  • 对于在文档内选择元素类似JSONPath语法

  • 文档作为二进制数据被存储在一个树形结构中,允许快速访问子元素

  • 对所有JSON数据类型按照原子操作进行分类

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

    Demo 演示

    编译Module Linux Ubuntu 16.04

    依赖:

  • ReJSON库 git clone https://github.com/RedisLabsModules/rejson.git

  • build-essential 包:apt-get install build-essential

  • 为了编译这个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文档。然而,为了快速开始使用,只需要看本文就能了解:

  • 一个运行包含该module的Redis server(看编译和加载来指导)

  • 任何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 例子:

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 实习笔记 6: 测试技巧,json序列化对象

      实习笔记 6: 测试技巧,json序列化对象

      2017-07-09 18:05

    • JSON学习---json从XML中解析出ISuperObject

      JSON学习---json从XML中解析出ISuperObject

      2017-07-09 18:02

    • 小程序介绍、部署、app.json

      小程序介绍、部署、app.json

      2017-07-09 08:02

    • 痴情意外:ASP.NET WebAPI RC 竟然不支持最常用的json传参

      痴情意外:ASP.NET WebAPI RC 竟然不支持最常用的json传参

      2017-07-08 10:02

    网友点评