为 Redis 添加 JSON 数据类型

1. 简介

Redis 本身有比较丰富的数据类型,例如 String、Hash、Set、List

JSON 是我们常用的数据类型,当我们需要在 Redis 中保存 json 数据时是怎么存放的呢?

一般是用 String 或者 Hash,但还是不太方便,无法灵活的操作 json 数据

在 Redis 4.0 中,有一个重大改进:modules 模块系统,可以让我们开发新的功能,集成到 redis 中

rejson 就是一个新的模块,为 redis 提供了 json 存储能力

2. 示例

2.1)基础操作

127.0.0.1:6379> JSON.SET object . '{"foo": "bar", "ans": 42}'
OK
127.0.0.1:6379> JSON.GET object
"{\"foo\":\"bar",\"ans\":42}"

先看下第一条命令的含义:

  • JSON.SET 是json设置命令
  • object 是 key
  • . 是json文档的root,后面的一串是具体的 json 数据值

第二条命令是获取 key 为 object 的json数据

2.2)json 内部操作

  • 获取某字段的值
127.0.0.1:6379> JSON.GET object .ans
"42"

命令中的 .ans 是目标路径,表示 root 下面的 ans

  • 设置某字段值
127.0.0.1:6379> json.set object .name '"bill"'
OK
127.0.0.1:6379> json.get object
"{\"foo\":\"bar\",\"ans\":42,\"hi\":\"hello\",\"name\":\"bill\"}"

这个命令是在 root 下新增了一个字段 name,值为 bill

也可以修改已有字段的值,用法相同

  • 删除字段
127.0.0.1:6379> json.del object .name
(integer) 1
127.0.0.1:6379> json.get object
"{\"foo\":\"bar\",\"ans\":42,\"hi\":\"hello\"}"

这个命令使用 del 把 root 下的 name 字段删除了

  • 数字操作

ans 字段是数字类型,值为 42,下面对其执行 +3 操作

127.0.0.1:6379> json.numincrby object .ans 3
"45"
127.0.0.1:6379> json.get object
"{\"foo\":\"bar\",\"ans\":45,\"hi\":\"hello\"}"

还可以进行乘法操作

127.0.0.1:6379> json.nummultby object .ans 2
"90"
127.0.0.1:6379> json.get object
"{\"foo\":\"bar\",\"ans\":90,\"hi\":\"hello\"}"

还有很多其他操作命令,具体可以查看项目文档

3. 安装

因为使用了模块功能,所以需要 redis 4.0 以上版本

3.1)安装流程

  1. 安装 redis 4.0
  2. 安装相关系统依赖
  3. 安装 rejson 模块
  4. redis 加载 rejson 模块

3.2)详细安装过程

安装 redis 4.0

wget https://github.com/antirez/redis/archive/4.0-rc2.tar.gz
tar xzf 4.0-rc2.tar.gz
cd redis-4.0-rc2/
make

安装依赖

yum groupinstall "Development Tools"

(这是 centos 中的安装方法,ubuntu 可以使用这个命令 apt-get install build-essential )

安装cmake

# wget https://cmake.org/files/v3.8/cmake-3.8.0-rc3.tar.gz
# tar -xzvf cmake-2.8.11.2.tar.gz
# cd cmake-2.8.11.2
# ./bootstrap
# make
# make install

安装 rejson 模块

git clone https://github.com/RedisLabsModules/rejson.git
cd rejson
./bootstrap.sh
cmake --build build --target rejson

安装完成后,rejson 目录中的 lib 下便会生成 rejson.so

启动 redis 时加载 rejson.so

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

在启动信息中会看到 rejson 的相关信息

...
<ReJSON> JSON data type for Redis 
...

安装完成,可以登录 redis 执行 json 命令了

5. 小结

rejson 让我们可以在 redis 中存储和操作 json 数据,非常方便

而且通过体验 rejson 模块,还可以感受到 redis 模块系统的强大,以后将会出现各种基于redis的强大功能

rejson 项目地址:

https://redislabsmodules.github.io/rejson/

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2017-03-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏三木的博客

Linux shell 程序设计1——安装及入门

1、什么是shell? shell是linux内核的“壳”,是用户和内核的桥梁。它类似于windows下的命令提示符,将用户输入的命令解释给内核执行,并返回给用...

2016
来自专栏分享达人秀

JDK的正确安装和配置

JDK的全称是Java Development Kit,翻译成中文就是Java开发工具包,主要包括Java运行环境、一些Java命令工具和Java基础的...

2176
来自专栏一枝花算不算浪漫

[Linux基础]Linux基础知识入门及常见命令.

3997
来自专栏信安之路

Java代码审计-铁人下载系统

初学 java 代码审计,跟着表哥们脚步,走一遍审计流程,就选了个没有使用 Java 框架的 java 系统,作为入门。

980
来自专栏北京马哥教育

6 个 Linux 运维典型问题,大牛的分析解决思路在这里

26111
来自专栏琦小虾的Binary

Ubuntu环境如何上传项目到GitHub网站?

Ubuntu环境如何上传项目到GitHub网站? 之前笔者写了一篇《CMake学习笔记(三)——以笔者的Robosub竞赛为例》的博客。博客中笔者以自己的项目为...

2788
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Apache Kafka

Apache Kafka是一种流行的分布式消息代理,旨在有效处理大量实时数据。Kafka集群不仅具有高度可扩展性和容错性,而且与其他消息代理(如ActiveMQ...

2652
来自专栏javathings

JVM 线程和操作系统线程一一对应吗?

Java 的线程和操作系统的线程是一一对应的。使用 Java 线程就是使用一个操作系统本地线程。

3404
来自专栏乐沙弥的世界

Nginx 概述及日常管理

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发...

871
来自专栏向治洪

Dalvik虚拟机

Dalvik虚拟机是google专门为android平台开发的一个java虚拟机,但它并没有使用JVM规范。Dalvik虚拟机主要完成对象生命周期的管理、线程...

2267

扫码关注云+社区

领取腾讯云代金券