使用redis實現程序或者服務的高可用

使用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

相關文章
相關標籤/搜索