python - 连接断开时重试 Redis 操作

标签 python redis

我想编写代码将数据插入 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)

最佳答案

您可以扩展您最初的反击想法,将其应用于任何操作。

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)

关于python - 连接断开时重试 Redis 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24773114/

相关文章:

redis - cas redis 票证登记处

redis - 如何使用 Redis 在生产环境中访问多个不同的 key ?

python - 使用 pandas 访问 json 列

python - 将装饰器与 Python Slack API 一起使用

python - Perspective Broker 可以通过 stdio 而不是 TCP 使用吗?

php - 队列 Redis 不会在 Laravel Forge 上被触发

docker - ConnectionError : Error -3 connecting to redis:6379. 再试一次

redis - 使用jedis如何写入redis集群中的特定槽/节点

python - 自定义脚本的 Zabbix 发现规则 : need any advices

python - 在 Debian 操作系统上使用 pandas 从 github 存储库读取 csv 文件时出现奇怪的 csv 输出