解决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中的With语句
Mar 18 Python
python 中random模块的常用方法总结
Jul 08 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
Sep 11 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
Python利用公共键如何对字典列表进行排序详解
May 19 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
基于python实现雪花算法过程详解
Nov 16 Python
python几种常用功能实现代码实例
Dec 25 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 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
Thinkphp关闭缓存的方法
2015/06/26 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
如何让浏览器支持jquery ajax load 前进、后退功能
2014/06/12 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
Python2与Python3的区别实例分析
2019/04/11 Python
详解Python 切片语法
2019/06/10 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
Python扫描端口的实现
2021/01/25 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
大学生求职信
2014/06/17 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
经营场所使用证明
2015/06/19 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS
js作用域及作用域链工作引擎
2022/07/07 Javascript