python 读取redis数据后转为dataframe格式数据

思路

  1. 读取大规模数据需要借助pipeline,速度会更快
  2. 在读取后,需要删除掉异常读取的数据,pipeline不会报错,但是会返回一个type(line).__name__ == "ResponseError"的结果
  3. redis读取的数据是byte格式,需要整理为str格式

示例

import redis
import pandas as pd
from tqdm import tqdm

pool = redis.ConnectionPool(host='127.0.0.1', db=5)  # 实现一个连接池,这里选择第5个db
redis_cli = redis.Redis(connection_pool=pool)  # 创建连接redis的客户端

# 这里添加一些数据哈:
redis_cli.hmset("value1", {"k1": "v1", "k2": "v2", "k3": "v3"})
redis_cli.expire('value1', 30)  # 30秒后从redis中删除
redis_cli.hmset("value2", {"k1": "v1", "k2": "v2", "k3": "v3"})
redis_cli.expire('value2', 30)  # 30秒后从redis中删除
redis_cli.hmset("value3", {"k1": "v1", "k2": "v2", "k3": "v3"})
redis_cli.expire('value3', 30)  # 30秒后从redis中删除
redis_cli.set('奇奇怪怪的key', '奇奇怪怪的value')
redis_cli.expire('奇奇怪怪的key', 30)  # 30秒后从redis中删除

# 开始取数据
pipe = redis_cli.pipeline()  # 定义一个管道,加速提取
key_list = []
keys = redis_cli.keys()  # 得到所有的key
for key in keys:
    key_list.append(key)
    pipe.hgetall(key)  # 把pipe需要执行的操作
    # 可以调试使用redis_cli.hgetall(随便一个key),测试一下看看是不是想要的结果
value_list = pipe.execute(raise_on_error=False)

# 开始删除读取异常的数据
drop_index = []
for i, line in tqdm(enumerate(value_list)):
    if type(line).__name__ == "ResponseError":  # 把错误的内容剔除出去
        drop_index.append(i)
        continue
    else:
        value_list[i] = {k.decode('utf8'): v.decode('utf8') for k, v in line.items()}  # 把byte的数据转为str数据
[value_list.pop(index) for index in drop_index]

# 直接构造dataframe
df = pd.DataFrame(value_list)
print('a')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值