利用redis的订阅和发布来实现实时监控的一个DEMO(Python版本)
redis的list类型有个很好的特性,就是每次添加元素后会返回当前list的长度,利用这个特点,我们可以监控它的长度,比如我们的key是用户注册的IP地址,list中存放的是已经在此IP地址上注册的用户的ID,当用户数超过1000的时候来发一个告警,而redis的订阅和发布功能就能帮你很轻松地实现通知监控程序。
第一步,下载需要的软件:
redis: http://redis.googlecode.com/files/redis-2.6.14.tar.gz
redis-py: https://github.com/andymccurdy/redis-py/archive/master.zip
第二步,编写客户端client.py:
#!/usr/bin/env python
#coding=utf-8
import redis
if __name__ == "__main__":
rc = redis.Redis(host='10.250.2.18',port=6379,db=0,password='master123')
ip_addr = "192.168.1.100"
for i in xrange(500):
count = rc.lpush("ip:192.168.1.100",i)
if count > 1000:
rc.publish("count_alarm", count)
rc.publish('ip_alarm', ip_addr)
如果没有设置redis的密码,可以删除password属性【默认没有配置】
第三步,编写服务端 server.py:
#!/usr/bin/env python
#coding=utf-8
import redis
rc = redis.Redis(host='10.250.2.18',port=6379,db=0,password='master123')
ps = rc.pubsub()
ps.subscribe(['count_alarm', 'ip_alarm']) #订阅两个频道,分别是count_alarm ip_alarm
for item in ps.listen():
if item['type'] == 'message':
print item['channel'] , item['data'] # 此处就可以做和监控相关的事了,比如发邮件通知、短信通知或者IM通知等等
第四步,查看效果
运行server.py:
python server.py
运行client.py:
python client.py
client.py会马上结束,而server.py会一直监听,一个简单的DEMO就做好了
利用redis的订阅和发布来实现实时监控的一个DEMO(Python版本)的更多相关文章
- PHP 简易聊天室 利用redis的订阅发布功能
demo:http://www.200ok.fun:8083/api/chat/list 前言:这个种方式太耗redis连接数,每次订阅都会新起一个进程,仅供练手使用,切勿用于生产环境. 原理:1.P ...
- redis的订阅和发布
#订阅和发布有什么用呢?# 特点# 1.实现一个一对多的效果,只有一个发布者,多个订阅者# 2.实时的发布消息,广播方发布消息,所有的订阅者都会受到消息,一个人同时只能接受#一个频道 1.先写一个公共 ...
- 在php中实现Redis的订阅与发布
<?php //require_once dirname(__FILE__).'/class/RedisClass.class.php'; function init_redis(){ $red ...
- Redis消息订阅与发布
监听器的创建 package com.sogou.baike.testimport.testSubscribe; import redis.clients.jedis.JedisPubSub; pub ...
- 基于 Redis 的订阅与发布
Github 仓库 demo-redis-subscribe 创建项目 $ composer create hyperf/biz-skeleton demo-redis-subscribe dev-m ...
- OVM-V1.2 版发布,新增实时监控、支持一键升级
OVM是国内首款.完全免费.企业级--混合虚拟化管理平台,OVM是从中小企业目前的困境得到启发,完全基于国内企业特点开发,更多的关注国内中小企业用户的产品需求. OVM-V1.2 该版本功能变动如下: ...
- 使用 Redis 源码编译发布 Windows 版 Redis For Windows 发行包
Redis 是个高性能的键值数据库,现在日常项目开发过程中,目前个人开发项目基本都会用到 Redis,主要是用来做 缓存 和 分布式锁 的底层支持,个人喜欢用 .NET 技术体系,所以一般部署也是用 ...
- 利用Git钩子实现代码发布
目录 1.什么是git钩子 2.安装一个钩子 3.常用的钩子脚本类型 3.1 客户端钩子 3.1.1 pre-commit 3.1.2 prepare-commit-msg 3.1.3 commit- ...
- 利用Redis发布订阅完成tomcat集群下的消息通知
以下为个人想法,如果有说的不对的地方请各位大佬见谅! 这是博主的第一篇博客,可能排版以及一些描述有不合理的地方还请勿喷,希望大家尽可能的多给我这样的新人一些鼓励让我能在写博客的道路上走下去. 进入正题 ...
随机推荐
- 一Flash从入门开发者放弃了成长之路
本文将依照入门.成长.转行三个关键词来讲述作者这些年使用Flash进行项目开发的整个历史过程. 一.入门--開始走上Flash的道路. 和Flash的机缘要从大学时代说起.2005年下半年.学校开设了 ...
- (hdu step 6.3.2)Girls and Boys(比赛离开后几个人求不匹配,与邻接矩阵)
称号: Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- View Component
View Component 在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为MVC中没有类似Web Forms中的WebControl的功能. ...
- AspNet.WebAPI.OData.ODataPQ
AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务 AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔) AspNet. ...
- hadoop得知;datajoin;chain署名;combine()
hadoop一种简化机制来管理job和control作业之间的非线性依赖,job对象mapreduce表明. job该目的是通过使实例化jobconf对象的构造函数的工作落实. x.addDeopen ...
- oracle_根据表名拼装语句
1.-----批量删除用户下所有表数据------保留表结构 eg: 批量删除用户下的所有表数据 SELECT 'TRUNCATE TALBE '||TABLE_NAME||';' FROM USER ...
- keil程序在外部RAM中调试的问题总结(个人的一点经验总结)
keil程序在内部RAM调试的基本步骤网上已经有非常多了,我就不再赘述,大家能够在网上搜到非常多. 可是有些时候内部RAM并不够用,这就须要将程序装入外部RAM中调试,而在这个过程中可能会出现各种各样 ...
- cocos2d 缓存池 对象的再利用
1.简单的叙述说明池 例如,我们知道,游戏的游戏类型跑酷,游戏元素都在不断重复.游戏的内容将继续从屏幕右侧的创建,当元件在屏幕的左侧的,将消失.假设不变new 对象.release 对象 性能影响.怎 ...
- Jenkins master在windows
Jenkins master在windows上安装 1 Jenkins Jenkins由以前的hudson更名而来.Jenkins的主要功能是监视重复工作的执行,例如软件工程的构建或在cron下设置的 ...
- robot framework用python扩展编写自定义library
我的utils.py文件 #!/usr/bin/env python #-*- coding:utf8 -*- __version__ = '0.1' import sys reload(sys) s ...