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中fileno()方法的使用
May 24 Python
详解Django中的过滤器
Jul 16 Python
python对象及面向对象技术详解
Jul 19 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
python实现图书馆研习室自动预约功能
Apr 27 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
python实现飞机大战微信小游戏
Mar 21 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
详解python校验SQL脚本命名规则
Mar 22 Python
python做接口测试的必要性
Nov 20 Python
Python常用编译器原理及特点解析
Mar 23 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 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与c 实现按行读取文件实例代码
2017/01/03 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
VUE2 前端实现 静态二级省市联动选择select的示例
2018/02/09 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
[03:27]最受玩家喜爱奖提名:PZH_Element 致玩家寄语
2016/12/20 DOTA
Python写入CSV文件的方法
2015/07/08 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Python模块 _winreg操作注册表
2020/02/05 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
管道维修工岗位职责
2013/12/27 职场文书
计算机相关的自我评价
2014/01/15 职场文书
力克胡哲观后感
2015/06/10 职场文书
车间班组长竞聘书
2015/09/15 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
《乘法分配律》教学反思
2016/02/24 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL