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 相关文章推荐
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
python如何将两张图片生成为全景图片
Mar 05 Python
tensorflow安装成功import tensorflow 出现问题
Apr 16 Python
python 画条形图(柱状图)实例
Apr 24 Python
Django多层嵌套ManyToMany字段ORM操作详解
May 19 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
基于Django集成CAS实现流程详解
Nov 28 Python
python如何正确使用yield
May 21 Python
Python办公自动化之Excel(中)
May 24 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
php表单提交与$_POST实例分析
2015/01/26 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
PHP实现微信对账单处理
2018/10/01 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
vue-cli脚手架引入弹出层layer插件的几种方法
2019/06/24 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python入门篇之文件
2014/10/20 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
python操作toml文件的示例代码
2020/11/27 Python
websocket+sockjs+stompjs详解及实例代码
2018/11/30 HTML / CSS
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
保安自我鉴定范文
2013/12/08 职场文书
应届毕业生求职信范文分享
2013/12/26 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
无毒社区工作方案
2014/05/23 职场文书
介绍信格式
2015/01/30 职场文书
辛亥革命观后感
2015/06/02 职场文书
如何使用SQL Server语句创建表
2022/04/12 SQL Server
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技