解决redis与Python交互取出来的是bytes类型的问题


Posted in Python onJuly 16, 2020

基本代码

from redis import *

if __name__ == '__main__':
 sr = StrictRedis(host='localhost', port=6379, db=0)
 result=sr.set('name','python')
 print(result)

 result1 = sr.get('name')
 print(result1)

运行结果:

True

b'python'

这里我们存进去的是字符串类型的数据,取出来却是字节类型的,这是由于python3的与redis交互的驱动的问题,Python2取出来的就是字符串类型的。

为了得到字符串类型的数据,你可以每次取出来decode一下,但是太繁琐了,可以这样设置:

sr = StrictRedis(host='localhost', port=6379, db=0,decode_responses=True)

即在连接数据库的时候加上decode_responses=True即可

补充知识:python读并写入redis 使用pipline管道

日常开发中,我们总是需要将一些文件写入到缓存中。而读文件较快的方式就是python了,另外python提供了非常好用的api帮助我们连接redis。本例中将会用rediscluster包来连接redis集群,并使用pipeline管道插入文件

# encoding: utf-8
from rediscluster import StrictRedisCluster
import sys
import os
import datetime

# redis_nodes = [{"host": "10.80.23.175", "port": 7000},
#    {"host": "10.80.23.175", "port": 7001},
#    {"host": "10.80.24.175", "port": 7000},
#    {"host": "10.80.24.175", "port": 7001},
#    {"host": "10.80.25.175", "port": 7000},
#    {"host": "10.80.25.175", "port": 7001}
#    ]

def redis_cluster():
 
 redis_nodes = [{"host": "10.80.23.175", "port": 7000},
     {"host": "10.80.23.175", "port": 7001},
     {"host": "10.80.24.175", "port": 7000},
     {"host": "10.80.24.175", "port": 7001},
     {"host": "10.80.25.175", "port": 7000},
     {"host": "10.80.25.175", "port": 7001}
     ]
 try:
  redisconn = StrictRedisCluster(startup_nodes=redis_nodes,
          skip_full_coverage_check=True)
  return redisconn
 except Exception as e:
  print("Connect Error!")
  sys.exit(1)

def to_redis(redis_conn1, file_name):
 # file_name = "D:\data\logs\hippo.log"
 pipe = redis_conn1.pipeline()
 # pos = []
 index = 0
 count = 0
 with open(file_name, 'r') as file_to_read:
  while True:
   lines = file_to_read.readline()
   lines = lines.replace("\n", "")
   if not lines:
    break
    pass
   s = lines.split("\t")
   value = s[1]
   key = s[0]
   result = pipe.lpush(key, value)
   # print(file_name + s)
   index = index + 1
   if index > 5000:
    pipe.execute()
    index = 0
    count = count + 1
    print("execute insert! count is %d" % count)
   pass
  pass
 pipe.execute()

def read_file(path):
 if os.path.isfile(path):
  print("start execute file %s" % path)
  to_redis(path)
 else:
  for root, dirs, files in os.walk(path):
   # print('root_dir:', root) # 当前目录路径
   # print('sub_dirs:', dirs) # 当前路径下所有子目录
   print('files:', files) # 当前路径下所有非目录子文件
   for fileName in files:
    all_name = root + "/" + fileName
    print("start execute file %s" % all_name)
    to_redis(redis_conn, all_name)

start_time = datetime.datetime.now()
redis_conn = redis_cluster()

file_paths = sys.argv[1]
# 第一个参数是本文件 故去掉
#file_paths.pop[0]
#for file_name in file_paths:
#print(file_paths)
read_file(file_paths)
end_time = datetime.datetime.now()
print("use times is %d " % (end_time - start_time).seconds)

在使用的时候需要将要插入的文件以参数形式传入到命令中

例如,将 /data/a.log 插入到redis中

python RedisFIleToRedis.py /data/a.log

以上这篇解决redis与Python交互取出来的是bytes类型的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
python使用xslt提取网页数据的方法
Feb 23 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
Jan 23 Python
python全栈要学什么 python全栈学习路线
Jun 28 Python
python 多维高斯分布数据生成方式
Dec 09 Python
python扫描线填充算法详解
Feb 19 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
Python3 中sorted() 函数的用法
Mar 24 Python
Django实现从数据库中获取到的数据转换为dict
Mar 27 Python
python 爬虫爬取京东ps4售卖情况
Dec 18 Python
Python快速实现一键抠图功能的全过程
Jun 29 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 #Python
Python csv文件记录流程代码解析
Jul 16 #Python
Python 抓取数据存储到Redis中的操作
Jul 16 #Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 #Python
解决python对齐错误的方法
Jul 16 #Python
Python爬虫实例——爬取美团美食数据
Jul 15 #Python
django Model层常用验证器及自定义验证器详解
Jul 15 #Python
You might like
PHP中include()与require()的区别说明
2010/03/10 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
js switch case default 的用法示例介绍
2013/10/23 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
python使用socket远程连接错误处理方法
2015/04/29 Python
在Python的Tornado框架中实现简单的在线代理的教程
2015/05/02 Python
python3实现域名查询和whois查询功能
2018/06/21 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
python 19个值得学习的编程技巧
2020/08/15 Python
行政助理求职自荐信
2013/10/26 职场文书
自荐书范文
2013/12/08 职场文书
技校毕业生个人学习的自我评价
2014/02/21 职场文书
带病坚持工作事迹
2014/05/03 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
班组长安全工作职责
2014/07/15 职场文书
煤矿安全协议书
2014/08/20 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
山楂树之恋观后感
2015/06/11 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL