zoukankan      html  css  js  c++  java
  • 使用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的过期时间短一些。

  • 相关阅读:
    我这样来解决CSS的Bug
    JavaScript 获取客户端计算机硬件及系统信息
    asp.net Excel导入&导出
    C#编码好习惯
    解决ASP.NET“类型初始值设定项引发异常”
    使cookie在关闭浏览器后失效
    C# 实现Epson热敏打印机打印 Pos机用
    设计模式的主要设计原则简介
    string .format 生成类似20090409001的序号
    SEO中链接的微处理
  • 原文地址:https://www.cnblogs.com/lucky-heng/p/11135410.html
Copyright © 2011-2022 走看看