解决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求pi的方法
Oct 08 Python
Python中类的继承代码实例
Oct 28 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
Python守护线程用法实例
Jun 23 Python
Python中input与raw_input 之间的比较
Aug 20 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
python networkx 包绘制复杂网络关系图的实现
Jul 10 Python
基于python实现学生信息管理系统
Nov 22 Python
python爬虫爬取监控教务系统的思路详解
Jan 08 Python
Python 下载Bing壁纸的示例
Sep 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
Zerg兵种介绍
2020/03/14 星际争霸
php 301转向实现代码
2008/09/18 PHP
php中计算时间差的几种方法
2009/12/31 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
解析ajaxFileUpload 异步上传文件简单使用
2016/12/30 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
微信、QQ、微博、Safari中使用js唤起App
2018/01/24 Javascript
详解react、redux、react-redux之间的关系
2018/04/11 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
python实现ftp客户端示例分享
2014/02/17 Python
python非递归全排列实现方法
2017/04/10 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
Pytorch 实现权重初始化
2019/12/31 Python
python 如何区分return和yield
2020/09/22 Python
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
毕业生自我鉴定范文
2013/11/08 职场文书
促销活动总结怎么写
2014/06/25 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
党校学习党性分析材料
2014/12/19 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫