解决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多重继承实例
Oct 11 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
Python多层装饰器用法实例分析
Feb 09 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
浅谈python 中的 type(), dtype(), astype()的区别
Apr 09 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
Python使用OpenCV实现虚拟缩放效果
Feb 28 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使用静态方法的几个注意事项
2014/09/16 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
2016/11/22 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
js实现双色球效果
2020/08/02 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
2020/10/21 Javascript
使用Python编写Linux系统守护进程实例
2015/02/03 Python
Python 的内置字符串方法小结
2016/03/15 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
Python中请不要再用re.compile了
2019/06/30 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
十八大闭幕感言
2014/01/22 职场文书
员工入职担保书范文
2014/04/01 职场文书
终止劳动合同协议书
2014/10/05 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库