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 01 Python
Python入门之modf()方法的使用
May 15 Python
python简单分割文件的方法
Jul 30 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
python使用tornado实现简单爬虫
Jul 28 Python
Python实现的特征提取操作示例
Dec 03 Python
Python实现计算对象的内存大小示例
Jul 10 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
新手常见Python错误及异常解决处理方案
Jun 18 Python
Python如何发送与接收大型数组
Aug 07 Python
python之pygame模块实现飞机大战完整代码
Nov 29 Python
Python数据分析之pandas读取数据
Jun 02 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
Maps Javascript
2007/01/22 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
javascript截取字符串小结
2015/04/28 Javascript
基于jquery实现表格无刷新分页
2016/01/07 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
vue使用过滤器格式化日期
2021/01/20 Vue.js
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
初学python数组的处理代码
2011/01/04 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
Flask框架web开发之零基础入门
2018/12/10 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
python-地图可视化组件folium的操作
2020/12/14 Python
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
中专生毕业自我鉴定
2013/11/01 职场文书
留学自荐信写作方法
2014/01/27 职场文书
教师求职信范文
2014/05/24 职场文书
农村门前三包责任书
2014/07/25 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
MySQL为id选择合适的数据类型
2021/06/07 MySQL
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server