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使用CMD模块更优雅的运行脚本
May 11 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
单链表反转python实现代码示例
Feb 08 Python
分分钟入门python语言
Mar 20 Python
基于Python log 的正确打开方式
Apr 28 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
python实现二维插值的三维显示
Dec 17 Python
Django框架验证码用法实例分析
May 10 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
python_mask_array的用法
Feb 18 Python
详解基于Scrapy的IP代理池搭建
Sep 29 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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学习 运算符与运算符优先级
2008/06/15 PHP
php eval函数用法总结
2012/10/31 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
Python实现的单向循环链表功能示例
2017/11/10 Python
使用Python更换外网IP的方法
2018/07/09 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
搞清楚 Python traceback的具体使用方法
2019/05/13 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
微信公众号token验证失败解决方案
2019/07/22 Python
sklearn+python:线性回归案例
2020/02/24 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
详解Selenium 元素定位和WebDriver常用方法
2020/12/04 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
机电专业大学生求职信
2013/10/04 职场文书
餐厅总厨求职信
2014/03/04 职场文书
产品包装策划方案
2014/05/18 职场文书
法律专业求职信
2014/05/24 职场文书
寒山寺导游词
2015/02/03 职场文书
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL
python+opencv实现目标跟踪过程
2022/06/21 Python