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语言的12个基础知识点小结
Jul 10 Python
Python THREADING模块中的JOIN()方法深入理解
Feb 18 Python
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
浅谈Python的垃圾回收机制
Dec 17 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
python将控制台输出保存至文件的方法
Jan 07 Python
python ipset管理 增删白名单的方法
Jan 14 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
PyTorch的Debug指南
May 07 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优于Node.js的五大理由分享
2012/09/15 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php 类自动载入的方法
2015/06/03 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
2018/04/20 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
vue实现与安卓、IOS交互的方法
2018/11/02 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
Vue3为什么这么快
2020/09/23 Javascript
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
Python登录注册验证功能实现
2018/06/18 Python
python之super的使用小结
2018/08/13 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
学生实习自我鉴定
2013/10/11 职场文书
酒店前厅员工辞职信
2014/01/08 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
营销与策划专业求职信
2014/06/20 职场文书
捐款活动总结
2014/08/27 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
音乐研修感悟
2015/11/18 职场文书
Go语言测试库testify使用学习
2022/07/23 Golang