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、java等哪一门编程语言适合人工智能?
Nov 13 Python
Python语言描述随机梯度下降法
Jan 04 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
python3安装crypto出错及解决方法
Jul 30 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
解决python replace函数替换无效问题
Jan 18 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
Apr 03 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 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
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
漂亮但不安全的CTB
2006/10/09 PHP
PHP 已经成熟
2006/12/04 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
jQuery中triggerHandler()方法用法实例
2015/01/19 Javascript
jquery实现的树形目录实例
2015/06/26 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python字符串格式化
2015/06/15 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
小学生优秀评语大全
2014/04/22 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
先进个人事迹材料
2014/12/29 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python