Upgrading redis 4 to 5
Breaking4.6.0 → 5.3.1Breaking6Platform1Deprecated3New42Changed10Fixed66Other89
BreakingUpgrade verdict
5 breaking changes and a platform requirement change.
In plain terms
- Handle RESP3 sets as Python lists.
- Timeseries insertion filters for close samples.
- The command that checks set membership now returns a number instead of a boolean.
- If you turn on the new RESP3 protocol, some Redis replies come back in different shapes than before, so code that reads them may need updating.
Must act Top 5 of 9 that need code or config changes
Python requirement changed in 5.1.0b1: >=3.7 → >=3.8.
Adds pyjwt >=2.9.0.
Installs 1 package in all (was 0).
What you must change
Breaking5
Handle RESP3 sets as Python lists.
Timeseries insertion filters for close samples.
Changes the
SISMEMBER return type to int.SISMEMBERAdds RESP3 support, which changes response types for RESP3 users and may break callers.
Partial clean up of Python 3.7 compatibility.
Platform1
Drops support for Python 3.7, which reached end-of-life in June 2023; migrating to Python 3.10 is recommended.
Deprecations to plan for
Deprecated3
Deprecating unused arguments in connection pools's get_connection functions.
Adding load balancing strategy configuration to cluster clients(replacement for 'read_from_replicas' config).
Deprecates RedisGraph.
API changes
Generated by DepDelta from published Python source. Not mixed with prose notes.
- removed:
export CommandsParser
- changed:
async method Pipeline.execute(raise_on_error: bool=…) → async method Pipeline.execute(raise_on_error: bool=…) -> List[Any] - changed:
async method PubSub.reset() → async method PubSub.reset() -> None - changed:
constructor PubSub(connection_pool: ConnectionPool, shard_hint: Optional[str]=…, ignore_subscribe_messages: bool=…, encoder=…) → constructor PubSub(connection_pool: ConnectionPool, shard_hint: Optional[str]=…, ignore_subscribe_messages: bool=…, encoder=…, push_handler_func: Optional[Callable]=…, event_dispatcher: Optional[EventDispatcher]=…) - changed:
method PubSub.close() -> Awaitable[NoReturn] → async method PubSub.close() -> None - changed:
static method Redis.from_url(url: str, **kwargs) → static method Redis.from_url(url: str, single_connection_client: bool=…, auto_close_connection_pool: Optional[bool]=…, **kwargs) - added:
async method Pipeline.aclose() -> None - added:
async method PubSub.aclose() - added:
async method Redis.aclose(close_connection_pool: Optional[bool]=…) -> None - added:
static method Redis.from_pool(connection_pool: ConnectionPool) -> Redis
- removed:
async method NodesManager.close(attr: str=…) -> None - changed:
constructor NodesManager(startup_nodes: List[ClusterNode], require_full_coverage: bool, connection_kwargs: Dict[str, Any], address_remap: Optional[Callable[[str, int], Tuple[str, int]]]=…) -> None → constructor NodesManager(startup_nodes: List[ClusterNode], require_full_coverage: bool, connection_kwargs: Dict[str, Any], address_remap: Optional[Callable[[Tuple[str, int]], Tuple[str, int]]]=…, event_dispatcher: Optional[EventDispatcher]=…) -> None - changed:
constructor RedisCluster(host: Optional[str]=…, port: Union[str, int]=…, startup_nodes: Optional[List[ClusterNode]]=…, require_full_coverage: bool=…, read_from_replicas: bool=…, reinitialize_steps: int=…, cluster_error_retry_attempts: int=…, connection_error_retry_attempts: int=…, max_connections: int=…, db: Union[str, int]=…, path: Optional[str]=…, credential_provider: Optional[CredentialProvide… → constructor RedisCluster(host: Optional[str]=…, port: Union[str, int]=…, startup_nodes: Optional[List[ClusterNode]]=…, require_full_coverage: bool=…, read_from_replicas: bool=…, load_balancing_strategy: Optional[LoadBalancingStrategy]=…, reinitialize_steps: int=…, cluster_error_retry_attempts: int=…, connection_error_retry_attempts: int=…, max_connections: int=…, db: Union[str, int]=…, path: Opti… - changed:
method NodesManager.get_node_from_slot(slot: int, read_from_replicas: bool=…) -> ClusterNode → method NodesManager.get_node_from_slot(slot: int, read_from_replicas: bool=…, load_balancing_strategy=…) -> ClusterNode - added:
async method ClusterNode.re_auth_callback(token: TokenInterface) - added:
async method NodesManager.aclose(attr: str=…) -> None - added:
async method RedisCluster.aclose() -> None
- removed:
async method BaseParser.can_read_destructive() -> bool - removed:
async method BaseParser.read_response(disable_decoding: bool=…) -> Union[EncodableT, ResponseError, None, List[EncodableT]] - removed:
async method BlockingConnectionPool.disconnect(inuse_connections: bool=…) - removed:
async method HiredisParser.can_read_destructive() - removed:
async method HiredisParser.read_from_socket() - removed:
async method HiredisParser.read_response(disable_decoding: bool=…) -> Union[EncodableT, List[EncodableT]] - removed:
async method PythonParser.can_read_destructive() -> bool - removed:
async method PythonParser.read_response(disable_decoding: bool=…) - removed:
class BaseParser - removed:
class Encoder - removed:
class HiredisParser(BaseParser) - removed:
class PythonParser(BaseParser) - removed:
constructor BaseParser(socket_read_size: int) - removed:
constructor Encoder(encoding: str, encoding_errors: str, decode_responses: bool) - removed:
constructor HiredisParser(socket_read_size: int) - removed:
constructor PythonParser(socket_read_size: int) - removed:
field BaseParser.EXCEPTION_CLASSES: ExceptionMappingT - removed:
method AbstractConnection.clear_connect_callbacks() - removed:
method BaseParser.on_connect(connection: AbstractConnection) - removed:
method BaseParser.on_disconnect() - removed:
method BlockingConnectionPool.make_connection() - removed:
method BlockingConnectionPool.reset() - removed:
method ConnectionPool.owns_connection(connection: AbstractConnection) - removed:
method Encoder.decode(value: EncodableT, force=…) -> EncodableT - removed:
method Encoder.encode(value: EncodableT) -> EncodedT - removed:
method HiredisParser.on_connect(connection: AbstractConnection) - removed:
method HiredisParser.on_disconnect() - removed:
method PythonParser.on_connect(connection: AbstractConnection) - removed:
method PythonParser.on_disconnect() - removed:
static method BaseParser.parse_error(response: str) -> ResponseError - removed:
variable ExceptionMappingT - removed:
variable MODULE_EXPORTS_DATA_TYPES_ERROR - removed:
variable MODULE_LOAD_ERROR - removed:
variable MODULE_UNLOAD_NOT_POSSIBLE_ERROR - removed:
variable NO_AUTH_SET_ERROR - removed:
variable NO_SUCH_MODULE_ERROR - removed:
variable SERVER_CLOSED_CONNECTION_ERROR - removed:
variable hiredis - changed:
async method AbstractConnection.read_response(disable_decoding: bool=…, timeout: Optional[float]=…, *, disconnect_on_error: bool=…) → async method AbstractConnection.read_response(disable_decoding: bool=…, timeout: Optional[float]=…, *, disconnect_on_error: bool=…, push_request: Optional[bool]=…) - changed:
async method BlockingConnectionPool.get_connection(command_name, *keys, **options) → async method BlockingConnectionPool.get_connection(command_name=…, *keys, **options) - changed:
async method ConnectionPool.get_connection(command_name, *keys, **options) → async method ConnectionPool.get_connection(command_name=…, *keys, **options) - changed:
constructor RedisSSLContext(keyfile: Optional[str]=…, certfile: Optional[str]=…, cert_reqs: Optional[str]=…, ca_certs: Optional[str]=…, ca_data: Optional[str]=…, check_hostname: bool=…) → constructor RedisSSLContext(keyfile: Optional[str]=…, certfile: Optional[str]=…, cert_reqs: Optional[str]=…, ca_certs: Optional[str]=…, ca_data: Optional[str]=…, check_hostname: bool=…, min_version: Optional[ssl.TLSVersion]=…, ciphers: Optional[str]=…) - changed:
constructor SSLConnection(ssl_keyfile: Optional[str]=…, ssl_certfile: Optional[str]=…, ssl_cert_reqs: str=…, ssl_ca_certs: Optional[str]=…, ssl_ca_data: Optional[str]=…, ssl_check_hostname: bool=…, **kwargs) → constructor SSLConnection(ssl_keyfile: Optional[str]=…, ssl_certfile: Optional[str]=…, ssl_cert_reqs: str=…, ssl_ca_certs: Optional[str]=…, ssl_ca_data: Optional[str]=…, ssl_check_hostname: bool=…, ssl_min_version: Optional[ssl.TLSVersion]=…, ssl_ciphers: Optional[str]=…, **kwargs) - changed:
variable DefaultParser: Type[Union[PythonParser, HiredisParser]] → variable DefaultParser: Type[Union[_AsyncRESP2Parser, _AsyncRESP3Parser, _AsyncHiredisParser]] - added:
async method AbstractConnection.process_invalidation_messages() - added:
async method AbstractConnection.re_auth() - added:
async method ConnectionPool.aclose() -> None - added:
async method ConnectionPool.ensure_connection(connection: AbstractConnection) - added:
async method ConnectionPool.re_auth_callback(token: TokenInterface) - added:
method AbstractConnection.deregister_connect_callback(callback) - added:
method AbstractConnection.get_protocol() - added:
method AbstractConnection.set_re_auth_token(token: TokenInterface) - added:
method ConnectionPool.can_get_connection() -> bool - added:
method ConnectionPool.get_available_connection() - added:
property SSLConnection.min_version
- removed:
async method CommandsParser.get_keys(*args: Any) -> Optional[Tuple[str, ...]] - removed:
async method CommandsParser.initialize(node: Optional[ClusterNode]=…) -> None - removed:
class CommandsParser - removed:
constructor CommandsParser() -> None
- changed:
async method SentinelManagedConnection.read_response(disable_decoding: bool=…, timeout: Optional[float]=…, *, disconnect_on_error: Optional[float]=…) → async method SentinelManagedConnection.read_response(disable_decoding: bool=…, timeout: Optional[float]=…, *, disconnect_on_error: Optional[float]=…, push_request: Optional[bool]=…)
- added:
class InvalidTokenSchemaErr(Exception) - added:
class RequestTokenErr(Exception) - added:
class TokenRenewalErr(Exception) - added:
constructor InvalidTokenSchemaErr(missing_fields: Iterable[str]=…) - added:
constructor RequestTokenErr(*args) - added:
constructor TokenRenewalErr(*args)
- added:
class IdentityProviderConfigInterface(ABC) - added:
class IdentityProviderInterface(ABC) - added:
method IdentityProviderConfigInterface.get_provider() -> IdentityProviderInterface - added:
method IdentityProviderInterface.request_token(force_refresh=…) -> TokenInterface
- added:
class JWToken(TokenInterface) - added:
class SimpleToken(TokenInterface) - added:
class TokenInterface(ABC) - added:
class TokenResponse - added:
constructor JWToken(token: str) - added:
constructor SimpleToken(value: str, expires_at_ms: float, received_at_ms: float, claims: dict) -> None - added:
constructor TokenResponse(token: TokenInterface) - added:
field JWToken.REQUIRED_FIELDS - added:
method JWToken.get_expires_at_ms() -> float - added:
method JWToken.get_received_at_ms() -> float - added:
method JWToken.get_value() -> str - added:
method JWToken.is_expired() -> bool - added:
method JWToken.try_get(key: str) -> str - added:
method JWToken.ttl() -> float - added:
method SimpleToken.get_expires_at_ms() -> float - added:
method SimpleToken.get_received_at_ms() -> float - added:
method SimpleToken.get_value() -> str - added:
method SimpleToken.is_expired() -> bool - added:
method SimpleToken.try_get(key: str) -> str - added:
method SimpleToken.ttl() -> float - added:
method TokenInterface.get_expires_at_ms() -> float - added:
method TokenInterface.get_received_at_ms() -> float - added:
method TokenInterface.get_value() -> str - added:
method TokenInterface.is_expired() -> bool - added:
method TokenInterface.try_get(key: str) -> str - added:
method TokenInterface.ttl() -> float - added:
method TokenResponse.get_token() -> TokenInterface - added:
method TokenResponse.get_ttl_ms() -> float
- added:
async method TokenManager.acquire_token_async(force_refresh=…) -> TokenResponse - added:
async method TokenManager.start_async(listener: CredentialsListener, block_for_initial: bool=…, initial_delay_in_ms: float=…, skip_initial: bool=…) -> Callable[[], None] - added:
class CredentialsListener - added:
class RetryPolicy - added:
class TokenManager - added:
class TokenManagerConfig - added:
constructor CredentialsListener() - added:
constructor RetryPolicy(max_attempts: int, delay_in_ms: float) - added:
constructor TokenManager(identity_provider: IdentityProviderInterface, config: TokenManagerConfig) - added:
constructor TokenManagerConfig(expiration_refresh_ratio: float, lower_refresh_bound_millis: int, token_request_execution_timeout_in_ms: int, retry_policy: RetryPolicy) - added:
method RetryPolicy.get_delay_in_ms() -> float - added:
method RetryPolicy.get_max_attempts() -> int - added:
method TokenManager.acquire_token(force_refresh=…) -> TokenResponse - added:
method TokenManager.start(listener: CredentialsListener, skip_initial: bool=…) -> Callable[[], None] - added:
method TokenManager.stop() - added:
method TokenManagerConfig.get_expiration_refresh_ratio() -> float - added:
method TokenManagerConfig.get_lower_refresh_bound_millis() -> int - added:
method TokenManagerConfig.get_retry_policy() -> RetryPolicy - added:
method TokenManagerConfig.get_token_request_execution_timeout_in_ms() -> int - added:
property CredentialsListener.on_error -> Union[Callable[[Exception], None], Awaitable] - added:
property CredentialsListener.on_next -> Union[Callable[[Any], None], Awaitable] - added:
variable logger
- changed:
constructor ConstantBackoff(backoff) → constructor ConstantBackoff(backoff: float) -> None - changed:
constructor DecorrelatedJitterBackoff(cap=…, base=…) → constructor DecorrelatedJitterBackoff(cap: float=…, base: float=…) -> None - changed:
constructor EqualJitterBackoff(cap=…, base=…) → constructor EqualJitterBackoff(cap: float=…, base: float=…) -> None - changed:
constructor ExponentialBackoff(cap=…, base=…) → constructor ExponentialBackoff(cap: float=…, base: float=…) - changed:
constructor FullJitterBackoff(cap=…, base=…) → constructor FullJitterBackoff(cap: float=…, base: float=…) -> None - changed:
constructor NoBackoff() → constructor NoBackoff() -> None - changed:
method AbstractBackoff.compute(failures) → method AbstractBackoff.compute(failures: int) -> float - changed:
method ConstantBackoff.compute(failures) → method ConstantBackoff.compute(failures: int) -> float - changed:
method DecorrelatedJitterBackoff.compute(failures) → method DecorrelatedJitterBackoff.compute(failures: int) -> float - changed:
method DecorrelatedJitterBackoff.reset() → method DecorrelatedJitterBackoff.reset() -> None - changed:
method EqualJitterBackoff.compute(failures) → method EqualJitterBackoff.compute(failures: int) -> float - changed:
method ExponentialBackoff.compute(failures) → method ExponentialBackoff.compute(failures: int) -> float - changed:
method FullJitterBackoff.compute(failures) → method FullJitterBackoff.compute(failures: int) -> float - added:
class ExponentialWithJitterBackoff(AbstractBackoff) - added:
constructor ExponentialWithJitterBackoff(cap: float=…, base: float=…) -> None - added:
method ExponentialWithJitterBackoff.compute(failures: int) -> float
- added:
class CacheConfig(CacheConfigurationInterface) - added:
class CacheConfigurationInterface(ABC) - added:
class CacheEntry - added:
class CacheEntryStatus(Enum) - added:
class CacheFactory(CacheFactoryInterface) - added:
class CacheFactoryInterface(ABC) - added:
class CacheInterface(ABC) - added:
class CacheKey - added:
class DefaultCache(CacheInterface) - added:
class EvictionPolicy(Enum) - added:
class EvictionPolicyInterface(ABC) - added:
class EvictionPolicyType(Enum) - added:
class LRUPolicy(EvictionPolicyInterface) - added:
constructor CacheConfig(max_size: int=…, cache_class: Any=…, eviction_policy: EvictionPolicy=…) - added:
constructor CacheEntry(cache_key: CacheKey, cache_value: bytes, status: CacheEntryStatus, connection_ref) - added:
constructor CacheFactory(cache_config: Optional[CacheConfig]=…) - added:
constructor DefaultCache(cache_config: CacheConfigurationInterface) -> None - added:
constructor LRUPolicy() - added:
field CacheConfig.DEFAULT_ALLOW_LIST - added:
field CacheConfig.DEFAULT_CACHE_CLASS - added:
field CacheConfig.DEFAULT_EVICTION_POLICY - added:
field CacheConfig.DEFAULT_MAX_SIZE - added:
field CacheEntryStatus.IN_PROGRESS - added:
field CacheEntryStatus.VALID - added:
field CacheKey.command: str - added:
field CacheKey.redis_keys: tuple - added:
field EvictionPolicy.LRU - added:
field EvictionPolicyType.frequency_based - added:
field EvictionPolicyType.time_based - added:
method CacheConfig.get_cache_class() - added:
method CacheConfig.get_eviction_policy() -> EvictionPolicy - added:
method CacheConfig.get_max_size() -> int - added:
method CacheConfig.is_allowed_to_cache(command: str) -> bool - added:
method CacheConfig.is_exceeds_max_size(count: int) -> bool - added:
method CacheConfigurationInterface.get_cache_class() - added:
method CacheConfigurationInterface.get_eviction_policy() - added:
method CacheConfigurationInterface.get_max_size() -> int - added:
method CacheConfigurationInterface.is_allowed_to_cache(command: str) -> bool - added:
method CacheConfigurationInterface.is_exceeds_max_size(count: int) -> bool - added:
method CacheFactory.get_cache() -> CacheInterface - added:
method CacheFactoryInterface.get_cache() -> CacheInterface - added:
method CacheInterface.delete_by_cache_keys(cache_keys: List[CacheKey]) -> List[bool] - added:
method CacheInterface.delete_by_redis_keys(redis_keys: List[bytes]) -> List[bool] - added:
method CacheInterface.flush() -> int - added:
method CacheInterface.get(key: CacheKey) -> Union[CacheEntry, None] - added:
method CacheInterface.is_cachable(key: CacheKey) -> bool - added:
method CacheInterface.set(entry: CacheEntry) -> bool - added:
method DefaultCache.delete_by_cache_keys(cache_keys: List[CacheKey]) -> List[bool] - added:
method DefaultCache.delete_by_redis_keys(redis_keys: List[bytes]) -> List[bool] - added:
method DefaultCache.flush() -> int - added:
method DefaultCache.get(key: CacheKey) -> Union[CacheEntry, None] - added:
method DefaultCache.is_cachable(key: CacheKey) -> bool - added:
method DefaultCache.set(entry: CacheEntry) -> bool - added:
method EvictionPolicyInterface.evict_many(count: int) -> List[CacheKey] - added:
method EvictionPolicyInterface.evict_next() -> CacheKey - added:
method EvictionPolicyInterface.touch(cache_key: CacheKey) -> None - added:
method LRUPolicy.evict_many(count: int) -> List[CacheKey] - added:
method LRUPolicy.evict_next() -> CacheKey - added:
method LRUPolicy.touch(cache_key: CacheKey) -> None - added:
property CacheInterface.collection -> OrderedDict - added:
property CacheInterface.config -> CacheConfigurationInterface - added:
property CacheInterface.eviction_policy -> EvictionPolicyInterface - added:
property CacheInterface.size -> int - added:
property DefaultCache.collection -> OrderedDict - added:
property DefaultCache.config -> CacheConfigurationInterface - added:
property DefaultCache.eviction_policy -> EvictionPolicyInterface - added:
property DefaultCache.size -> int - added:
property EvictionPolicyInterface.cache - added:
property EvictionPolicyInterface.type -> EvictionPolicyType - added:
property LRUPolicy.cache - added:
property LRUPolicy.type -> EvictionPolicyType
- removed:
field AbstractRedis.RESPONSE_CALLBACKS - removed:
function bool_ok(response) - removed:
function float_or_none(response) - removed:
function int_or_none(response) - removed:
function pairs_to_dict(response, decode_keys=…, decode_string_values=…) - removed:
function pairs_to_dict_typed(response, type_info) - removed:
function pairs_to_dict_with_str_keys(response) - removed:
function parse_acl_getuser(response, **options) - removed:
function parse_acl_log(response, **options) - removed:
function parse_client_info(value) - removed:
function parse_client_kill(response, **options) - removed:
function parse_client_list(response, **options) - removed:
function parse_cluster_info(response, **options) - removed:
function parse_cluster_nodes(response, **options) - removed:
function parse_command(response, **options) - removed:
function parse_config_get(response, **options) - removed:
function parse_debug_object(response) - removed:
function parse_geosearch_generic(response, **options) - removed:
function parse_hscan(response, **options) - removed:
function parse_info(response) - removed:
function parse_list_of_dicts(response) - removed:
function parse_memory_stats(response, **kwargs) - removed:
function parse_module_result(response) - removed:
function parse_object(response, infotype) - removed:
function parse_pubsub_numsub(response, **options) - removed:
function parse_scan(response, **options) - removed:
function parse_sentinel_get_master(response) - removed:
function parse_sentinel_master(response) - removed:
function parse_sentinel_masters(response) - removed:
function parse_sentinel_slaves_and_sentinels(response) - removed:
function parse_sentinel_state(item) - removed:
function parse_set_result(response, **options) - removed:
function parse_slowlog_get(response, **options) - removed:
function parse_stralgo(response, **options) - removed:
function parse_stream_list(response) - removed:
function parse_xautoclaim(response, **options) - removed:
function parse_xclaim(response, **options) - removed:
function parse_xinfo_stream(response, **options) - removed:
function parse_xpending(response, **options) - removed:
function parse_xpending_range(response) - removed:
function parse_xread(response) - removed:
function parse_zadd(response, **options) - removed:
function parse_zmscore(response, **options) - removed:
function parse_zscan(response, **options) - removed:
function sort_return_tuples(response, **options) - removed:
function string_keys_to_dict(key_string, callback) - removed:
function timestamp_to_datetime(response) - removed:
function zset_score_pairs(response, **options) - removed:
property PubSub.subscribed - removed:
variable SENTINEL_STATE_TYPES - changed:
class Redis(AbstractRedis, RedisModuleCommands, CoreCommands, SentinelCommands) → class Redis(RedisModuleCommands, CoreCommands, SentinelCommands) - changed:
constructor CaseInsensitiveDict(data) → constructor CaseInsensitiveDict(data: Dict[str, str]) -> None - changed:
constructor PubSub(connection_pool, shard_hint=…, ignore_subscribe_messages=…, encoder=…) → constructor PubSub(connection_pool, shard_hint=…, ignore_subscribe_messages: bool=…, encoder: Optional[Encoder]=…, push_handler_func: Union[None, Callable[[str], None]]=…, event_dispatcher: Optional[EventDispatcher]=…) - changed:
constructor PubSubWorkerThread(pubsub, sleep_time, daemon=…, exception_handler=…) → constructor PubSubWorkerThread(pubsub, sleep_time: float, daemon: bool=…, exception_handler: Union[Callable[[Exception, PubSub, PubSubWorkerThread], None], None]=…) - changed:
constructor Redis(host=…, port=…, db=…, password=…, socket_timeout=…, socket_connect_timeout=…, socket_keepalive=…, socket_keepalive_options=…, connection_pool=…, unix_socket_path=…, encoding=…, encoding_errors=…, charset=…, errors=…, decode_responses=…, retry_on_timeout=…, retry_on_error=…, ssl=…, ssl_keyfile=…, ssl_certfile=…, ssl_cert_reqs=…, ssl_ca_certs=…, ssl_ca_path=…, ssl_ca_data=…, ssl_c… → constructor Redis(host: str=…, port: int=…, db: int=…, password: Optional[str]=…, socket_timeout: Optional[float]=…, socket_connect_timeout: Optional[float]=…, socket_keepalive: Optional[bool]=…, socket_keepalive_options: Optional[Mapping[int, Union[int, bytes]]]=…, connection_pool: Optional[ConnectionPool]=…, unix_socket_path: Optional[str]=…, encoding: str=…, encoding_errors: str=…, charset: Op… - changed:
method Pipeline.execute(raise_on_error=…) → method Pipeline.execute(raise_on_error: bool=…) -> List[Any] - changed:
method Pipeline.multi() → method Pipeline.multi() -> None - changed:
method Pipeline.pipeline_execute_command(*args, **options) → method Pipeline.pipeline_execute_command(*args, **options) -> Pipeline - changed:
method Pipeline.reset() → method Pipeline.reset() -> None - changed:
method Pipeline.unwatch() → method Pipeline.unwatch() -> bool - changed:
method PubSub.check_health() → method PubSub.check_health() -> None - changed:
method PubSub.clean_health_check_responses() → method PubSub.clean_health_check_responses() -> None - changed:
method PubSub.close() → method PubSub.close() -> None - changed:
method PubSub.get_message(ignore_subscribe_messages=…, timeout=…) → method PubSub.get_message(ignore_subscribe_messages: bool=…, timeout: float=…) - changed:
method PubSub.is_health_check_response(response) → method PubSub.is_health_check_response(response) -> bool - changed:
method PubSub.on_connect(connection) → method PubSub.on_connect(connection) -> None - changed:
method PubSub.ping(message=…) → method PubSub.ping(message: Union[str, None]=…) -> bool - changed:
method PubSub.reset() → method PubSub.reset() -> None - changed:
method PubSub.run_in_thread(sleep_time=…, daemon=…, exception_handler=…) → method PubSub.run_in_thread(sleep_time: float=…, daemon: bool=…, exception_handler: Optional[Callable]=…) -> PubSubWorkerThread - changed:
method PubSubWorkerThread.run() → method PubSubWorkerThread.run() -> None - changed:
method PubSubWorkerThread.stop() → method PubSubWorkerThread.stop() -> None - changed:
method Redis.close() → method Redis.close() -> None - changed:
method Redis.get_connection_kwargs() → method Redis.get_connection_kwargs() -> Dict - changed:
method Redis.get_encoder() → method Redis.get_encoder() -> Encoder - changed:
method Redis.load_external_module(funcname, func) → method Redis.load_external_module(funcname, func) -> None - changed:
method Redis.lock(name, timeout=…, sleep=…, blocking=…, blocking_timeout=…, lock_class=…, thread_local=…) → method Redis.lock(name: str, timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, lock_class: Union[None, Any]=…, thread_local: bool=…) - changed:
method Redis.pipeline(transaction=…, shard_hint=…) → method Redis.pipeline(transaction=…, shard_hint=…) -> Pipeline - changed:
method Redis.set_response_callback(command, callback) → method Redis.set_response_callback(command: str, callback: Callable) -> None - changed:
method Redis.transaction(func, *watches, **kwargs) → method Redis.transaction(func: Callable[[Pipeline], None], *watches, **kwargs) -> None - changed:
static method Redis.from_url(url, **kwargs) → static method Redis.from_url(url: str, **kwargs) -> Redis - added:
field PubSub.get_sharded_message - added:
method Pipeline.close() -> None - added:
method PubSub.ssubscribe(*args, target_node=…, **kwargs) - added:
method PubSub.sunsubscribe(*args, target_node=…) - added:
method Redis.get_cache() -> Optional[CacheInterface] - added:
property PubSub.subscribed -> bool - added:
static method Redis.from_pool(connection_pool: ConnectionPool) -> Redis
- changed:
constructor ClusterPipeline(nodes_manager: NodesManager, commands_parser: CommandsParser, result_callbacks: Optional[Dict[str, Callable]]=…, cluster_response_callbacks: Optional[Dict[str, Callable]]=…, startup_nodes: Optional[List[ClusterNode]]=…, read_from_replicas: bool=…, cluster_error_retry_attempts: int=…, reinitialize_steps: int=…, lock=…, **kwargs) → constructor ClusterPipeline(nodes_manager: NodesManager, commands_parser: CommandsParser, result_callbacks: Optional[Dict[str, Callable]]=…, cluster_response_callbacks: Optional[Dict[str, Callable]]=…, startup_nodes: Optional[List[ClusterNode]]=…, read_from_replicas: bool=…, load_balancing_strategy: Optional[LoadBalancingStrategy]=…, cluster_error_retry_attempts: int=…, reinitialize_steps: int=…,… - changed:
constructor ClusterPubSub(redis_cluster, node=…, host=…, port=…, **kwargs) → constructor ClusterPubSub(redis_cluster, node=…, host=…, port=…, push_handler_func=…, event_dispatcher: Optional[EventDispatcher]=…, **kwargs) - changed:
constructor NodesManager(startup_nodes, from_url=…, require_full_coverage=…, lock=…, dynamic_startup_nodes=…, connection_pool_class=…, address_remap: Optional[Callable[[str, int], Tuple[str, int]]]=…, **kwargs) → constructor NodesManager(startup_nodes, from_url=…, require_full_coverage=…, lock=…, dynamic_startup_nodes=…, connection_pool_class=…, address_remap: Optional[Callable[[Tuple[str, int]], Tuple[str, int]]]=…, cache: Optional[CacheInterface]=…, cache_config: Optional[CacheConfig]=…, cache_factory: Optional[CacheFactoryInterface]=…, event_dispatcher: Optional[EventDispatcher]=…, **kwargs) - changed:
constructor RedisCluster(host: Optional[str]=…, port: int=…, startup_nodes: Optional[List[ClusterNode]]=…, cluster_error_retry_attempts: int=…, retry: Optional[Retry]=…, require_full_coverage: bool=…, reinitialize_steps: int=…, read_from_replicas: bool=…, dynamic_startup_nodes: bool=…, url: Optional[str]=…, address_remap: Optional[Callable[[str, int], Tuple[str, int]]]=…, **kwargs) → constructor RedisCluster(host: Optional[str]=…, port: int=…, startup_nodes: Optional[List[ClusterNode]]=…, cluster_error_retry_attempts: int=…, retry: Optional[Retry]=…, require_full_coverage: bool=…, reinitialize_steps: int=…, read_from_replicas: bool=…, load_balancing_strategy: Optional[LoadBalancingStrategy]=…, dynamic_startup_nodes: bool=…, url: Optional[str]=…, address_remap: Optional[Callab… - changed:
method ClusterPipeline.execute(raise_on_error=…) → method ClusterPipeline.execute(raise_on_error: bool=…) -> List[Any] - changed:
method ClusterPubSub.execute_command(*args, **kwargs) → method ClusterPubSub.execute_command(*args) - changed:
method LoadBalancer.get_server_index(primary: str, list_size: int) -> int → method LoadBalancer.get_server_index(primary: str, list_size: int, load_balancing_strategy: LoadBalancingStrategy=…) -> int - changed:
method NodesManager.close() → method NodesManager.close() -> None - changed:
method NodesManager.get_node_from_slot(slot, read_from_replicas=…, server_type=…) → method NodesManager.get_node_from_slot(slot, read_from_replicas=…, load_balancing_strategy=…, server_type=…) - changed:
method RedisCluster.close() → method RedisCluster.close() -> None - added:
class LoadBalancingStrategy(Enum) - added:
field LoadBalancingStrategy.RANDOM_REPLICA - added:
field LoadBalancingStrategy.ROUND_ROBIN - added:
field LoadBalancingStrategy.ROUND_ROBIN_REPLICAS - added:
method ClusterPubSub.disconnect() - added:
method ClusterPubSub.get_sharded_message(ignore_subscribe_messages=…, timeout=…, target_node=…) - added:
method ClusterPubSub.ssubscribe(*args, **kwargs) - added:
method ClusterPubSub.sunsubscribe(*args)
- removed:
export CommandsParser
- changed:
class AbstractBloom(object) → class AbstractBloom - added:
export get_protocol_version
- changed:
class BFInfo(object) → class BFInfo - changed:
class CFInfo(object) → class CFInfo - changed:
class CMSInfo(object) → class CMSInfo - changed:
class TDigestInfo(object) → class TDigestInfo - changed:
class TopKInfo(object) → class TopKInfo - added:
method BFInfo.get(item) - added:
method CFInfo.get(item) - added:
method TDigestInfo.get(item)
- changed:
class AsyncRedisClusterCommands(AsyncClusterMultiKeyCommands, AsyncClusterManagementCommands, AsyncACLCommands, AsyncClusterDataAccessCommands, AsyncScriptCommands, AsyncFunctionCommands) → class AsyncRedisClusterCommands(AsyncClusterMultiKeyCommands, AsyncClusterManagementCommands, AsyncACLCommands, AsyncClusterDataAccessCommands, AsyncScriptCommands, AsyncFunctionCommands, AsyncGearsCommands, AsyncModuleCommands, AsyncRedisModuleCommands) - changed:
class RedisClusterCommands(ClusterMultiKeyCommands, ClusterManagementCommands, ACLCommands, PubSubCommands, ClusterDataAccessCommands, ScriptCommands, FunctionCommands, RedisModuleCommands) → class RedisClusterCommands(ClusterMultiKeyCommands, ClusterManagementCommands, ACLCommands, PubSubCommands, ClusterDataAccessCommands, ScriptCommands, FunctionCommands, GearsCommands, ModuleCommands, RedisModuleCommands) - added:
method ClusterManagementCommands.gears_refresh_cluster(**kwargs) -> ResponseT
- removed:
constructor Script(registered_client: Redis, script: ScriptTextT) - removed:
variable AsyncManagementCommands - removed:
variable ResponseT - changed:
async method AsyncScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Union[int, None]=…) -> AsyncIterator → async method AsyncScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Union[int, None]=…, no_values: Union[bool, None]=…) -> AsyncIterator - changed:
class AsyncCoreCommands(AsyncACLCommands, AsyncClusterCommands, AsyncDataAccessCommands, AsyncManagementCommands, AsyncModuleCommands, AsyncPubSubCommands, AsyncScriptCommands, AsyncFunctionCommands) → class AsyncCoreCommands(AsyncACLCommands, AsyncClusterCommands, AsyncDataAccessCommands, AsyncManagementCommands, AsyncModuleCommands, AsyncPubSubCommands, AsyncScriptCommands, AsyncFunctionCommands, AsyncGearsCommands) - changed:
class CoreCommands(ACLCommands, ClusterCommands, DataAccessCommands, ManagementCommands, ModuleCommands, PubSubCommands, ScriptCommands, FunctionCommands) → class CoreCommands(ACLCommands, ClusterCommands, DataAccessCommands, ManagementCommands, ModuleCommands, PubSubCommands, ScriptCommands, FunctionCommands, GearsCommands) - changed:
constructor AsyncScript(registered_client: AsyncRedis, script: ScriptTextT) → constructor AsyncScript(registered_client: redis.asyncio.client.Redis, script: ScriptTextT) - changed:
constructor BitFieldOperation(client: Union[Redis, AsyncRedis], key: str, default_overflow: Union[str, None]=…) → constructor BitFieldOperation(client: Union[redis.client.Redis, redis.asyncio.client.Redis], key: str, default_overflow: Union[str, None]=…) - changed:
constructor Script(registered_client, script) → constructor Script(registered_client: redis.client.Redis, script: ScriptTextT) - changed:
method HashCommands.hdel(name: str, *keys: List) -> Union[Awaitable[int], int] → method HashCommands.hdel(name: str, *keys: str) -> Union[Awaitable[int], int] - changed:
method ListCommands.rpushx(name: str, value: str) -> Union[Awaitable[int], int] → method ListCommands.rpushx(name: str, *values: str) -> Union[Awaitable[int], int] - changed:
method ManagementCommands.auth(password, username=…, **kwargs) → method ManagementCommands.auth(password: str, username: Optional[str]=…, **kwargs) - changed:
method ManagementCommands.client_kill_filter(_id: Union[str, None]=…, _type: Union[str, None]=…, addr: Union[str, None]=…, skipme: Union[bool, None]=…, laddr: Union[bool, None]=…, user: str=…, **kwargs) -> ResponseT → method ManagementCommands.client_kill_filter(_id: Union[str, None]=…, _type: Union[str, None]=…, addr: Union[str, None]=…, skipme: Union[bool, None]=…, laddr: Union[bool, None]=…, user: str=…, maxage: Union[int, None]=…, **kwargs) -> ResponseT - changed:
method ScanCommands.hscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Union[int, None]=…) -> ResponseT → method ScanCommands.hscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Union[int, None]=…, no_values: Union[bool, None]=…) -> ResponseT - changed:
method ScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Union[int, None]=…) -> Iterator → method ScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Union[int, None]=…, no_values: Union[bool, None]=…) -> Iterator - changed:
method ScriptCommands.eval(script: str, numkeys: int, *keys_and_args: list) -> Union[Awaitable[str], str] → method ScriptCommands.eval(script: str, numkeys: int, *keys_and_args: str) -> Union[Awaitable[str], str] - changed:
method ScriptCommands.eval_ro(script: str, numkeys: int, *keys_and_args: list) -> Union[Awaitable[str], str] → method ScriptCommands.eval_ro(script: str, numkeys: int, *keys_and_args: str) -> Union[Awaitable[str], str] - changed:
method ScriptCommands.evalsha(sha: str, numkeys: int, *keys_and_args: list) -> Union[Awaitable[str], str] → method ScriptCommands.evalsha(sha: str, numkeys: int, *keys_and_args: str) -> Union[Awaitable[str], str] - changed:
method ScriptCommands.evalsha_ro(sha: str, numkeys: int, *keys_and_args: list) -> Union[Awaitable[str], str] → method ScriptCommands.evalsha_ro(sha: str, numkeys: int, *keys_and_args: str) -> Union[Awaitable[str], str] - changed:
method SetCommands.sismember(name: str, value: str) -> Union[Awaitable[bool], bool] → method SetCommands.sismember(name: str, value: str) -> Union[Awaitable[Union[Literal[0], Literal[1]]], Union[Literal[0], Literal[1]]] - added:
class GearsCommands - added:
method GearsCommands.tfcall(lib_name: str, func_name: str, keys: KeysT=…, *args: List) -> ResponseT - added:
method GearsCommands.tfcall_async(lib_name: str, func_name: str, keys: KeysT=…, *args: List) -> ResponseT - added:
method GearsCommands.tfunction_delete(lib_name: str) -> ResponseT - added:
method GearsCommands.tfunction_list(with_code: bool=…, verbose: int=…, lib_name: Union[str, None]=…) -> ResponseT - added:
method GearsCommands.tfunction_load(lib_code: str, replace: bool=…, config: Union[str, None]=…) -> ResponseT - added:
method HashCommands.hexpire(name: KeyT, seconds: ExpiryT, *fields: str, nx: bool=…, xx: bool=…, gt: bool=…, lt: bool=…) -> ResponseT - added:
method HashCommands.hexpireat(name: KeyT, unix_time_seconds: AbsExpiryT, *fields: str, nx: bool=…, xx: bool=…, gt: bool=…, lt: bool=…) -> ResponseT - added:
method HashCommands.hexpiretime(key: KeyT, *fields: str) -> ResponseT - added:
method HashCommands.hpersist(name: KeyT, *fields: str) -> ResponseT - added:
method HashCommands.hpexpire(name: KeyT, milliseconds: ExpiryT, *fields: str, nx: bool=…, xx: bool=…, gt: bool=…, lt: bool=…) -> ResponseT - added:
method HashCommands.hpexpireat(name: KeyT, unix_time_milliseconds: AbsExpiryT, *fields: str, nx: bool=…, xx: bool=…, gt: bool=…, lt: bool=…) -> ResponseT - added:
method HashCommands.hpexpiretime(key: KeyT, *fields: str) -> ResponseT - added:
method HashCommands.hpttl(key: KeyT, *fields: str) -> ResponseT - added:
method HashCommands.httl(key: KeyT, *fields: str) -> ResponseT - added:
method ManagementCommands.client_setinfo(attr: str, value: str, **kwargs) -> ResponseT - added:
method PubSubCommands.pubsub_shardchannels(pattern: PatternT=…, **kwargs) -> ResponseT - added:
method PubSubCommands.pubsub_shardnumsub(*args: ChannelT, **kwargs) -> ResponseT - added:
method PubSubCommands.spublish(shard_channel: ChannelT, message: EncodableT) -> ResponseT - added:
variable AsyncGearsCommands
- added:
function strtobool(val)
- added:
function get_protocol_version(client)
- added:
export get_protocol_version
- changed:
method JSONCommands.get(name: str, *args, no_escape: Optional[bool]=…) -> List[JsonType] → method JSONCommands.get(name: str, *args, no_escape: Optional[bool]=…) -> Optional[List[JsonType]] - changed:
method JSONCommands.objlen(name: str, path: Optional[str]=…) -> int → method JSONCommands.objlen(name: str, path: Optional[str]=…) -> List[Optional[int]] - changed:
method JSONCommands.set_path(json_path: str, root_folder: str, nx: Optional[bool]=…, xx: Optional[bool]=…, decode_keys: Optional[bool]=…) -> List[Dict[str, bool]] → method JSONCommands.set_path(json_path: str, root_folder: str, nx: Optional[bool]=…, xx: Optional[bool]=…, decode_keys: Optional[bool]=…) -> Dict[str, bool] - changed:
method JSONCommands.strappend(name: str, value: str, path: Optional[int]=…) -> Union[int, List[Optional[int]]] → method JSONCommands.strappend(name: str, value: str, path: Optional[str]=…) -> Union[int, List[Optional[int]]]
- removed:
class CommandsParser - removed:
constructor CommandsParser(redis_connection) - removed:
method CommandsParser.get_keys(redis_conn, *args) - removed:
method CommandsParser.initialize(r) - removed:
method CommandsParser.parse_subcommand(command, **options)
- added:
export AGGREGATE_CMD - added:
export CONFIG_CMD - added:
export INFO_CMD - added:
export PROFILE_CMD - added:
export SEARCH_CMD - added:
export SPELLCHECK_CMD - added:
export SYNDUMP_CMD
- removed:
property Reducer.args - changed:
constructor AggregateRequest(query=…) → constructor AggregateRequest(query: str=…) -> None - changed:
constructor AggregateResult(rows, cursor, schema) → constructor AggregateResult(rows, cursor: Cursor, schema) -> None - changed:
constructor Cursor(cid) → constructor Cursor(cid: int) -> None - changed:
constructor Limit(offset=…, count=…) → constructor Limit(offset: int=…, count: int=…) -> None - changed:
constructor Reducer(*args) → constructor Reducer(*args: List[str]) -> None - changed:
constructor SortDirection(field) → constructor SortDirection(field: str) -> None - changed:
method AggregateRequest.apply(**kwexpr) → method AggregateRequest.apply(**kwexpr) -> AggregateRequest - changed:
method AggregateRequest.build_args() → method AggregateRequest.build_args() -> List[str] - changed:
method AggregateRequest.cursor(count=…, max_idle=…) → method AggregateRequest.cursor(count: int=…, max_idle: float=…) -> AggregateRequest - changed:
method AggregateRequest.dialect(dialect) → method AggregateRequest.dialect(dialect: int) -> AggregateRequest - changed:
method AggregateRequest.filter(expressions) → method AggregateRequest.filter(expressions: Union[str, List[str]]) -> AggregateRequest - changed:
method AggregateRequest.group_by(fields, *reducers) → method AggregateRequest.group_by(fields: List[str], *reducers: Union[Reducer, List[Reducer]]) -> AggregateRequest - changed:
method AggregateRequest.limit(offset, num) → method AggregateRequest.limit(offset: int, num: int) -> AggregateRequest - changed:
method AggregateRequest.load(*fields) → method AggregateRequest.load(*fields: List[str]) -> AggregateRequest - changed:
method AggregateRequest.sort_by(*fields, **kwargs) → method AggregateRequest.sort_by(*fields: List[str], **kwargs) -> AggregateRequest - changed:
method AggregateRequest.verbatim() → method AggregateRequest.verbatim() -> AggregateRequest - changed:
method AggregateRequest.with_schema() → method AggregateRequest.with_schema() -> AggregateRequest - changed:
method Reducer.alias(alias) → method Reducer.alias(alias: str) -> Reducer - added:
method AggregateRequest.add_scores() -> AggregateRequest - added:
method AggregateRequest.scorer(scorer: str) -> AggregateRequest - added:
property Reducer.args -> List[str]
- changed:
async method AsyncSearchCommands.config_get(option) → async method AsyncSearchCommands.config_get(option: str) -> str - changed:
async method AsyncSearchCommands.config_set(option, value) → async method AsyncSearchCommands.config_set(option: str, value: str) -> bool - changed:
async method AsyncSearchCommands.sugget(key, prefix, fuzzy=…, num=…, with_scores=…, with_payloads=…) → async method AsyncSearchCommands.sugget(key: str, prefix: str, fuzzy: bool=…, num: int=…, with_scores: bool=…, with_payloads: bool=…) -> List[SuggestionParser] - changed:
method SearchCommands.add_document(doc_id, nosave=…, score=…, payload=…, replace=…, partial=…, language=…, no_create=…, **fields) → method SearchCommands.add_document(doc_id: str, nosave: bool=…, score: float=…, payload: bool=…, replace: bool=…, partial: bool=…, language: Optional[str]=…, no_create: str=…, **fields: List[str]) - changed:
method SearchCommands.aliasadd(alias) → method SearchCommands.aliasadd(alias: str) - changed:
method SearchCommands.aliasdel(alias) → method SearchCommands.aliasdel(alias: str) - changed:
method SearchCommands.aliasupdate(alias) → method SearchCommands.aliasupdate(alias: str) - changed:
method SearchCommands.alter_schema_add(fields) → method SearchCommands.alter_schema_add(fields: List[str]) - changed:
method SearchCommands.config_get(option) → method SearchCommands.config_get(option: str) -> str - changed:
method SearchCommands.config_set(option, value) → method SearchCommands.config_set(option: str, value: str) -> bool - changed:
method SearchCommands.create_index(fields, no_term_offsets=…, no_field_flags=…, stopwords=…, definition=…, max_text_fields=…, temporary=…, no_highlight=…, no_term_frequencies=…, skip_initial_scan=…) → method SearchCommands.create_index(fields: List[Field], no_term_offsets: bool=…, no_field_flags: bool=…, stopwords: Optional[List[str]]=…, definition: Optional[IndexDefinition]=…, max_text_fields=…, temporary=…, no_highlight: bool=…, no_term_frequencies: bool=…, skip_initial_scan: bool=…) - changed:
method SearchCommands.dict_add(name, *terms) → method SearchCommands.dict_add(name: str, *terms: List[str]) - changed:
method SearchCommands.dict_del(name, *terms) → method SearchCommands.dict_del(name: str, *terms: List[str]) - changed:
method SearchCommands.dict_dump(name) → method SearchCommands.dict_dump(name: str) - changed:
method SearchCommands.dropindex(delete_documents=…) → method SearchCommands.dropindex(delete_documents: bool=…) - changed:
method SearchCommands.get_params_args(query_params: Union[Dict[str, Union[str, int, float]], None]) → method SearchCommands.get_params_args(query_params: Union[Dict[str, Union[str, int, float, bytes]], None]) - changed:
method SearchCommands.search(query: Union[str, Query], query_params: Dict[str, Union[str, int, float]]=…) → method SearchCommands.search(query: Union[str, Query], query_params: Union[Dict[str, Union[str, int, float, bytes]], None]=…) - changed:
method SearchCommands.sugdel(key, string) → method SearchCommands.sugdel(key: str, string: str) -> int - changed:
method SearchCommands.sugget(key, prefix, fuzzy=…, num=…, with_scores=…, with_payloads=…) → method SearchCommands.sugget(key: str, prefix: str, fuzzy: bool=…, num: int=…, with_scores: bool=…, with_payloads: bool=…) -> List[SuggestionParser] - changed:
method SearchCommands.suglen(key) → method SearchCommands.suglen(key: str) -> int - changed:
method SearchCommands.synupdate(groupid, skipinitial=…, *terms) → method SearchCommands.synupdate(groupid: str, skipinitial: bool=…, *terms: List[str]) - changed:
method SearchCommands.tagvals(tagfield) → method SearchCommands.tagvals(tagfield: str)
- changed:
constructor Field(name: str, args: List[str]=…, sortable: bool=…, no_index: bool=…, as_name: str=…) → constructor Field(name: str, args: List[str]=…, sortable: bool=…, no_index: bool=…, index_missing: bool=…, index_empty: bool=…, as_name: str=…) - added:
class GeoShapeField(Field) - added:
constructor GeoShapeField(name: str, coord_system=…, **kwargs) - added:
field Field.GEOSHAPE - added:
field Field.INDEX_EMPTY - added:
field Field.INDEX_MISSING - added:
field GeoShapeField.FLAT - added:
field GeoShapeField.SPHERICAL
- changed:
constructor Filter(keyword, field, *args) → constructor Filter(keyword: str, field: str, *args: List[str]) -> None - changed:
constructor GeoFilter(field, lon, lat, radius, unit=…) → constructor GeoFilter(field: str, lon: float, lat: float, radius: float, unit: str=…) -> None - changed:
constructor NumericFilter(field, minval, maxval, minExclusive=…, maxExclusive=…) → constructor NumericFilter(field: str, minval: Union[int, str], maxval: Union[int, str], minExclusive: bool=…, maxExclusive: bool=…) -> None - changed:
constructor Query(query_string) → constructor Query(query_string: str) -> None - changed:
constructor SortbyField(field, asc=…) → constructor SortbyField(field: str, asc=…) -> None - changed:
method Query.add_filter(flt) → method Query.add_filter(flt: Filter) -> Query - changed:
method Query.expander(expander) → method Query.expander(expander: str) -> Query - changed:
method Query.get_args() → method Query.get_args() -> List[str] - changed:
method Query.highlight(fields=…, tags=…) → method Query.highlight(fields: Optional[List[str]]=…, tags: Optional[List[str]]=…) -> None - changed:
method Query.in_order() → method Query.in_order() -> Query - changed:
method Query.language(language) → method Query.language(language: str) -> Query - changed:
method Query.limit_fields(*fields) → method Query.limit_fields(*fields: List[str]) -> Query - changed:
method Query.limit_ids(*ids) → method Query.limit_ids(*ids) -> Query - changed:
method Query.no_content() → method Query.no_content() -> Query - changed:
method Query.no_stopwords() → method Query.no_stopwords() -> Query - changed:
method Query.paging(offset, num) → method Query.paging(offset: int, num: int) -> Query - changed:
method Query.query_string() → method Query.query_string() -> str - changed:
method Query.return_field(field, as_field=…) → method Query.return_field(field: str, as_field: Optional[str]=…, decode_field: Optional[bool]=…, encoding: Optional[str]=…) -> Query - changed:
method Query.return_fields(*fields) → method Query.return_fields(*fields) -> Query - changed:
method Query.scorer(scorer) → method Query.scorer(scorer: str) -> Query - changed:
method Query.slop(slop) → method Query.slop(slop: int) -> Query - changed:
method Query.sort_by(field, asc=…) → method Query.sort_by(field: str, asc: bool=…) -> Query - changed:
method Query.summarize(fields=…, context_len=…, num_frags=…, sep=…) → method Query.summarize(fields: Optional[List]=…, context_len: Optional[int]=…, num_frags: Optional[int]=…, sep: Optional[str]=…) -> Query - changed:
method Query.timeout(timeout) → method Query.timeout(timeout: float) -> Query - changed:
method Query.verbatim() → method Query.verbatim() -> Query - changed:
method Query.with_payloads() → method Query.with_payloads() -> Query - changed:
method Query.with_scores() → method Query.with_scores() -> Query
- changed:
constructor FieldOnlyReducer(field) → constructor FieldOnlyReducer(field: str) -> None - changed:
constructor avg(field) → constructor avg(field: str) -> None - changed:
constructor count() → constructor count() -> None - changed:
constructor count_distinct(field) → constructor count_distinct(field: str) -> None - changed:
constructor first_value(field, *byfields) → constructor first_value(field: str, *byfields: Union[Asc, Desc]) -> None - changed:
constructor max(field) → constructor max(field: str) -> None - changed:
constructor min(field) → constructor min(field: str) -> None - changed:
constructor quantile(field, pct) → constructor quantile(field: str, pct: float) -> None - changed:
constructor random_sample(field, size) → constructor random_sample(field: str, size: int) -> None - changed:
constructor stddev(field) → constructor stddev(field: str) -> None - changed:
constructor sum(field) → constructor sum(field: str) -> None - changed:
constructor tolist(field) → constructor tolist(field: str) -> None
- changed:
constructor Result(res, hascontent, duration=…, has_payload=…, with_scores=…) → constructor Result(res, hascontent, duration=…, has_payload=…, with_scores=…, field_encodings: Optional[dict]=…)
- changed:
constructor Suggestion(string, score=…, payload=…) → constructor Suggestion(string: str, score: float=…, payload: Optional[str]=…) -> None - changed:
constructor SuggestionParser(with_scores, with_payloads, ret) → constructor SuggestionParser(with_scores: bool, with_payloads: bool, ret) -> None
- added:
export bool_ok - added:
export get_protocol_version
- changed:
method TimeSeriesCommands.add(key: KeyT, timestamp: Union[int, str], value: Number, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…) → method TimeSeriesCommands.add(key: KeyT, timestamp: Union[int, str], value: Number, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…, ignore_max_time_diff: Optional[int]=…, ignore_max_val_diff: Optional[Number]=…, on_duplicate: Optional[str]=…) - changed:
method TimeSeriesCommands.alter(key: KeyT, retention_msecs: Optional[int]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…) → method TimeSeriesCommands.alter(key: KeyT, retention_msecs: Optional[int]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…, ignore_max_time_diff: Optional[int]=…, ignore_max_val_diff: Optional[Number]=…) - changed:
method TimeSeriesCommands.create(key: KeyT, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…) → method TimeSeriesCommands.create(key: KeyT, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…, ignore_max_time_diff: Optional[int]=…, ignore_max_val_diff: Optional[Number]=…) - changed:
method TimeSeriesCommands.decrby(key: KeyT, value: Number, timestamp: Optional[Union[int, str]]=…, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…) → method TimeSeriesCommands.decrby(key: KeyT, value: Number, timestamp: Optional[Union[int, str]]=…, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…, ignore_max_time_diff: Optional[int]=…, ignore_max_val_diff: Optional[Number]=…) - changed:
method TimeSeriesCommands.incrby(key: KeyT, value: Number, timestamp: Optional[Union[int, str]]=…, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…) → method TimeSeriesCommands.incrby(key: KeyT, value: Number, timestamp: Optional[Union[int, str]]=…, retention_msecs: Optional[int]=…, uncompressed: Optional[bool]=…, labels: Optional[Dict[str, str]]=…, chunk_size: Optional[int]=…, duplicate_policy: Optional[str]=…, ignore_max_time_diff: Optional[int]=…, ignore_max_val_diff: Optional[Number]=…)
- added:
method TSInfo.get(item)
- changed:
function parse_range(response) → function parse_range(response, **kwargs)
- removed:
class BaseParser - removed:
class Encoder - removed:
class HiredisParser(BaseParser) - removed:
class PythonParser(BaseParser) - removed:
class SocketBuffer - removed:
constructor Encoder(encoding, encoding_errors, decode_responses) - removed:
constructor HiredisParser(socket_read_size) - removed:
constructor PythonParser(socket_read_size) - removed:
constructor SocketBuffer(socket: socket.socket, socket_read_size: int, socket_timeout: float) - removed:
field BaseParser.EXCEPTION_CLASSES - removed:
method AbstractConnection.clear_connect_callbacks() - removed:
method Encoder.decode(value, force=…) - removed:
method Encoder.encode(value) - removed:
method HiredisParser.can_read(timeout) - removed:
method HiredisParser.on_connect(connection, **kwargs) - removed:
method HiredisParser.on_disconnect() - removed:
method HiredisParser.read_from_socket(timeout=…, raise_on_timeout=…) - removed:
method HiredisParser.read_response(disable_decoding=…) - removed:
method PythonParser.can_read(timeout) - removed:
method PythonParser.on_connect(connection) - removed:
method PythonParser.on_disconnect() - removed:
method PythonParser.read_response(disable_decoding=…) - removed:
method SocketBuffer.can_read(timeout: float) -> bool - removed:
method SocketBuffer.close() -> None - removed:
method SocketBuffer.get_pos() -> int - removed:
method SocketBuffer.purge() -> None - removed:
method SocketBuffer.read(length: int) -> bytes - removed:
method SocketBuffer.readline() -> bytes - removed:
method SocketBuffer.rewind(pos: int) -> None - removed:
method SocketBuffer.unread_bytes() -> int - removed:
static method BaseParser.parse_error(response) - removed:
variable MODULE_EXPORTS_DATA_TYPES_ERROR - removed:
variable MODULE_LOAD_ERROR - removed:
variable MODULE_UNLOAD_NOT_POSSIBLE_ERROR - removed:
variable NONBLOCKING_EXCEPTIONS - removed:
variable NONBLOCKING_EXCEPTION_ERROR_NUMBERS - removed:
variable NO_AUTH_SET_ERROR - removed:
variable NO_SUCH_MODULE_ERROR - removed:
variable SERVER_CLOSED_CONNECTION_ERROR - removed:
variable ssl_available - changed:
class AbstractConnection → class AbstractConnection(ConnectionInterface) - changed:
constructor AbstractConnection(db=…, password=…, socket_timeout=…, socket_connect_timeout=…, retry_on_timeout=…, retry_on_error=…, encoding=…, encoding_errors=…, decode_responses=…, parser_class=…, socket_read_size=…, health_check_interval=…, client_name=…, username=…, retry=…, redis_connect_func=…, credential_provider: Optional[CredentialProvider]=…, command_packer=…) → constructor AbstractConnection(db: int=…, password: Optional[str]=…, socket_timeout: Optional[float]=…, socket_connect_timeout: Optional[float]=…, retry_on_timeout: bool=…, retry_on_error=…, encoding: str=…, encoding_errors: str=…, decode_responses: bool=…, parser_class=…, socket_read_size: int=…, health_check_interval: int=…, client_name: Optional[str]=…, lib_name: Optional[str]=…, lib_version:… - changed:
constructor ConnectionPool(connection_class=…, max_connections=…, **connection_kwargs) → constructor ConnectionPool(connection_class=…, max_connections: Optional[int]=…, cache_factory: Optional[CacheFactoryInterface]=…, **connection_kwargs) - changed:
constructor SSLConnection(ssl_keyfile=…, ssl_certfile=…, ssl_cert_reqs=…, ssl_ca_certs=…, ssl_ca_data=…, ssl_check_hostname=…, ssl_ca_path=…, ssl_password=…, ssl_validate_ocsp=…, ssl_validate_ocsp_stapled=…, ssl_ocsp_context=…, ssl_ocsp_expected_cert=…, **kwargs) → constructor SSLConnection(ssl_keyfile=…, ssl_certfile=…, ssl_cert_reqs=…, ssl_ca_certs=…, ssl_ca_data=…, ssl_check_hostname=…, ssl_ca_path=…, ssl_password=…, ssl_validate_ocsp=…, ssl_validate_ocsp_stapled=…, ssl_ocsp_context=…, ssl_ocsp_expected_cert=…, ssl_min_version=…, ssl_ciphers=…, **kwargs) - changed:
constructor UnixDomainSocketConnection(path=…, **kwargs) → constructor UnixDomainSocketConnection(path=…, socket_timeout=…, **kwargs) - changed:
method AbstractConnection.read_response(disable_decoding=…, *, disconnect_on_error: bool=…) → method AbstractConnection.read_response(disable_decoding=…, *, disconnect_on_error=…, push_request=…) - changed:
method BlockingConnectionPool.get_connection(command_name, *keys, **options) → method BlockingConnectionPool.get_connection(command_name=…, *keys, **options) - changed:
method ConnectionPool.disconnect(inuse_connections=…) → method ConnectionPool.disconnect(inuse_connections: bool=…) -> None - changed:
method ConnectionPool.get_connection(command_name, *keys, **options) → method ConnectionPool.get_connection(command_name=…, *keys, **options) -> Connection - changed:
method ConnectionPool.get_encoder() → method ConnectionPool.get_encoder() -> Encoder - changed:
method ConnectionPool.make_connection() → method ConnectionPool.make_connection() -> ConnectionInterface - changed:
method ConnectionPool.owns_connection(connection) → method ConnectionPool.owns_connection(connection: Connection) -> int - changed:
method ConnectionPool.release(connection) → method ConnectionPool.release(connection: Connection) -> None - changed:
method ConnectionPool.reset() → method ConnectionPool.reset() -> None - changed:
method HiredisRespSerializer.pack(*args) → method HiredisRespSerializer.pack(*args: List) - changed:
static method ConnectionPool.from_url(url, **kwargs) → static method ConnectionPool.from_url(url: str, **kwargs) -> _CP - changed:
variable DefaultParser: BaseParser → variable DefaultParser: Type[Union[_RESP2Parser, _RESP3Parser, _HiredisParser]] - added:
class CacheProxyConnection(ConnectionInterface) - added:
class ConnectionInterface - added:
constructor CacheProxyConnection(conn: ConnectionInterface, cache: CacheInterface, pool_lock: threading.Lock) - added:
field CacheProxyConnection.DEFAULT_SERVER_NAME - added:
field CacheProxyConnection.DUMMY_CACHE_VALUE - added:
field CacheProxyConnection.MIN_ALLOWED_VERSION - added:
method AbstractConnection.deregister_connect_callback(callback) - added:
method AbstractConnection.get_protocol() -> int or str - added:
method AbstractConnection.re_auth() - added:
method AbstractConnection.set_re_auth_token(token: TokenInterface) - added:
method CacheProxyConnection.can_read(timeout=…) - added:
method CacheProxyConnection.check_health() - added:
method CacheProxyConnection.connect() - added:
method CacheProxyConnection.deregister_connect_callback(callback) - added:
method CacheProxyConnection.disconnect(*args) - added:
method CacheProxyConnection.get_protocol() - added:
method CacheProxyConnection.on_connect() - added:
method CacheProxyConnection.pack_command(*args) - added:
method CacheProxyConnection.pack_commands(commands) - added:
method CacheProxyConnection.re_auth() - added:
method CacheProxyConnection.read_response(disable_decoding=…, *, disconnect_on_error=…, push_request=…) - added:
method CacheProxyConnection.register_connect_callback(callback) - added:
method CacheProxyConnection.repr_pieces() - added:
method CacheProxyConnection.send_command(*args, **kwargs) - added:
method CacheProxyConnection.send_packed_command(command, check_health=…) - added:
method CacheProxyConnection.set_parser(parser_class) - added:
method CacheProxyConnection.set_re_auth_token(token: TokenInterface) - added:
method ConnectionInterface.can_read(timeout=…) - added:
method ConnectionInterface.check_health() - added:
method ConnectionInterface.connect() - added:
method ConnectionInterface.deregister_connect_callback(callback) - added:
method ConnectionInterface.disconnect(*args) - added:
method ConnectionInterface.get_protocol() - added:
method ConnectionInterface.on_connect() - added:
method ConnectionInterface.pack_command(*args) - added:
method ConnectionInterface.pack_commands(commands) - added:
method ConnectionInterface.re_auth() - added:
method ConnectionInterface.read_response(disable_decoding=…, *, disconnect_on_error=…, push_request=…) - added:
method ConnectionInterface.register_connect_callback(callback) - added:
method ConnectionInterface.repr_pieces() - added:
method ConnectionInterface.send_command(*args, **kwargs) - added:
method ConnectionInterface.send_packed_command(command, check_health=…) - added:
method ConnectionInterface.set_parser(parser_class) - added:
method ConnectionInterface.set_re_auth_token(token: TokenInterface) - added:
method ConnectionPool.close() -> None - added:
method ConnectionPool.get_protocol() - added:
method ConnectionPool.re_auth_callback(token: TokenInterface) - added:
property AbstractConnection.handshake_metadata -> Union[Dict[bytes, bytes], Dict[str, str]] - added:
property CacheProxyConnection.handshake_metadata -> Union[Dict[bytes, bytes], Dict[str, str]] - added:
property ConnectionInterface.handshake_metadata -> Union[Dict[bytes, bytes], Dict[str, str]] - added:
variable DEFAULT_RESP_VERSION
- added:
async method CredentialProvider.get_credentials_async() -> Union[Tuple[str], Tuple[str, str]] - added:
async method UsernamePasswordCredentialProvider.get_credentials_async() -> Union[Tuple[str], Tuple[str, str]] - added:
class StreamingCredentialProvider(CredentialProvider, ABC) - added:
method StreamingCredentialProvider.is_streaming() -> bool - added:
method StreamingCredentialProvider.on_error(callback: Callable[[Exception], None]) - added:
method StreamingCredentialProvider.on_next(callback: Callable[[Any], None]) - added:
variable logger
- added:
async method AsyncEventListenerInterface.listen(event: object) - added:
async method AsyncReAuthConnectionListener.listen(event: AsyncAfterConnectionReleasedEvent) - added:
async method EventDispatcher.dispatch_async(event: object) - added:
async method EventDispatcherInterface.dispatch_async(event: object) - added:
class AfterAsyncClusterInstantiationEvent - added:
class AfterConnectionReleasedEvent - added:
class AfterPooledConnectionsInstantiationEvent - added:
class AfterPubSubConnectionInstantiationEvent - added:
class AfterSingleConnectionInstantiationEvent - added:
class AsyncAfterConnectionReleasedEvent(AfterConnectionReleasedEvent) - added:
class AsyncEventListenerInterface(ABC) - added:
class AsyncReAuthConnectionListener(AsyncEventListenerInterface) - added:
class ClientType(Enum) - added:
class EventDispatcher(EventDispatcherInterface) - added:
class EventDispatcherInterface(ABC) - added:
class EventException(Exception) - added:
class EventListenerInterface(ABC) - added:
class ReAuthConnectionListener(EventListenerInterface) - added:
class RegisterReAuthForAsyncClusterNodes(EventListenerInterface) - added:
class RegisterReAuthForPooledConnections(EventListenerInterface) - added:
class RegisterReAuthForPubSub(EventListenerInterface) - added:
class RegisterReAuthForSingleConnection(EventListenerInterface) - added:
constructor AfterAsyncClusterInstantiationEvent(nodes: dict, credential_provider: Optional[CredentialProvider]=…) - added:
constructor AfterConnectionReleasedEvent(connection) - added:
constructor AfterPooledConnectionsInstantiationEvent(connection_pools: List, client_type: ClientType, credential_provider: Optional[CredentialProvider]=…) - added:
constructor AfterPubSubConnectionInstantiationEvent(pubsub_connection, connection_pool, client_type: ClientType, connection_lock: Union[threading.Lock, asyncio.Lock]) - added:
constructor AfterSingleConnectionInstantiationEvent(connection, client_type: ClientType, connection_lock: Union[threading.Lock, asyncio.Lock]) - added:
constructor EventDispatcher() - added:
constructor EventException(exception: Exception, event: object) - added:
constructor RegisterReAuthForAsyncClusterNodes() - added:
constructor RegisterReAuthForPooledConnections() - added:
constructor RegisterReAuthForPubSub() - added:
constructor RegisterReAuthForSingleConnection() - added:
field ClientType.ASYNC - added:
field ClientType.SYNC - added:
method EventDispatcher.dispatch(event: object) - added:
method EventDispatcherInterface.dispatch(event: object) - added:
method EventListenerInterface.listen(event: object) - added:
method ReAuthConnectionListener.listen(event: AfterConnectionReleasedEvent) - added:
method RegisterReAuthForAsyncClusterNodes.listen(event: AfterAsyncClusterInstantiationEvent) - added:
method RegisterReAuthForPooledConnections.listen(event: AfterPooledConnectionsInstantiationEvent) - added:
method RegisterReAuthForPubSub.listen(event: AfterPubSubConnectionInstantiationEvent) - added:
method RegisterReAuthForSingleConnection.listen(event: AfterSingleConnectionInstantiationEvent) - added:
property AfterAsyncClusterInstantiationEvent.credential_provider -> Union[CredentialProvider, None] - added:
property AfterAsyncClusterInstantiationEvent.nodes -> dict - added:
property AfterConnectionReleasedEvent.connection - added:
property AfterPooledConnectionsInstantiationEvent.client_type -> ClientType - added:
property AfterPooledConnectionsInstantiationEvent.connection_pools - added:
property AfterPooledConnectionsInstantiationEvent.credential_provider -> Union[CredentialProvider, None] - added:
property AfterPubSubConnectionInstantiationEvent.client_type -> ClientType - added:
property AfterPubSubConnectionInstantiationEvent.connection_lock -> Union[threading.Lock, asyncio.Lock] - added:
property AfterPubSubConnectionInstantiationEvent.connection_pool - added:
property AfterPubSubConnectionInstantiationEvent.pubsub_connection - added:
property AfterSingleConnectionInstantiationEvent.client_type -> ClientType - added:
property AfterSingleConnectionInstantiationEvent.connection - added:
property AfterSingleConnectionInstantiationEvent.connection_lock -> Union[threading.Lock, asyncio.Lock]
- added:
constructor LockError(message=…, lock_name=…)
- changed:
constructor Retry(backoff, retries, supported_errors=…) → constructor Retry(backoff: AbstractBackoff, retries: int, supported_errors: Tuple[Type[Exception], ...]=…) - changed:
method Retry.call_with_retry(do, fail) → method Retry.call_with_retry(do: Callable[[], T], fail: Callable[[Exception], Any]) -> T - changed:
method Retry.update_supported_errors(specified_errors: list) → method Retry.update_supported_errors(specified_errors: Iterable[Type[Exception]]) -> None - added:
variable T
- changed:
constructor Sentinel(sentinels, min_other_sentinels=…, sentinel_kwargs=…, **connection_kwargs) → constructor Sentinel(sentinels, min_other_sentinels=…, sentinel_kwargs=…, force_master_ip=…, **connection_kwargs) - changed:
method SentinelManagedConnection.read_response(disable_decoding=…, *, disconnect_on_error: Optional[bool]=…) → method SentinelManagedConnection.read_response(disable_decoding=…, *, disconnect_on_error: Optional[bool]=…, push_request: Optional[bool]=…)
- removed:
method ClusterCommandsProtocol.execute_command(*args, **options) -> Union[Any, Awaitable] - changed:
class ClusterCommandsProtocol(CommandsProtocol, Protocol) → class ClusterCommandsProtocol(CommandsProtocol) - changed:
field ClusterCommandsProtocol.encoder: Union[AsyncEncoder, Encoder] → field ClusterCommandsProtocol.encoder: Encoder - changed:
method CommandsProtocol.execute_command(*args, **options) → method CommandsProtocol.execute_command(*args, **options) -> ResponseT - added:
variable ExceptionMappingT - added:
variable ResponseT
- removed:
variable HIREDIS_PACK_AVAILABLE - added:
function compare_versions(version1: str, version2: str) -> int - added:
function deprecated_args(args_to_warn: list=…, allowed_args: list=…, reason: str=…, version: str=…) - added:
function ensure_string(key) - added:
function format_error_message(host_error: str, exception: BaseException) -> str - added:
function get_lib_version() - added:
function warn_deprecated_arg_usage(arg_name: Union[list, str], function_name: str, reason: str=…, version: str=…, stacklevel: int=…) - added:
variable SSL_AVAILABLE