解决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运行效率
Jun 09 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
python实现的Iou与Giou代码
Jan 18 Python
Python中常见的数制转换有哪些
May 27 Python
Python extract及contains方法代码实例
Sep 11 Python
python 实现单例模式的5种方法
Sep 23 Python
简述python&pytorch 随机种子的实现
Oct 07 Python
详解python中的异常和文件读写
Jan 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
ThinkPHP令牌验证实例
2014/06/18 PHP
来自chinaz的ajax获取评论代码
2008/05/03 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
快速排序 php与javascript的不同之处
2011/02/22 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
angular十大常见问题
2017/03/07 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
Vue 第三方字体图标引入 Font Awesome的方法
2018/09/28 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
python退出命令是什么?详解python退出方法
2018/12/10 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
俄罗斯最大的在线手表商店:Bestwatch.ru
2020/01/11 全球购物
软件测试题目
2013/02/27 面试题
车间工艺员岗位职责
2013/12/09 职场文书
公司董事长职责
2013/12/12 职场文书
应届生求职信
2014/05/31 职场文书
大学生安全责任书
2014/07/25 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
道歉的话怎么说
2015/05/12 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
Win11更新失败并提示0xc1900101
2022/04/19 数码科技
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python