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写的一个squid访问日志分析的小程序
Sep 17 Python
Python使用MySQLdb for Python操作数据库教程
Oct 11 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
python 系统调用的实例详解
Jul 11 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
如何用python写一个简单的词法分析器
Dec 18 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
Python安装并操作redis实现流程详解
Oct 13 Python
python drf各类组件的用法和作用
Jan 12 Python
用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
深入PHP5中的魔术方法详解
2013/06/17 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
python制作最美应用的爬虫
2015/10/28 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
常见python正则用法的简单实例
2016/06/21 Python
python读取文件名并改名字的实例
2019/01/07 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
实习生自我鉴定
2013/12/12 职场文书
拖鞋店创业计划书
2014/01/15 职场文书
《藏戏》教学反思
2014/02/11 职场文书
物业前台接待岗位职责
2015/04/03 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电
一行Python命令实现批量加水印
2022/04/07 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python