当Redis连接断开时,重试Redis操作

3
我想编写代码将数据插入Redis。首先,代码应该连接到Redis服务器,如果连接失败,则重试。一旦连接成功,代码应该执行像hset()set()这样的命令。如果连接断开,我该如何重试这些命令?
目前为止,我只处理了连接步骤中的重试。
while cnt < 11:
    try:
        r.ping()
        break

    except redis.ConnectionError:
        time_sleep = cnt * 5
        time.sleep(time_sleep)
        r = redis.Redis(host='10.23.*.*', port=6379, db=0)
        cnt += 1
        print cnt
if cnt == 11:
     sys.exit(-1)
r.hset(field,keys,1)

如果“异常情况”指的是在尝试使用Redis时抛出任何类型的异常,那么是的,“try...except”。 - J0HN
1个回答

4
您可以将最初的计数器想法扩展到任何操作上。
max_retries = 10
count = 0

r = redis.Redis(host='10.23.*.*', port=6379, db=0)

def try_command(f, *args, **kwargs):
    while True:
        try:
            return f(*args, **kwargs)
        except redis.ConnectionError:
            count += 1

            # re-raise the ConnectionError if we've exceeded max_retries
            if count > max_retries:
                raise

            backoff = count * 5

            print('Retrying in {} seconds'.format(backoff)
            time.sleep(backoff)

            r = redis.Redis(host='10.23.*.*', port=6379, db=0)

# this will retry until a result is returned
# or will re-raise the final ConnectionError
try_command(r.hset, field, keys, 1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接