文档章节

Redis支持json数据类型(rejson)

iuez1899
 iuez1899
发布于 2017/07/08 19:01
字数 937
阅读 140
收藏 0

Redis支持json数据类型(EN)

Redis支持json数据类型(CH)

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
# centos
yum install gcc gcc-c++ automake autoconf libtool

# ubuntu
sudo apt-get install make libtool gcc autoconf 
#
mkdir -p /usr/local/redis/{bin,etc,db,log,modules}
#
git clone https://github.com/RedisLabsModules/ReJSON
cd  ReJSON
make
cp src/rejson.so /usr/local/redis/modules/
#
wget --no-check-certificate https://github.com/antirez/redis/archive/4.0-rc3.tar.gz
tar -zxvf 4.0-rc3.tar.gz
cd redis-4.0-rc3
make
cd src && \cp -a redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server  /usr/local/redis/bin/
cd ..  && cp redis.conf  /usr/local/redis/etc/6379.conf
sed -i "s#dir ./#dir /usr/local/redis/db/#" /usr/local/redis/etc/6379.conf
sed -i "s/^# bind 127.0.0.1/bind 127.0.0.1/" /usr/local/redis/etc/6379.conf
sed -i "s/daemonize no/daemonize yes/" /usr/local/redis/etc/6379.conf
sed -i 's#logfile ""#logfile "/usr/local/redis/log/6379.log"#' /usr/local/redis/etc/6379.conf
echo -e 'export REDIS_HOME=/usr/local/redis\nexport PATH=$REDIS_HOME/bin:$PATH' >>/etc/profile && source /etc/profile
#加载rejson.so到redis,依赖:Redis V4.0 或更高版本
#通过配置文件加载module(推荐):
sed -i '44a\loadmodule /usr/local/redis/modules/rejson.so' /usr/local/redis/etc/6379.conf
#通过命令行加载module(不推荐):
/usr/local/redis/bin/redis-server --loadmodule /usr/local/redis/modules/rejson.so
#注意,"--loadmodule"比较危险,将来出于安全考虑可能会被禁用或取消


#启动redis进程
/usr/local/redis/bin/redis-server /usr/local/redis/etc/6379.conf
#/usr/local/redis/bin/redis-cli
127.0.0.1:6379> set hao 123
OK
127.0.0.1:6379> get hao
"123"
#/usr/local/redis/bin/redis-cli
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
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]
(integer) 1
127.0.0.1:6379> JSON.GET amoreinterestingexample
"[true,{\"answer\":42}]"
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
(integer) 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"


################
/etc/init.d/redis
#! /bin/bash
#   
# redis - this script starts and stops the redis-server daemon
#   
# chkconfig:    2345 80 90
# description:  Redis is a persistent key-value database
#   
### BEGIN INIT INFO
# Provides:          redis
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Should-Start:        $local_fs
# Should-Stop:        $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description:    redis-server daemon
# Description:        redis-server daemon
### END INIT INFO

REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
REDIS_CLI=/usr/local/redis/bin/redis-cli
   
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/usr/local/redis/etc/${REDISPORT}.conf"
   
case "$1" in
    start)
        if [ -f $PIDFILE ]; then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo -n "Starting Redis server..."
                $EXEC $CONF
                if [ "$?"="0" ]; then
                    echo " done"
                else
                    echo " failed"
                fi
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]; then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping  Redis server..."
                $REDIS_CLI -p $REDISPORT shutdown
                if [ "$?"="0" ]; then
                    echo " done"
                else
                    echo " failed"
                fi
        fi
        ;;
   restart)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart}" >&2
        exit 1
esac

#centos
chmod +x /etc/init.d/redis
/etc/init.d/redis start
chkconfig add redis

#ubuntu
chmod +x /etc/init.d/redis
/etc/init.d/redis start
update-rc.d redis defaluts
apt-get install sysv-rc-conf -y
sysv-rc-conf修改启动级别
#
tail -f /usr/local/redis/log/6379.log
......
15578:M 08 Jul 16:28:37.503 # <ReJSON> JSON data type for Redis v999.999.999 [encver 0]
15578:M 08 Jul 16:28:37.504 * Module 'ReJSON' loaded from /usr/local/redis/modules/rejson.so
......
对ReJSON的命令提供客户端库支持的一些语言:

Project
(Language)(License)
(Author -- Link)

#
iorejson     
(Node.js)(MIT)
(Evan Huang @evanhuang8 -- https://github.com/evanhuang8)
git:
https://github.com/evanhuang8/iorejson
npm:
https://www.npmjs.com/package/iorejson
#
JReJSON	
(Java)(BSD-2-Clause)
(Redis Labs -- https://redislabs.com/)
git:
https://github.com/RedisLabs/JReJSON/
#
rejson-py	
(Python)(BSD-2-Clause)	
(Redis Labs -- https://redislabs.com/)
git:
https://github.com/RedisLabs/redis-py/
pypi:
https://pypi.python.org/pypi/rejson

© 著作权归作者所有

共有 人打赏支持
iuez1899
粉丝 50
博文 206
码字总数 106044
作品 0
宝山
运维
Redis Desktop Manager 0.9.3 发布,Redis 桌面管理工具

Redis Desktop Manager 0.9.3 发布,此次更新内容如下: 新特性: 支持 ReJSON 模块。 bug 修复: Fix #4095: Fedora 27 - QQmlApplicationEngine 加载组件失败。 同时,由于目前中国镜像的流...

雨田桑
04/30
0
0
Redis 模块开源许可证变更,多个项目不再开源遭质疑

Redis 变更模块开源许可证,不想让云提供商白白获利... 数据库制造商 Redis Labs 本周将公司开发的 Redis 模块从 AGPL 迁移到将 Apache v2.0 与 Commons Clause 相结合的许可证,对销售许可证...

达尔文
08/24
0
2
Redis 的 Json 类型模块--ReJSON

Redis 的Json 类型模块 快速开始 编译 ReJSON 模块 加载 ReJSON to Redis 从任意Redis 客户端使用, e.g.:

匿名
2017/03/23
76
0
Spring集成redis(Spring Data Redis)

转载地址:http://blog.csdn.net/zhu_tianwei/article/details/44923001 Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(...

Mr_zebra
06/06
0
0
Spring Data Redis 详解及实战一文搞定

SDR - Spring Data Redis的简称。 Spring Data Redis提供了从Spring应用程序轻松配置和访问Redis的功能。它提供了与商店互动的低级别和高级别抽象,使用户免受基础设施问题的困扰。 Spring B...

Java技术栈
09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
今天
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部