解决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实例之wxpython中Frame使用方法
Jun 09 Python
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
详解python的ORM中Pony用法
Feb 09 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
Mar 19 Python
Django如何配置mysql数据库
May 04 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
python绘制高斯曲线
Feb 19 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 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
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
yii权限控制的方法(三种方法)
2015/12/28 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
asp.net和php的区别点总结
2019/10/10 PHP
DOM 中的事件处理介绍
2012/01/18 Javascript
jQuery替换字符串(实例代码)
2013/11/13 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
Python中多线程thread与threading的实现方法
2014/08/18 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
Python应用库大全总结
2018/05/30 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
怎样声明接口
2014/09/19 面试题
数据库测试通常都包括哪些方面
2015/11/30 面试题
总经理秘书岗位职责
2014/03/17 职场文书
社团活动总结模板
2014/06/30 职场文书
综合管理员岗位职责
2015/02/11 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android