解决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检测lvs real server状态
Jan 22 Python
python局域网ip扫描示例分享
Apr 03 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
简单谈谈Python流程控制语句
Dec 04 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
TensorFlow实现简单的CNN的方法
Jul 18 Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 Python
Python中的四种交换数值的方法解析
Nov 18 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
python中@property的作用和getter setter的解释
Dec 22 Python
神经网络训练采用gpu设置的方式
Mar 03 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
上海无线电三厂简史修改版
2021/03/01 无线电
APMServ使用说明
2006/10/23 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
使用PHP备份MYSQL数据的多种方法
2014/01/15 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
List the Stored Procedures in a SQL Server database
2007/06/20 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
javascript时区函数介绍
2012/09/14 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
jQuery+HTML5加入购物车代码分享
2020/10/29 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
2016/08/23 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
浅谈对于react-thunk中间件的简单理解
2019/05/01 Javascript
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
易程科技软件测试笔试
2013/03/24 面试题
服务员自我评价
2014/01/25 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
学习十八大的心得体会
2014/09/01 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python