redis的安装和使用(python篇)
原创最近在项目中使用到了redis来存储数据,本文总结下redis的安装和python调用。
对redis的介绍详细可参考:
https://baike.baidu.com/item/Redis/6549233
https://www.cnblogs.com/powertoolsteam/p/redis.html
Redis(Remote Dictionary Server ) ,即远程字典服务,是一个高性能的key-value数据库。
包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
- 基于内存运行,性能高效
- 支持分布式,理论上可以无限扩展
- key-value存储系统
- 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
下面就介绍下Redis服务的安装,以及python的api使用。
redis服务的安装和启动
我使用的是linux系统,安装比较简单
yum install redis
启动服务
systemctl start redis
然后通过 ps -ef | grep 6379 用默认端口号可以查看到redis服务
查看服务状态
systemctl status redis
停止服务
systemctl stop redis
如果想修改文件配置可以在redis.conf里修改
python使用redis
1.安装库
使用python调用redis的API,需要安装python库
pip install redis
使用import reids查看安装是否成功
2.接口调用
redis是key-value的存储形式,使用也很方便,主要是set和get两个接口,我们使用本地默认服务测试:
# redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。
redis_conn = redis.Redis(host='127.0.0.1', port= 6379 , db= 0)
redis_conn.set('key','Hello redis')
print(redis_conn.get('key'))
可以看到返回key对应的数据。
3.使用redis存储numpy数组
如果value对应的是numpy数组,不能简单的直接使用set接口,这里我们需要进行一下转换,在set数据时,我们将numpy转位bytes,然后在get数据时,我们再将bytes数据还原为numpy即可。
主要接口代码:
class RedisModel:
def __init__(self,):
self.conn_redis = redis.Redis(host='127.0.0.1', port=6379, db=0)
def array_to_bytes(self, array):
""" numpy数组转换为bytes,传入redis
:return: encoded bytes
h, w = array.shape
shape = struct.pack('>II', h, w)
encoded = shape + array.tobytes()
return encoded
def bytes_to_array(self, bytes):
""" redis中获取的values转换为numpy
:return: array
h, w = struct.unpack('>II', bytes[:8])
# 注意这里dtype和输入一致,防止数据长度对齐问题
a = np.frombuffer(bytes[8:], dtype=np.float32).reshape(h, w)
return a
def get(self, key):
""" 获取redis内key对应的数据包
:param key: room_id
:return: value(M*N矩阵),key不存在,返回None
# value = None
# if self.conn_redis.exists(key):
value = self.conn_redis.get(key)
value = self.bytes_to_array(value)
return value
def set(self, key, item):