python实现与redis交互操作详解


Posted in Python onApril 21, 2020

本文实例讲述了python实现与redis交互操作。分享给大家供大家参考,具体如下:

相关内容:

  • redis模块的使用
    • 安装模块
    • 导入模块
    • 连接方式
    • 连接池
    • 操作
      • 设置值
      • 获取值
  • 管道
  • 事务
  • 订阅\发布

 首发时间:2018-03-14 15:02


python可以使用redis模块来跟redis交互


redis模块的使用:

  • 安装模块: pip3 install redis
  • 导入模块:import redis
  • 连接方式:
    • 严格连接模式:r=redis.StrictRedis(host="",port=)
    • 更Python化的连接模式:r=redis.Redis(host="",port=)
    • StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令
    • Redis与StrictRedis的区别是:Redis是StrictRedis的子类,用于向前兼容旧版本的redis-py,并且这个连接方式是更加"python化"的
  • 连接池:
    • 为了节省资源,减少多次连接损耗,连接池的作用相当于总揽多个客户端与服务端的连接,当新客户端需要连接时,只需要到连接池获取一个连接即可,实际上只是一个连接共享给多个客户端。
      import redis
      
      pool= redis.ConnectionPool(host='localhost',port=6379,decode_responses=True)
      
      r=redis.Redis(connection_pool=pool)
      r2=redis.Redis(connection_pool=pool)
      r.set('apple','a')
      print(r.get('apple'))
      r2.set('banana','b')
      print(r.get('banana'))
      
      print(r.client_list())
      print(r2.client_list())#可以看出两个连接的id是一致的,说明是一个客户端连接
  • 操作:
    • 值的设置和获取,可以参考redis的命令,redis模块中的对应功能的函数名基本与redis中的一致
    • 【注意默认情况下,设置的值或取得的值都为bytes类型,如果想改为str类型,需要在连接时添加上decode_responses=True】
    • 设置值:
      • redis中set()  ==>r.set()
      • redis中setnx()  ==>r.set()
      • redis中setex() ==>r.setex()
      • redis中setbit()  ==>r.setbit()
      • redis中mset()  == > r.mset()
      • redis中hset()  ==>r.hset()
      • redis中sadd() == >r.sadd()
      • 其他。。。基本redis的命令名与redis模块中的函数名一致
    • 获取:
      • redis中get() ==》r.get()
      • redis中mget() ==》r.mget()
      • redis中getset() ==》r.getset()
      • redis中getrange() ==》r.getrange()
      • 其他。。。基本redis的命令名与redis模块中的函数名一致

如果想要了解更多redis命令,可以参考我的另外一篇博文:

一文学redis操作(记录向)<点击即可跳转>

import redis
r=redis.Redis(host='localhost',port=6379,decode_responses=True)
# r=redis.StrictRedis(host='localhost',port=6379)

r.set('key','value')
value=r.get('key')
# print(type(value))
print(value)
r.hset('info','name','lilei')
r.hset('info','age','18')
print(r.hgetall('info'))
r.sadd('course','math','english','chinese')
print(r.smembers('course'))

管道:

一般情况下,执行一条命令后必须等待结果才能输入下一次命令,管道用于在一次请求中执行多个命令。

  • 参数介绍:
    • transaction:指示是否所有的命令应该以原子方式执行。
import redis,time

r=redis.Redis(host="localhost",port=6379,decode_responses=True)

pipe=r.pipeline(transaction=True)

pipe.set('p1','v2')
pipe.set('p2','v3')
pipe.set('p3','v4')
time.sleep(5)
pipe.execute()

事务:

python中可以使用管道来代替事务:

  • 补充:监视watch:pipe.watch()
import redis,time
import redis.exceptions
r=redis.Redis(host='localhost',port=6379,decode_responses=True)
pipe=r.pipeline()
print(r.get('a'))


try:
  # pipe.watch('a')
  pipe.multi()
  pipe.set('here', 'there')
  pipe.set('here1', 'there1')
  pipe.set('here2', 'there2')
  time.sleep(5)
  pipe.execute()

except redis.exceptions.WatchError as e:
  print("Error")

订阅\发布:

    • 发布方:
import redis
r=redis.Redis(host="localhost",port=6379,decode_responses=True)

#发布使用publish(self, channel, message):Publish ``message`` on ``channel``.
Flag=True
while Flag:
  msg=input("主播请讲话>>:")
  if len(msg)==0:
    continue
  elif msg=='quit':
    break
  else:
    r.publish('cctv0',msg)
    • 订阅方:
      • 当订阅成功后,第一次接收返回的第一个消息是一个订阅确认消息:python实现与redis交互操作详解
import redis
r=redis.Redis(host="localhost",port=6379,decode_responses=True)

#发布使用publish(self, channel, message):Publish ``message`` on ``channel``.
Flag=True
chan=r.pubsub()#返回一个发布/订阅对象
msg_reciver=chan.subscribe('cctv0')#订阅

msg=chan.parse_response()#第一次会返回订阅确认信息
print(msg)
print("订阅成功,开始接收------")
while Flag:
  msg=chan.parse_response()#接收消息
  print(">>:",msg[2])#此处的信息格式['消息类型', '频道', '消息'],所以使用[2]来获取

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python图像处理之镜像实现方法
May 30 Python
Python tkinter事件高级用法实例
Jan 31 Python
Python高斯消除矩阵
Jan 02 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
python3.7 的新特性详解
Jul 25 Python
Python enumerate函数遍历数据对象组合过程解析
Dec 11 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
使用Tkinter制作信息提示框
Feb 18 Python
Python基于os.environ从windows获取环境变量
Jun 09 Python
keras导入weights方式
Jun 12 Python
Python装饰器结合递归原理解析
Jul 02 Python
pytorch通过训练结果的复现设置随机种子
Jun 01 Python
Django-migrate报错问题解决方案
Apr 21 #Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 #Python
jupyter 导入csv文件方式
Apr 21 #Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 #Python
Python多线程实现支付模拟请求过程解析
Apr 21 #Python
安装多个版本的TensorFlow的方法步骤
Apr 21 #Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 #Python
You might like
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
js树形控件脚本代码
2008/07/24 Javascript
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
浅谈jQuery构造函数分析
2015/05/11 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
python ip正则式
2009/05/07 Python
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
python绘图方法实例入门
2015/05/19 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python I/O与进程的详细讲解
2019/03/08 Python
python pytest进阶之fixture详解
2019/06/27 Python
Python整数对象实现原理详解
2019/07/01 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
Servlet的生命周期
2013/08/25 面试题
护理学毕业生自荐信
2013/10/02 职场文书
新闻专业个人求职信
2013/12/19 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python