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使用django获取用户IP地址的方法
May 11 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
Python动态导入模块的方法实例分析
Jun 28 Python
Python版名片管理系统
Nov 30 Python
python的常用模块之collections模块详解
Dec 06 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
python 实现图像快速替换某种颜色
Jun 04 Python
Django中template for如何使用方法
Jan 31 Python
基于Python实现将列表数据生成折线图
Mar 23 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
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
Vue按需加载的具体实现
2017/12/02 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
Python ATM功能实现代码实例
2020/03/19 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
荷兰电脑专场:Paradigit
2018/05/05 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
音乐专业自荐信
2014/02/07 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
献爱心标语
2014/06/21 职场文书
文明礼仪倡议书
2015/04/28 职场文书
2016新年感言
2015/08/03 职场文书
2016年社区服务活动总结
2016/04/06 职场文书