解决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实现字典的key和values的交换
Aug 04 Python
Python的装饰器用法学习笔记
Jun 24 Python
对python sklearn one-hot编码详解
Jul 10 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
python爬取网易云音乐评论
Nov 16 Python
python3实现猜数字游戏
Dec 07 Python
Python线程指南分享
Nov 19 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
python调用win32接口进行截图的示例
Nov 11 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 Python
Python first-order-model实现让照片动起来
Jun 25 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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php解析json数据实例
2014/08/19 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
js实现div闪烁原理及实现代码
2014/06/24 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python使用百度翻译进行中翻英示例
2014/04/14 Python
Python通过RabbitMQ服务器实现交换机功能的实例教程
2016/06/29 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
学生会部长竞聘书
2014/03/31 职场文书
教师评语大全
2014/04/28 职场文书
员工辞退通知书
2015/04/17 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
JS数组去重详情
2021/11/07 Javascript