文档章节

Redis支持json数据类型(rejson)

eui988
 eui988
发布于 2017/07/08 19:01
字数 937
阅读 96
收藏 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

© 著作权归作者所有

共有 人打赏支持
eui988
粉丝 50
博文 172
码字总数 83777
作品 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 的 Json 类型模块--ReJSON

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

匿名
2017/03/23
76
0
JSONObject rejson = JSONObject.parseObject(responses)的问题

JSONObject rejson = JSONObject.parseObject(responses); 进行这一步后,发现rejson的数据顺序和responses中的数据顺序不一样,请问怎么解决?...

天王盖地虎626
2015/01/07
11.4K
4
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
Redis数据类型及应用场景-加米谷大数据

一、 redis 特点 所有数据存储在内存中,高速读写 提供丰富多样的数据类型:string、 hash、 set、 sorted set、bitmap、hyperloglog 提供了 AOF 和 RDB 两种数据的持久化保存方式,保证了 ...

加米谷大数据
04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day58-20180816-流利阅读笔记-待学习

苹果市值破万亿,iPhone 会涨价吗? Lala 2018-08-16 1.今日导读 苹果教父乔布斯曾经说过:“活着就是为了改变世界。”虽然他在 56 岁时就遗憾离世,但他极具创新和变革的精神早已深埋进苹果...

aibinxiao
17分钟前
4
0
[雪峰磁针石博客]python3快速入门教程1 turtle绘图-2函数

菲波那契序列: >>> # Fibonacci series:... # the sum of two elements defines the next... a, b = 0, 1>>> while b < 10:... print(b)... a, b = b, a+b...112......

python测试开发人工智能安全
今天
0
0
java环境变量配置最正确的方式

原贴:https://blog.csdn.net/qq_40007997/article/details/79784711,十分详细,亲测有效

kitty1116
今天
0
0
49.Nginx防盗链 访问控制 解析php相关 代理服务器

12.13 Nginx防盗链 12.14 Nginx访问控制 12.15 Nginx解析php相关配置(502的问题) 12.16 Nginx代理 扩展 502问题汇总 http://ask.apelearn.com/question/9109 location优先级 http://blog....

王鑫linux
今天
2
0
Nginx防盗链、访问控制、解析php相关配置、Nginx代理

一、Nginx防盗链 1. 编辑虚拟主机配置文件 vim /usr/local/nginx/conf/vhost/test.com.conf 2. 在配置文件中添加如下的内容 { expires 7d; valid_referers none blocked server_names *.tes......

芬野de博客
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部