连接DCS单机、主备、读写分离、Proxy集群实例
from redis.backoff import ExponentialBackoff
from redis.retry import Retry
from redis.client import Redis
from redis.connection import BlockingConnectionPool
from redis.exceptions import (
BusyLoadingError,
ConnectionError,
TimeoutError
)
redis_client = None
def create_redis_client(context):
logger = context.getLogger()
redis_address = context.getUserData("redis_ip_address")
redis_host = redis_address.split(":")[0]
redis_port = redis_address.split(":")[1]
redis_password = context.getUserData("redis_password")
logger.info("redis host={}".format(redis_host))
logger.info("redis port={}".format(redis_port))
retry = Retry(ExponentialBackoff(), 3)
pool = BlockingConnectionPool(host=redis_host, port=redis_port,
password=redis_password,
max_connections=20, timeout=3,
socket_timeout=2,
socket_connect_timeout=2,
retry=retry,
retry_on_error=[BusyLoadingError,
ConnectionError,
TimeoutError],
health_check_interval=60,
decode_responses=True)
return Redis(connection_pool=pool)
def initializer(context):
global redis_client
redis_client = create_redis_client(context)
redis_client.ping()
def handler(event, context):
logger = context.getLogger()
redis_client.set('foo', 'bar')
value = redis_client.get('foo')
logger.info("redis get key foo value={}".format(value))
return value 
客户端使用连接池时不要将获取连接的操作放在初始化函数 initializer 方法中,否则只会在初始化时获取一个连接而导致连接池使用无效。当网络抖动时可能会使已获取的连接断连,后续复用该实例的并发请求时可能会因断连而访问redis失败。
参数 | 默认值 | 说明 |
|---|---|---|
connection_pool | None | 连接池 |
参数 | 默认值 | 说明 |
|---|---|---|
max_connections | 50 | 连接池最大连接数 |
timeout | 20 | 连接池耗尽后获取连接的最大等待时间 |
参数 | 默认值 | 说明 |
|---|---|---|
host | localhost | 连接Redis实例的IP地址/域名 |
port | 6379 | 连接端口号 |
password | - | 连接密码 |
socket_timeout | None | 请求等待响应的超时时间(秒) |
socket_connect_timeout | None | 连接超时时间(秒) |
retry | None | 失败后重试策略 |
retry_on_error | None | 需要重试的错误列表 |
health_check_interval | 0 | Redis连接健康检查间隔 |
decode_responses | False | 默认所有响应都以字节形式返回 |
参数 | 默认值 | 说明 |
|---|---|---|
backoff | - | 退避策略 |
retries | - | 重试次数,可以是负数,支持永远重试 |
supported_errors | ConnectionError TimeoutError socket.timeout | 触发重试的支持错误类型 |
参数 | 默认值 | 说明 |
|---|---|---|
cap | 0.512 | 最大退避时间(秒) |
base | 0.008 | 基本退避时间(秒) |

