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实现2014火车票查询代码分享
Jan 10 Python
采用python实现简单QQ单用户机器人的方法
Jul 03 Python
Python多进程并发(multiprocessing)用法实例详解
Jun 02 Python
python发送HTTP请求的方法小结
Jul 08 Python
使用python实现个性化词云的方法
Jun 16 Python
致Python初学者 Anaconda入门使用指南完整版
Apr 05 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
Django model update的多种用法介绍
Mar 28 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
python随机模块random的22种函数(小结)
May 15 Python
Django --Xadmin 判断登录者身份实例
Jul 03 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 !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
php实现微信发红包
2015/12/05 PHP
laravel入门知识点整理
2020/09/15 PHP
js闭包实例汇总
2014/11/09 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
JS轮播图中缓动函数的封装
2020/11/25 Javascript
原生js实现轮播图
2017/02/27 Javascript
vuejs如何配置less
2017/04/25 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
js 数据类型判断的方法
2020/12/03 Javascript
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
Django 拆分model和view的实现方法
2019/08/16 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
学校后勤人员职责
2013/12/27 职场文书
办公室文员自荐书
2014/02/03 职场文书
大家访活动实施方案
2014/03/10 职场文书
抽奖活动主持词
2014/03/31 职场文书
美容院经理岗位职责
2014/04/03 职场文书
年度考核表个人总结
2015/03/06 职场文书
保研推荐信范文
2015/03/25 职场文书
加薪申请报告范本
2015/05/15 职场文书
公司开业主持词
2015/07/02 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫