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的插件,如下:
其他的模块大家自己去了解了解,其实最有用的还是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