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中使用判断语句和循环的教程
Apr 25 Python
Python中字符串的格式化方法小结
May 03 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
关于python写入文件自动换行的问题
Jun 23 Python
Pycharm以root权限运行脚本的方法
Jan 19 Python
详解用Python练习画个美队盾牌
Mar 23 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
Python循环中else,break和continue的用法实例详解
Jul 11 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 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
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
JS图片自动轮换效果实现思路附截图
2014/04/30 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
js获取内联样式的方法
2015/01/27 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
解析Json字符串的三种方法日常常用
2018/05/02 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
python生成lmdb格式的文件实例
2018/11/08 Python
python实现复制大量文件功能
2019/08/31 Python
建筑工程实习自我鉴定
2013/09/19 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
2014年优秀党员材料
2014/12/18 职场文书
男方婚前保证书
2015/02/28 职场文书
生产现场禁烟通知
2015/04/23 职场文书
网络营销实训总结
2015/08/03 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
Java实现二维数组和稀疏数组之间的转换
2021/06/27 Java/Android
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js