使用redis實現程序或者服務的高可用,就是將某一程序或服務部署在不一樣服務器上,或者是跨機房部署,當運行服務的服務器掛了以後,其餘服務器上的該服務能立馬頂上,這裏我簡單的使用redis實現這一目的。redis
思路是: 部署在不一樣服務器上的相同服務,隔段時間去redis上查下某一個鍵(本身定義),若是該鍵不存在,則設置該鍵的值,能夠是本身本服務器的IP,並設置的一個過時時間,而後執行服務的業務邏輯,若是該鍵存在,查看該鍵的值是否是本身的IP,若是是,更新該鍵的過時時間。代碼以下:服務器
# coding:utf8 import time import redis import threading REDIS_DB = { 'host': '*********', 'port': *****, 'password': None, } KEY = "********" EXPIRATION_TIME = 12 LOOP_TIME = 10 SERVER_IP = "1.1.1.1"
RUNNING = False #標識任務是否在跑 def use_redis(option=REDIS_DB): pool = redis.ConnectionPool(**option) r = redis.Redis(connection_pool=pool) return r def main(): client = use_redis() flag = client.exists(KEY)
global RUNNING if not flag: client.setex(KEY, SERVER_IP, EXPIRATION_TIME) t = threading.Thread(target=work) t.start()
RUNNING = True else: value = client.get(KEY) if value == SERVER_IP: client.expire(KEY, EXPIRATION_TIME)
if not RUNNING:
t = threading.Thread(target=work)
t.start()
RUNNING = True
# 模擬業務邏輯 def work(): while True: .......... time.sleep(8) if __name__ == "__main__": while True:
try: main()
except Exception, err:
print(err)
finally: time.sleep(LOOP_TIME)
固然,隔段時間去查一下redis,這個時間要比key的過時時間短一些。spa