最近在项目中使用到了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数据库。
包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:
下面就介绍下Redis服务的安装,以及python的api使用。
我使用的是linux系统,安装比较简单
yum install redis
启动服务
systemctl start redis
然后通过 ps -ef | grep 6379 用默认端口号可以查看到redis服务
查看服务状态
systemctl status redis
停止服务
systemctl stop redis
如果想修改文件配置可以在redis.conf里修改
使用python调用redis的API,需要安装python库
pip install redis
使用import reids查看安装是否成功
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对应的数据。
如果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):
""" 新信息写入redis
:param key: ****
:param item:*****
"""
b_value = self.array_to_bytes(item)
self.conn_redis.set(key, b_value)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。