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 3.x 新特性及10大变化
Jun 12 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
Python用threading实现多线程详解
Feb 03 Python
使用Eclipse如何开发python脚本
Apr 11 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
OpenCV读取与写入图片的实现
Oct 13 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
Mar 01 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
Python实现日志实时监测的示例详解
Apr 06 Python
Python数据可视化之Seaborn的安装及使用
Apr 19 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
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
使用php4加速网络传输
2006/10/09 PHP
php 特殊字符处理函数
2008/09/05 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
Js中sort()方法的用法
2006/11/04 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
jQuery实现多级联动下拉列表查询框
2016/01/18 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
vue组件学习教程
2017/09/09 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
JS实现多选框的操作
2020/06/24 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
javascript实现页面的实时时钟显示示例
2020/08/06 Javascript
js实现筛选功能
2020/11/24 Javascript
基于Python实现用户管理系统
2019/02/26 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python实现多线程端口扫描
2019/08/31 Python
Python集合操作方法详解
2020/02/09 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
django实现模型字段动态choice的操作
2020/04/01 Python
python如何调用百度识图api
2020/09/29 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
铭万公司.net面试题笔试题
2014/07/20 面试题
do you have any Best Practice for testing
2016/06/04 面试题
刊首寄语大全
2014/04/11 职场文书
4s店活动策划方案
2014/08/25 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP
Django框架之路由用法
2022/06/10 Python