解决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 网络编程详解及简单实例
Apr 25 Python
深入理解Python单元测试unittest的使用示例
Nov 18 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
解决win64 Python下安装PIL出错问题(图解)
Sep 03 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
python实现机器人卡牌
Oct 06 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
pycharm全局搜索的具体步骤
Jul 28 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 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
使用GD库生成带阴影文字的图片
2015/03/27 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
NodeJS实现自定义流的方法
2018/08/01 NodeJs
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
JavaScript动态生成表格的示例
2020/11/02 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python高效编程技巧
2013/01/07 Python
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
学习考察心得体会
2014/09/04 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
优秀高中学生评语
2014/12/30 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
感恩教师节主题班会
2015/08/12 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python