利用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就做好了