连接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 |
基本退避时间(秒) |