redis + json = rejson

redis是目前使用最广泛的缓存数据库,没有之一,并且不接受反驳(手动滑稽)

redis官方版支持大五种结构:key-value、list、set、zset、hash

这一集,我们主要讨论hash,以python为例。

在redis里面,我们可以这么存数据:

hset:{name: xiaoluo} 

是吧,但是在绝大多数情况,比如后台的restful接口,可能会是这样的:

{"data":
        "info":
                {"name": "小罗",
                 "age" : 26,
                 "scores": [95, 97, 60, 89]
                 }
}

在官方的redis你得这么来:
(1)先转成str(str())

(2)set key value

用的时候得这么来

(1)get key

(2)eval或者json.loads

行吧,这样我也能接受了。但是,我想修改一部分,怎么办。比如我想把age改成25,在python里得这么办:

(1)get key

(2)eval

(3)修改键值对

(4)转成str

(5)set key

烦不烦烦不烦,复杂不复杂,繁琐不繁琐。还多了不少IO交互!

那redisjson就派上用场了。

https://redislabs.com,这个网站开发了很多redis的插件,如下:

redis + json = rejson_第1张图片

其他的模块大家自己去了解了解,其实最有用的还是redisjson,这次对redisjson做一些技术分享。

一、安装(以ubuntu为例)

(1)安装好redis,这步就不细说了。

(2)安装系统环境:apt-get install build-essential

(3)安装redisjson插件:git clone https://github.com/RedisJSON/RedisJSON.git

(4)make编译,假设redisjson的路径为:/opt/redisjson

(5)加载redisjson插件:redis-server --loadmodule /opt/redisjson/src/rejson.so

无报错即安装成功

 

二、python简单示例

# coding=utf8
from rejson import Client

redis_con = Client(host='localhost', password='xxxxxx', decode_responses=True)
redis_con.flushdb()

data = {'name': '小罗',
        'age': 25,
        'goods': ['耳机', 'mbp', ''],
        'detail': {'address': '北京', 'job': '码畜'}}



# 插入数据
redis_con.jsonset('info', '.', data)

# 打印所有键,查看类型
print(redis_con.keys(), redis_con.jsontype('info'))

# goods append
redis_con.jsonarrappend('info', '.goods', '测试append')
# goods insert
redis_con.jsonarrinsert('info', '.goods', '1', '测试insert')
# 乱码
print(redis_con.jsonget('info', '.'))
# 正常编码
print(redis_con.jsonget('info', '.', no_escape=True))

# detail update
redis_con.jsonset('info', '.detail.salary', 'secret')
# detail modify
redis_con.jsonset('info', '.detail.job', '码农')
print(redis_con.jsonget('info', '.', no_escape=True))

以上包括了python字典的绝大多数用法,这些也足够平时开发用了。注意no_escape,如果字段包括非常规英文、符号和数字,需要置为True。

更多说明文档,请移步:https://redislabs.com

你可能感兴趣的:(redis,python)