Python redis操作实例分析【连接、管道、发布和订阅等】


Posted in Python onMay 16, 2019

本文实例讲述了Python redis操作。分享给大家供大家参考,具体如下:

一、redis

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便,Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。

二、python操作redis

1、连接方式

redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
r = redis.Redis(host='192.168.0.110', port=6379,db=0)
r.set('name', 'zhangsan')  #添加
print (r.get('name'))  #获取

2、连接池

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
pool = redis.ConnectionPool(host='192.168.0.110', port=6379)
r = redis.Redis(connection_pool=pool)
r.set('name', 'zhangsan')  #添加
print (r.get('name'))  #获取

3、操作

4、管道

redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
pool = redis.ConnectionPool(host='192.168.0.110', port=6379)
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline(transaction=True)
r.set('name', 'zhangsan')
r.set('name', 'lisi')
pipe.execute()

5、发布和订阅

首先定义一个RedisHelper类,连接Redis,定义频道为monitor,定义发布(publish)及订阅(subscribe)方法。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
class RedisHelper(object):
  def __init__(self):
    self.__conn = redis.Redis(host='192.168.0.110',port=6379)#连接Redis
    self.channel = 'monitor' #定义名称
  def publish(self,msg):#定义发布方法
    self.__conn.publish(self.channel,msg)
    return True
  def subscribe(self):#定义订阅方法
    pub = self.__conn.pubsub()
    pub.subscribe(self.channel)
    pub.parse_response()
    return pub

发布者

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#发布
from RedisHelper import RedisHelper
obj = RedisHelper()
obj.publish('hello')#发布

订阅者

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#订阅
from RedisHelper import RedisHelper
obj = RedisHelper()
redis_sub = obj.subscribe()#调用订阅方法
while True:
  msg= redis_sub.parse_response()
  print (msg)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python常用的爬虫技巧总结
Mar 28 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
Python3 中文文件读写方法
Jan 23 Python
python读写LMDB文件的方法
Jul 02 Python
python获取中文字符串长度的方法
Nov 14 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 Python
简单了解如何封装自己的Python包
Jul 08 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 #Python
Python 实现数据结构中的的栈队列
May 16 #Python
Python 一键制作微信好友图片墙的方法
May 16 #Python
Python实现京东秒杀功能代码
May 16 #Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 #Python
Python异步操作MySQL示例【使用aiomysql】
May 16 #Python
Django 表单模型选择框如何使用分组
May 16 #Python
You might like
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
常用的php对象类型判断
2008/08/27 PHP
php中的strpos使用示例
2014/02/27 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
使用PHP json_decode可能遇到的坑与解决方法
2017/08/03 PHP
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
跟老齐学Python之网站的结构
2014/10/24 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
python调用动态链接库的基本过程详解
2019/06/19 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
策划助理岗位职责
2013/11/18 职场文书
物理教育专业求职信
2014/06/25 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
JavaScript实现队列结构过程
2021/12/06 Javascript
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python