Skip to content

Upgrading redis 5 to 6

Breaking5.3.1 → 6.4.0Breaking11Platform1Deprecated7New16Changed4Fixed28Other60

BreakingUpgrade verdict

11 breaking changes and a platform requirement change.

  • SSL hostname checking behavior changed by default, which may break existing setups; this is reverted in 6.2.0.
  • Connections now verify the server hostname by default, which is safer but may require configuration changes.
  • Changes the default of require_full_coverage to True for the sync Cluster client to match sync/async cluster APIs.
  • Cluster clients now create a default retry object if none is given, and a provided retry object's retry count overrides cluster_error_retry_attempts.
Top 5 of 19 that need code or config changes

Python requirement changed in 6.2.0: >=3.8 → >=3.9.

Drops pyjwt.

Installs 0 packages in all (was 1).

Breaking11
Changes the default check_hostname value of RedisSSLContext and fixes RedisCluster ssl_check_hostname not being set on connections.
RedisClusterRedisSSLContextssl_check_hostnamecheck_hostnamessl_cert_reqs
Changes the default of ssl_check_hostname to True so security validations are not skipped by default.
ssl_check_hostname
Changes the default of require_full_coverage to True for the sync Cluster client to match sync/async cluster APIs.
require_full_coverage
Changes default retry configuration for cluster clients; retry object becomes mandatory and cluster_error_retry_attempts is deprecated.
retrycluster_error_retry_attemptsconnection_error_retry_attemptsExponentialWithJitterBackoff
Updates the default retry strategy for standalone clients to 3 retries with ExponentialWithJitterBackoff.
ExponentialWithJitterBackoff
Changes the default dialect to 2, appending DIALECT 2 to search and query commands like FT.AGGREGATE and FT.SEARCH.
FT.AGGREGATEFT.SEARCHDIALECT
Removes the charset and errors inputs from Redis initialization arguments, deprecated 3 years ago.
charseterrors
Removes support for the RedisGears module.
RedisGears
Removes support for the RedisGraph module.
RedisGraph
Fixes typing for FCALL commands to match PEP 484.
FCALL
Moves ClusterParser exceptions to the BaseParser class.
ClusterParserBaseParser
Platform1
Drops Python 3.8 support as it has reached end of life.
Deprecated7
Deprecates cluster_error_retry_attempts as part of the new default retry configuration for cluster clients.
cluster_error_retry_attempts
Deprecates the previous default retry strategy for standalone clients in favor of 3 retries with ExponentialWithJitterBackoff.
ExponentialWithJitterBackoff
Marks old RediSearch 1.0 commands as deprecated.
Adds deprecation messages for the exposed search module commands FT.CONFIG GET and FT.CONFIG SET.
FT.CONFIG GETFT.CONFIG SET
Deprecates Search module config_set and config_get commands.
config_setconfig_get
Deprecates the read_from_replicas config in favor of load balancing strategy configuration.
read_from_replicas
Deprecates unused arguments in connection pools' get_connection functions.
get_connection

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • added: export CrossSlotTransactionError
  • added: export InvalidPipelineStack
  • added: export MaxConnectionsError
  • added: export RedisClusterException
  • changed: method Redis.lock(name: KeyT, timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, lock_class: Optional[Type[Lock]]=…, thread_local: bool=…) -> Lock → method Redis.lock(name: KeyT, timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, lock_class: Optional[Type[Lock]]=…, thread_local: bool=…, raise_on_release_error: bool=…) -> Lock
  • added: variable TLSVersion
  • added: variable VerifyMode
  • removed: class ClusterParser(DefaultParser)
  • removed: field ClusterParser.EXCEPTION_CLASSES
  • removed: method RedisCluster.get_retry() -> Optional[Retry]
  • changed: constructor ClusterPipeline(client: RedisCluster) -> None → constructor ClusterPipeline(client: RedisCluster, transaction: Optional[bool]=…) -> None
  • changed: 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 → constructor NodesManager(startup_nodes: List[ClusterNode], require_full_coverage: bool, connection_kwargs: Dict[str, Any], dynamic_startup_nodes: bool=…, 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=…, 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… → 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]=…, dynamic_startup_nodes: bool=…, reinitialize_steps: int=…, cluster_error_retry_attempts: int=…, max_connections: int=…, retry: Optional[Retry]=…, retry_on_error:…
  • changed: method RedisCluster.lock(name: KeyT, timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, lock_class: Optional[Type[Lock]]=…, thread_local: bool=…) -> Lock → method RedisCluster.lock(name: KeyT, timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, lock_class: Optional[Type[Lock]]=…, thread_local: bool=…, raise_on_release_error: bool=…) -> Lock
  • added: async method AbstractStrategy.discard()
  • added: async method AbstractStrategy.execute(raise_on_error: bool=…, allow_redirections: bool=…) -> List[Any]
  • added: async method AbstractStrategy.initialize() -> ClusterPipeline
  • added: async method AbstractStrategy.reset()
  • added: async method AbstractStrategy.unlink(*names)
  • added: async method AbstractStrategy.unwatch()
  • added: async method AbstractStrategy.watch(*names)
  • added: async method ClusterPipeline.discard()
  • added: async method ClusterPipeline.reset()
  • added: async method ClusterPipeline.unlink(*names)
  • added: async method ClusterPipeline.unwatch()
  • added: async method ClusterPipeline.watch(*names)
  • added: async method ExecutionStrategy.discard()
  • added: async method ExecutionStrategy.execute(raise_on_error: bool=…, allow_redirections: bool=…) -> List[Any]
  • added: async method ExecutionStrategy.initialize() -> ClusterPipeline
  • added: async method ExecutionStrategy.reset()
  • added: async method ExecutionStrategy.unlink(*names)
  • added: async method ExecutionStrategy.unwatch()
  • added: async method ExecutionStrategy.watch(*names)
  • added: async method PipelineStrategy.discard()
  • added: async method PipelineStrategy.execute(raise_on_error: bool=…, allow_redirections: bool=…) -> List[Any]
  • added: async method PipelineStrategy.reset()
  • added: async method PipelineStrategy.unlink(*names)
  • added: async method PipelineStrategy.unwatch()
  • added: async method PipelineStrategy.watch(*names)
  • added: async method RedisCluster.transaction(func: Coroutine[None, ClusterPipeline, Any], *watches, **kwargs)
  • added: async method TransactionStrategy.discard()
  • added: async method TransactionStrategy.execute(raise_on_error: bool=…, allow_redirections: bool=…) -> List[Any]
  • added: async method TransactionStrategy.reset()
  • added: async method TransactionStrategy.unlink(*names)
  • added: async method TransactionStrategy.unwatch()
  • added: async method TransactionStrategy.watch(*names)
  • added: class AbstractStrategy(ExecutionStrategy)
  • added: class ExecutionStrategy(ABC)
  • added: class PipelineStrategy(AbstractStrategy)
  • added: class TransactionStrategy(AbstractStrategy)
  • added: constructor AbstractStrategy(pipe: ClusterPipeline) -> None
  • added: constructor PipelineStrategy(pipe: ClusterPipeline) -> None
  • added: constructor TransactionStrategy(pipe: ClusterPipeline) -> None
  • added: field TransactionStrategy.CONNECTION_ERRORS
  • added: field TransactionStrategy.IMMEDIATE_EXECUTE_COMMANDS
  • added: field TransactionStrategy.NO_SLOTS_COMMANDS
  • added: field TransactionStrategy.SLOT_REDIRECT_ERRORS
  • added: field TransactionStrategy.UNWATCH_COMMANDS
  • added: method AbstractStrategy.execute_command(*args: Union[KeyT, EncodableT], **kwargs: Any) -> ClusterPipeline
  • added: method AbstractStrategy.mset_nonatomic(mapping: Mapping[AnyKeyT, EncodableT]) -> ClusterPipeline
  • added: method AbstractStrategy.multi()
  • added: method ClusterNode.release(connection: Connection) -> None
  • added: method ClusterPipeline.multi()
  • added: method ExecutionStrategy.execute_command(*args: Union[KeyT, EncodableT], **kwargs: Any) -> ClusterPipeline
  • added: method ExecutionStrategy.mset_nonatomic(mapping: Mapping[AnyKeyT, EncodableT]) -> ClusterPipeline
  • added: method ExecutionStrategy.multi()
  • added: method NodesManager.update_moved_exception(exception)
  • added: method PipelineStrategy.mset_nonatomic(mapping: Mapping[AnyKeyT, EncodableT]) -> ClusterPipeline
  • added: method PipelineStrategy.multi()
  • added: method TransactionStrategy.execute_command(*args: Union[KeyT, EncodableT], **kwargs: Any) -> Any
  • added: method TransactionStrategy.mset_nonatomic(mapping: Mapping[AnyKeyT, EncodableT]) -> ClusterPipeline
  • added: method TransactionStrategy.multi()
  • added: variable TLSVersion
  • added: variable VerifyMode
  • changed: 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]=…) → constructor RedisSSLContext(keyfile: Optional[str]=…, certfile: Optional[str]=…, cert_reqs: Optional[Union[str, ssl.VerifyMode]]=…, ca_certs: Optional[str]=…, ca_data: Optional[str]=…, check_hostname: bool=…, min_version: Optional[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=…, ssl_min_version: Optional[ssl.TLSVersion]=…, ssl_ciphers: Optional[str]=…, **kwargs) → constructor SSLConnection(ssl_keyfile: Optional[str]=…, ssl_certfile: Optional[str]=…, ssl_cert_reqs: Union[str, ssl.VerifyMode]=…, ssl_ca_certs: Optional[str]=…, ssl_ca_data: Optional[str]=…, ssl_check_hostname: bool=…, ssl_min_version: Optional[TLSVersion]=…, ssl_ciphers: Optional[str]=…, **kwargs)
  • changed: method RedisSSLContext.get() -> ssl.SSLContext → method RedisSSLContext.get() -> SSLContext
  • added: async method AbstractConnection.connect_check_health(check_health: bool=…, retry_socket_connect: bool=…)
  • added: async method AbstractConnection.on_connect_check_health(check_health: bool=…) -> None
  • added: variable SSLContext
  • added: variable TLSVersion
  • added: variable ssl
  • changed: async method Lock.acquire(blocking: Optional[bool]=…, blocking_timeout: Optional[float]=…, token: Optional[Union[str, bytes]]=…) → async method Lock.acquire(blocking: Optional[bool]=…, blocking_timeout: Optional[Number]=…, token: Optional[Union[str, bytes]]=…)
  • changed: constructor Lock(redis: Union[Redis, RedisCluster], name: Union[str, bytes, memoryview], timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, thread_local: bool=…) → constructor Lock(redis: Union[Redis, RedisCluster], name: Union[str, bytes, memoryview], timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[Number]=…, thread_local: bool=…, raise_on_release_error: bool=…)
  • changed: method Lock.extend(additional_time: float, replace_ttl: bool=…) -> Awaitable[bool] → method Lock.extend(additional_time: Number, replace_ttl: bool=…) -> Awaitable[bool]
  • added: variable logger
  • removed: method Retry.update_supported_errors(specified_errors: list)
  • changed: class Retry → class Retry(AbstractRetry[RedisError])
  • 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: constructor Pipeline(connection_pool, response_callbacks, transaction, shard_hint) → constructor Pipeline(connection_pool: ConnectionPool, response_callbacks, transaction, shard_hint)
  • changed: 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… → 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=…, decode_resp…
  • changed: method Redis.lock(name: str, timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, lock_class: Union[None, Any]=…, thread_local: bool=…) → method Redis.lock(name: str, timeout: Optional[float]=…, sleep: float=…, blocking: bool=…, blocking_timeout: Optional[float]=…, lock_class: Union[None, Any]=…, thread_local: bool=…, raise_on_release_error: bool=…)
  • changed: method Redis.transaction(func: Callable[[Pipeline], None], *watches, **kwargs) -> None → method Redis.transaction(func: Callable[[Pipeline], None], *watches, **kwargs) -> Union[List[Any], Any, None]
  • removed: class ClusterParser(DefaultParser)
  • removed: field ClusterParser.EXCEPTION_CLASSES
  • removed: method ClusterPipeline.immediate_execute_command(*args, **options)
  • removed: method ClusterPipeline.raise_first_error(stack)
  • removed: method RedisCluster.get_retry() -> Optional[Retry]
  • changed: function get_connection(redis_node, *args, **options) → function get_connection(redis_node: Redis, *args, **options) -> Connection
  • changed: method NodesManager.get_node_from_slot(slot, read_from_replicas=…, load_balancing_strategy=…, server_type=…) → method NodesManager.get_node_from_slot(slot, read_from_replicas=…, load_balancing_strategy=…, server_type=…) -> ClusterNode
  • changed: method RedisCluster.determine_slot(*args) → method RedisCluster.determine_slot(*args) -> int
  • changed: method RedisCluster.get_redis_connection(node) → method RedisCluster.get_redis_connection(node: ClusterNode) -> Redis
  • changed: method RedisCluster.lock(name, timeout=…, sleep=…, blocking=…, blocking_timeout=…, lock_class=…, thread_local=…) → method RedisCluster.lock(name, timeout=…, sleep=…, blocking=…, blocking_timeout=…, lock_class=…, thread_local=…, raise_on_release_error: bool=…)
  • added: class AbstractStrategy(ExecutionStrategy)
  • added: class ExecutionStrategy(ABC)
  • added: class PipelineStrategy(AbstractStrategy)
  • added: class TransactionStrategy(AbstractStrategy)
  • added: constructor AbstractStrategy(pipe: ClusterPipeline)
  • added: constructor PipelineStrategy(pipe: ClusterPipeline)
  • added: constructor TransactionStrategy(pipe: ClusterPipeline)
  • added: field ClusterPipeline.IMMEDIATE_EXECUTE_COMMANDS
  • added: field ClusterPipeline.NO_SLOTS_COMMANDS
  • added: field ClusterPipeline.UNWATCH_COMMANDS
  • added: field TransactionStrategy.CONNECTION_ERRORS
  • added: field TransactionStrategy.IMMEDIATE_EXECUTE_COMMANDS
  • added: field TransactionStrategy.NO_SLOTS_COMMANDS
  • added: field TransactionStrategy.SLOT_REDIRECT_ERRORS
  • added: field TransactionStrategy.UNWATCH_COMMANDS
  • added: method AbstractStrategy.annotate_exception(exception, number, command)
  • added: method AbstractStrategy.eval()
  • added: method AbstractStrategy.execute(raise_on_error: bool=…) -> List[Any]
  • added: method AbstractStrategy.execute_command(*args, **kwargs)
  • added: method AbstractStrategy.exists(*keys)
  • added: method AbstractStrategy.load_scripts()
  • added: method AbstractStrategy.pipeline_execute_command(*args, **options)
  • added: method AbstractStrategy.reset()
  • added: method AbstractStrategy.script_load_for_pipeline(*args, **kwargs)
  • added: method AbstractStrategy.send_cluster_commands(stack, raise_on_error=…, allow_redirections=…)
  • added: method ClusterPipeline.discard()
  • added: method ExecutionStrategy.annotate_exception(exception, number, command)
  • added: method ExecutionStrategy.delete(*names)
  • added: method ExecutionStrategy.discard()
  • added: method ExecutionStrategy.eval()
  • added: method ExecutionStrategy.execute(raise_on_error: bool=…) -> List[Any]
  • added: method ExecutionStrategy.execute_command(*args, **kwargs)
  • added: method ExecutionStrategy.exists(*keys)
  • added: method ExecutionStrategy.load_scripts()
  • added: method ExecutionStrategy.multi()
  • added: method ExecutionStrategy.pipeline_execute_command(*args, **options)
  • added: method ExecutionStrategy.reset()
  • added: method ExecutionStrategy.script_load_for_pipeline(*args, **kwargs)
  • added: method ExecutionStrategy.send_cluster_commands(stack, raise_on_error=…, allow_redirections=…)
  • added: method ExecutionStrategy.unlink(*names)
  • added: method ExecutionStrategy.unwatch()
  • added: method ExecutionStrategy.watch(*names)
  • added: method NodesManager.find_connection_owner(connection: Connection) -> Optional[Redis]
  • added: method PipelineStrategy.delete(*names)
  • added: method PipelineStrategy.discard()
  • added: method PipelineStrategy.execute(raise_on_error: bool=…) -> List[Any]
  • added: method PipelineStrategy.execute_command(*args, **kwargs)
  • added: method PipelineStrategy.multi()
  • added: method PipelineStrategy.reset()
  • added: method PipelineStrategy.send_cluster_commands(stack, raise_on_error=…, allow_redirections=…)
  • added: method PipelineStrategy.unlink(*names)
  • added: method PipelineStrategy.unwatch(*names)
  • added: method PipelineStrategy.watch(*names)
  • added: method RedisCluster.transaction(func, *watches, **kwargs)
  • added: method TransactionStrategy.delete(*names)
  • added: method TransactionStrategy.discard()
  • added: method TransactionStrategy.execute(raise_on_error: bool=…) -> List[Any]
  • added: method TransactionStrategy.execute_command(*args, **kwargs)
  • added: method TransactionStrategy.multi()
  • added: method TransactionStrategy.reset()
  • added: method TransactionStrategy.send_cluster_commands(stack, raise_on_error=…, allow_redirections=…)
  • added: method TransactionStrategy.unlink(*names)
  • added: method TransactionStrategy.unwatch()
  • added: method TransactionStrategy.watch(*names)
  • added: property AbstractStrategy.command_queue
  • added: property ExecutionStrategy.command_queue
  • removed: method ClusterManagementCommands.gears_refresh_cluster(**kwargs) -> ResponseT
  • changed: class AsyncRedisClusterCommands(AsyncClusterMultiKeyCommands, AsyncClusterManagementCommands, AsyncACLCommands, AsyncClusterDataAccessCommands, AsyncScriptCommands, AsyncFunctionCommands, AsyncGearsCommands, AsyncModuleCommands, AsyncRedisModuleCommands) → class AsyncRedisClusterCommands(AsyncClusterMultiKeyCommands, AsyncClusterManagementCommands, AsyncACLCommands, AsyncClusterDataAccessCommands, AsyncScriptCommands, AsyncFunctionCommands, AsyncModuleCommands, AsyncRedisModuleCommands)
  • changed: class RedisClusterCommands(ClusterMultiKeyCommands, ClusterManagementCommands, ACLCommands, PubSubCommands, ClusterDataAccessCommands, ScriptCommands, FunctionCommands, GearsCommands, ModuleCommands, RedisModuleCommands) → class RedisClusterCommands(ClusterMultiKeyCommands, ClusterManagementCommands, ACLCommands, PubSubCommands, ClusterDataAccessCommands, ScriptCommands, FunctionCommands, ModuleCommands, RedisModuleCommands)
  • removed: class GearsCommands
  • removed: method GearsCommands.tfcall(lib_name: str, func_name: str, keys: KeysT=…, *args: List) -> ResponseT
  • removed: method GearsCommands.tfcall_async(lib_name: str, func_name: str, keys: KeysT=…, *args: List) -> ResponseT
  • removed: method GearsCommands.tfunction_delete(lib_name: str) -> ResponseT
  • removed: method GearsCommands.tfunction_list(with_code: bool=…, verbose: int=…, lib_name: Union[str, None]=…) -> ResponseT
  • removed: method GearsCommands.tfunction_load(lib_code: str, replace: bool=…, config: Union[str, None]=…) -> ResponseT
  • removed: variable AsyncGearsCommands
  • changed: async method AsyncScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Union[int, None]=…, no_values: Union[bool, None]=…) -> AsyncIterator → async method AsyncScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Optional[int]=…, no_values: Union[bool, None]=…) -> AsyncIterator
  • changed: async method AsyncScanCommands.scan_iter(match: Union[PatternT, None]=…, count: Union[int, None]=…, _type: Union[str, None]=…, **kwargs) -> AsyncIterator → async method AsyncScanCommands.scan_iter(match: Union[PatternT, None]=…, count: Optional[int]=…, _type: Optional[str]=…, **kwargs) -> AsyncIterator
  • changed: async method AsyncScanCommands.sscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Union[int, None]=…) -> AsyncIterator → async method AsyncScanCommands.sscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Optional[int]=…) -> AsyncIterator
  • changed: async method AsyncScanCommands.zscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Union[int, None]=…, score_cast_func: Union[type, Callable]=…) -> AsyncIterator → async method AsyncScanCommands.zscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Optional[int]=…, score_cast_func: Union[type, Callable]=…) -> AsyncIterator
  • changed: class AsyncCoreCommands(AsyncACLCommands, AsyncClusterCommands, AsyncDataAccessCommands, AsyncManagementCommands, AsyncModuleCommands, AsyncPubSubCommands, AsyncScriptCommands, AsyncFunctionCommands, AsyncGearsCommands) → class AsyncCoreCommands(AsyncACLCommands, AsyncClusterCommands, AsyncDataAccessCommands, AsyncManagementCommands, AsyncModuleCommands, AsyncPubSubCommands, AsyncScriptCommands, AsyncFunctionCommands)
  • changed: class CoreCommands(ACLCommands, ClusterCommands, DataAccessCommands, ManagementCommands, ModuleCommands, PubSubCommands, ScriptCommands, FunctionCommands, GearsCommands) → class CoreCommands(ACLCommands, ClusterCommands, DataAccessCommands, ManagementCommands, ModuleCommands, PubSubCommands, ScriptCommands, FunctionCommands)
  • changed: constructor BitFieldOperation(client: Union[redis.client.Redis, redis.asyncio.client.Redis], key: str, default_overflow: Union[str, None]=…) → constructor BitFieldOperation(client: Union[redis.client.Redis, redis.asyncio.client.Redis], key: str, default_overflow: Optional[str]=…)
  • changed: method ACLCommands.acl_cat(category: Union[str, None]=…, **kwargs) -> ResponseT → method ACLCommands.acl_cat(category: Optional[str]=…, **kwargs) -> ResponseT
  • changed: method ACLCommands.acl_genpass(bits: Union[int, None]=…, **kwargs) -> ResponseT → method ACLCommands.acl_genpass(bits: Optional[int]=…, **kwargs) -> ResponseT
  • changed: method ACLCommands.acl_log(count: Union[int, None]=…, **kwargs) -> ResponseT → method ACLCommands.acl_log(count: Optional[int]=…, **kwargs) -> ResponseT
  • changed: method ACLCommands.acl_setuser(username: str, enabled: bool=…, nopass: bool=…, passwords: Union[str, Iterable[str], None]=…, hashed_passwords: Union[str, Iterable[str], None]=…, categories: Optional[Iterable[str]]=…, commands: Optional[Iterable[str]]=…, keys: Optional[Iterable[KeyT]]=…, channels: Optional[Iterable[ChannelT]]=…, selectors: Optional[Iterable[Tuple[str, KeyT]]]=…, reset: bool=…, res… → method ACLCommands.acl_setuser(username: str, enabled: bool=…, nopass: bool=…, passwords: Optional[Union[str, Iterable[str]]]=…, hashed_passwords: Optional[Union[str, Iterable[str]]]=…, categories: Optional[Iterable[str]]=…, commands: Optional[Iterable[str]]=…, keys: Optional[Iterable[KeyT]]=…, channels: Optional[Iterable[ChannelT]]=…, selectors: Optional[Iterable[Tuple[str, KeyT]]]=…, reset: boo…
  • changed: method BasicKeyCommands.bitcount(key: KeyT, start: Union[int, None]=…, end: Union[int, None]=…, mode: Optional[str]=…) -> ResponseT → method BasicKeyCommands.bitcount(key: KeyT, start: Optional[int]=…, end: Optional[int]=…, mode: Optional[str]=…) -> ResponseT
  • changed: method BasicKeyCommands.bitfield(key: KeyT, default_overflow: Union[str, None]=…) -> BitFieldOperation → method BasicKeyCommands.bitfield(key: KeyT, default_overflow: Optional[str]=…) -> BitFieldOperation
  • changed: method BasicKeyCommands.bitpos(key: KeyT, bit: int, start: Union[int, None]=…, end: Union[int, None]=…, mode: Optional[str]=…) -> ResponseT → method BasicKeyCommands.bitpos(key: KeyT, bit: int, start: Optional[int]=…, end: Optional[int]=…, mode: Optional[str]=…) -> ResponseT
  • changed: method BasicKeyCommands.copy(source: str, destination: str, destination_db: Union[str, None]=…, replace: bool=…) -> ResponseT → method BasicKeyCommands.copy(source: str, destination: str, destination_db: Optional[str]=…, replace: bool=…) -> ResponseT
  • changed: method BasicKeyCommands.getex(name: KeyT, ex: Union[ExpiryT, None]=…, px: Union[ExpiryT, None]=…, exat: Union[AbsExpiryT, None]=…, pxat: Union[AbsExpiryT, None]=…, persist: bool=…) -> ResponseT → method BasicKeyCommands.getex(name: KeyT, ex: Optional[ExpiryT]=…, px: Optional[ExpiryT]=…, exat: Optional[AbsExpiryT]=…, pxat: Optional[AbsExpiryT]=…, persist: bool=…) -> ResponseT
  • changed: method BasicKeyCommands.hrandfield(key: str, count: int=…, withvalues: bool=…) -> ResponseT → method BasicKeyCommands.hrandfield(key: str, count: Optional[int]=…, withvalues: bool=…) -> ResponseT
  • changed: method BasicKeyCommands.restore(name: KeyT, ttl: float, value: EncodableT, replace: bool=…, absttl: bool=…, idletime: Union[int, None]=…, frequency: Union[int, None]=…) -> ResponseT → method BasicKeyCommands.restore(name: KeyT, ttl: float, value: EncodableT, replace: bool=…, absttl: bool=…, idletime: Optional[int]=…, frequency: Optional[int]=…) -> ResponseT
  • changed: method BasicKeyCommands.set(name: KeyT, value: EncodableT, ex: Union[ExpiryT, None]=…, px: Union[ExpiryT, None]=…, nx: bool=…, xx: bool=…, keepttl: bool=…, get: bool=…, exat: Union[AbsExpiryT, None]=…, pxat: Union[AbsExpiryT, None]=…) -> ResponseT → method BasicKeyCommands.set(name: KeyT, value: EncodableT, ex: Optional[ExpiryT]=…, px: Optional[ExpiryT]=…, nx: bool=…, xx: bool=…, keepttl: bool=…, get: bool=…, exat: Optional[AbsExpiryT]=…, pxat: Optional[AbsExpiryT]=…) -> ResponseT
  • changed: method BasicKeyCommands.stralgo(algo: Literal['LCS'], value1: KeyT, value2: KeyT, specific_argument: Union[Literal['strings'], Literal['keys']]=…, len: bool=…, idx: bool=…, minmatchlen: Union[int, None]=…, withmatchlen: bool=…, **kwargs) -> ResponseT → method BasicKeyCommands.stralgo(algo: Literal['LCS'], value1: KeyT, value2: KeyT, specific_argument: Union[Literal['strings'], Literal['keys']]=…, len: bool=…, idx: bool=…, minmatchlen: Optional[int]=…, withmatchlen: bool=…, **kwargs) -> ResponseT
  • changed: method BitFieldOperation.incrby(fmt: str, offset: BitfieldOffsetT, increment: int, overflow: Union[str, None]=…) → method BitFieldOperation.incrby(fmt: str, offset: BitfieldOffsetT, increment: int, overflow: Optional[str]=…)
  • changed: method FunctionCommands.fcall(function, numkeys: int, *keys_and_args: Optional[List]) -> Union[Awaitable[str], str] → method FunctionCommands.fcall(function, numkeys: int, *keys_and_args: Any) -> Union[Awaitable[str], str]
  • changed: method FunctionCommands.fcall_ro(function, numkeys: int, *keys_and_args: Optional[List]) -> Union[Awaitable[str], str] → method FunctionCommands.fcall_ro(function, numkeys: int, *keys_and_args: Any) -> Union[Awaitable[str], str]
  • changed: method GeoCommands.geodist(name: KeyT, place1: FieldT, place2: FieldT, unit: Union[str, None]=…) -> ResponseT → method GeoCommands.geodist(name: KeyT, place1: FieldT, place2: FieldT, unit: Optional[str]=…) -> ResponseT
  • changed: method GeoCommands.georadius(name: KeyT, longitude: float, latitude: float, radius: float, unit: Union[str, None]=…, withdist: bool=…, withcoord: bool=…, withhash: bool=…, count: Union[int, None]=…, sort: Union[str, None]=…, store: Union[KeyT, None]=…, store_dist: Union[KeyT, None]=…, any: bool=…) -> ResponseT → method GeoCommands.georadius(name: KeyT, longitude: float, latitude: float, radius: float, unit: Optional[str]=…, withdist: bool=…, withcoord: bool=…, withhash: bool=…, count: Optional[int]=…, sort: Optional[str]=…, store: Optional[KeyT]=…, store_dist: Optional[KeyT]=…, any: bool=…) -> ResponseT
  • changed: method GeoCommands.georadiusbymember(name: KeyT, member: FieldT, radius: float, unit: Union[str, None]=…, withdist: bool=…, withcoord: bool=…, withhash: bool=…, count: Union[int, None]=…, sort: Union[str, None]=…, store: Union[KeyT, None]=…, store_dist: Union[KeyT, None]=…, any: bool=…) -> ResponseT → method GeoCommands.georadiusbymember(name: KeyT, member: FieldT, radius: float, unit: Optional[str]=…, withdist: bool=…, withcoord: bool=…, withhash: bool=…, count: Optional[int]=…, sort: Optional[str]=…, store: Union[KeyT, None]=…, store_dist: Union[KeyT, None]=…, any: bool=…) -> ResponseT
  • changed: method GeoCommands.geosearch(name: KeyT, member: Union[FieldT, None]=…, longitude: Union[float, None]=…, latitude: Union[float, None]=…, unit: str=…, radius: Union[float, None]=…, width: Union[float, None]=…, height: Union[float, None]=…, sort: Union[str, None]=…, count: Union[int, None]=…, any: bool=…, withcoord: bool=…, withdist: bool=…, withhash: bool=…) -> ResponseT → method GeoCommands.geosearch(name: KeyT, member: Union[FieldT, None]=…, longitude: Union[float, None]=…, latitude: Union[float, None]=…, unit: str=…, radius: Union[float, None]=…, width: Union[float, None]=…, height: Union[float, None]=…, sort: Optional[str]=…, count: Optional[int]=…, any: bool=…, withcoord: bool=…, withdist: bool=…, withhash: bool=…) -> ResponseT
  • changed: method GeoCommands.geosearchstore(dest: KeyT, name: KeyT, member: Union[FieldT, None]=…, longitude: Union[float, None]=…, latitude: Union[float, None]=…, unit: str=…, radius: Union[float, None]=…, width: Union[float, None]=…, height: Union[float, None]=…, sort: Union[str, None]=…, count: Union[int, None]=…, any: bool=…, storedist: bool=…) -> ResponseT → method GeoCommands.geosearchstore(dest: KeyT, name: KeyT, member: Optional[FieldT]=…, longitude: Optional[float]=…, latitude: Optional[float]=…, unit: str=…, radius: Optional[float]=…, width: Optional[float]=…, height: Optional[float]=…, sort: Optional[str]=…, count: Optional[int]=…, any: bool=…, storedist: bool=…) -> ResponseT
  • changed: method ListCommands.blpop(keys: List, timeout: Optional[int]=…) -> Union[Awaitable[list], list] → method ListCommands.blpop(keys: List, timeout: Optional[Number]=…) -> Union[Awaitable[list], list]
  • changed: method ListCommands.brpop(keys: List, timeout: Optional[int]=…) -> Union[Awaitable[list], list] → method ListCommands.brpop(keys: List, timeout: Optional[Number]=…) -> Union[Awaitable[list], list]
  • changed: method ListCommands.brpoplpush(src: str, dst: str, timeout: Optional[int]=…) -> Union[Awaitable[Optional[str]], Optional[str]] → method ListCommands.brpoplpush(src: str, dst: str, timeout: Optional[Number]=…) -> Union[Awaitable[Optional[str]], Optional[str]]
  • 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=…, maxage: Union[int, None]=…, **kwargs) -> ResponseT → method ManagementCommands.client_kill_filter(_id: Optional[str]=…, _type: Optional[str]=…, addr: Optional[str]=…, skipme: Optional[bool]=…, laddr: Optional[bool]=…, user: Optional[str]=…, maxage: Optional[int]=…, **kwargs) -> ResponseT
  • changed: method ManagementCommands.client_list(_type: Union[str, None]=…, client_id: List[EncodableT]=…, **kwargs) -> ResponseT → method ManagementCommands.client_list(_type: Optional[str]=…, client_id: List[EncodableT]=…, **kwargs) -> ResponseT
  • changed: method ManagementCommands.client_tracking(on: bool=…, clientid: Union[int, None]=…, prefix: Sequence[KeyT]=…, bcast: bool=…, optin: bool=…, optout: bool=…, noloop: bool=…, **kwargs) -> ResponseT → method ManagementCommands.client_tracking(on: bool=…, clientid: Optional[int]=…, prefix: Sequence[KeyT]=…, bcast: bool=…, optin: bool=…, optout: bool=…, noloop: bool=…, **kwargs) -> ResponseT
  • changed: method ManagementCommands.client_tracking_off(clientid: Union[int, None]=…, prefix: Sequence[KeyT]=…, bcast: bool=…, optin: bool=…, optout: bool=…, noloop: bool=…) -> ResponseT → method ManagementCommands.client_tracking_off(clientid: Optional[int]=…, prefix: Sequence[KeyT]=…, bcast: bool=…, optin: bool=…, optout: bool=…, noloop: bool=…) -> ResponseT
  • changed: method ManagementCommands.client_tracking_on(clientid: Union[int, None]=…, prefix: Sequence[KeyT]=…, bcast: bool=…, optin: bool=…, optout: bool=…, noloop: bool=…) -> ResponseT → method ManagementCommands.client_tracking_on(clientid: Optional[int]=…, prefix: Sequence[KeyT]=…, bcast: bool=…, optin: bool=…, optout: bool=…, noloop: bool=…) -> ResponseT
  • changed: method ManagementCommands.info(section: Union[str, None]=…, *args: List[str], **kwargs) -> ResponseT → method ManagementCommands.info(section: Optional[str]=…, *args: List[str], **kwargs) -> ResponseT
  • changed: method ManagementCommands.memory_usage(key: KeyT, samples: Union[int, None]=…, **kwargs) -> ResponseT → method ManagementCommands.memory_usage(key: KeyT, samples: Optional[int]=…, **kwargs) -> ResponseT
  • changed: method ManagementCommands.migrate(host: str, port: int, keys: KeysT, destination_db: int, timeout: int, copy: bool=…, replace: bool=…, auth: Union[str, None]=…, **kwargs) -> ResponseT → method ManagementCommands.migrate(host: str, port: int, keys: KeysT, destination_db: int, timeout: int, copy: bool=…, replace: bool=…, auth: Optional[str]=…, **kwargs) -> ResponseT
  • changed: method ManagementCommands.slaveof(host: Union[str, None]=…, port: Union[int, None]=…, **kwargs) -> ResponseT → method ManagementCommands.slaveof(host: Optional[str]=…, port: Optional[int]=…, **kwargs) -> ResponseT
  • changed: method ManagementCommands.slowlog_get(num: Union[int, None]=…, **kwargs) -> ResponseT → method ManagementCommands.slowlog_get(num: Optional[int]=…, **kwargs) -> ResponseT
  • changed: method ScanCommands.hscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Union[int, None]=…, no_values: Union[bool, None]=…) -> ResponseT → method ScanCommands.hscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Optional[int]=…, no_values: Union[bool, None]=…) -> ResponseT
  • changed: method ScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Union[int, None]=…, no_values: Union[bool, None]=…) -> Iterator → method ScanCommands.hscan_iter(name: str, match: Union[PatternT, None]=…, count: Optional[int]=…, no_values: Union[bool, None]=…) -> Iterator
  • changed: method ScanCommands.scan(cursor: int=…, match: Union[PatternT, None]=…, count: Union[int, None]=…, _type: Union[str, None]=…, **kwargs) -> ResponseT → method ScanCommands.scan(cursor: int=…, match: Union[PatternT, None]=…, count: Optional[int]=…, _type: Optional[str]=…, **kwargs) -> ResponseT
  • changed: method ScanCommands.scan_iter(match: Union[PatternT, None]=…, count: Union[int, None]=…, _type: Union[str, None]=…, **kwargs) -> Iterator → method ScanCommands.scan_iter(match: Union[PatternT, None]=…, count: Optional[int]=…, _type: Optional[str]=…, **kwargs) -> Iterator
  • changed: method ScanCommands.sscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Union[int, None]=…) -> ResponseT → method ScanCommands.sscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Optional[int]=…) -> ResponseT
  • changed: method ScanCommands.sscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Union[int, None]=…) -> Iterator → method ScanCommands.sscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Optional[int]=…) -> Iterator
  • changed: method ScanCommands.zscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Union[int, None]=…, score_cast_func: Union[type, Callable]=…) -> ResponseT → method ScanCommands.zscan(name: KeyT, cursor: int=…, match: Union[PatternT, None]=…, count: Optional[int]=…, score_cast_func: Union[type, Callable]=…) -> ResponseT
  • changed: method ScanCommands.zscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Union[int, None]=…, score_cast_func: Union[type, Callable]=…) -> Iterator → method ScanCommands.zscan_iter(name: KeyT, match: Union[PatternT, None]=…, count: Optional[int]=…, score_cast_func: Union[type, Callable]=…) -> Iterator
  • changed: method SetCommands.sadd(name: str, *values: FieldT) -> Union[Awaitable[int], int] → method SetCommands.sadd(name: KeyT, *values: FieldT) -> Union[Awaitable[int], int]
  • changed: method SetCommands.scard(name: str) -> Union[Awaitable[int], int] → method SetCommands.scard(name: KeyT) -> Union[Awaitable[int], int]
  • changed: method SetCommands.sintercard(numkeys: int, keys: List[str], limit: int=…) -> Union[Awaitable[int], int] → method SetCommands.sintercard(numkeys: int, keys: List[KeyT], limit: int=…) -> Union[Awaitable[int], int]
  • changed: method SetCommands.sinterstore(dest: str, keys: List, *args: List) -> Union[Awaitable[int], int] → method SetCommands.sinterstore(dest: KeyT, keys: List, *args: List) -> Union[Awaitable[int], int]
  • changed: method SetCommands.sismember(name: str, value: str) -> Union[Awaitable[Union[Literal[0], Literal[1]]], Union[Literal[0], Literal[1]]] → method SetCommands.sismember(name: KeyT, value: str) -> Union[Awaitable[Union[Literal[0], Literal[1]]], Union[Literal[0], Literal[1]]]
  • changed: method SetCommands.smembers(name: str) -> Union[Awaitable[Set], Set] → method SetCommands.smembers(name: KeyT) -> Union[Awaitable[Set], Set]
  • changed: method SetCommands.smismember(name: str, values: List, *args: List) -> Union[Awaitable[List[Union[Literal[0], Literal[1]]]], List[Union[Literal[0], Literal[1]]]] → method SetCommands.smismember(name: KeyT, values: List, *args: List) -> Union[Awaitable[List[Union[Literal[0], Literal[1]]]], List[Union[Literal[0], Literal[1]]]]
  • changed: method SetCommands.smove(src: str, dst: str, value: str) -> Union[Awaitable[bool], bool] → method SetCommands.smove(src: KeyT, dst: KeyT, value: str) -> Union[Awaitable[bool], bool]
  • changed: method SetCommands.spop(name: str, count: Optional[int]=…) -> Union[str, List, None] → method SetCommands.spop(name: KeyT, count: Optional[int]=…) -> Union[str, List, None]
  • changed: method SetCommands.srandmember(name: str, number: Optional[int]=…) -> Union[str, List, None] → method SetCommands.srandmember(name: KeyT, number: Optional[int]=…) -> Union[str, List, None]
  • changed: method SetCommands.srem(name: str, *values: FieldT) -> Union[Awaitable[int], int] → method SetCommands.srem(name: KeyT, *values: FieldT) -> Union[Awaitable[int], int]
  • changed: method SetCommands.sunionstore(dest: str, keys: List, *args: List) -> Union[Awaitable[int], int] → method SetCommands.sunionstore(dest: KeyT, keys: List, *args: List) -> Union[Awaitable[int], int]
  • changed: method SortedSetCommands.zinter(keys: KeysT, aggregate: Union[str, None]=…, withscores: bool=…) -> ResponseT → method SortedSetCommands.zinter(keys: KeysT, aggregate: Optional[str]=…, withscores: bool=…) -> ResponseT
  • changed: method SortedSetCommands.zinterstore(dest: KeyT, keys: Union[Sequence[KeyT], Mapping[AnyKeyT, float]], aggregate: Union[str, None]=…) -> ResponseT → method SortedSetCommands.zinterstore(dest: KeyT, keys: Union[Sequence[KeyT], Mapping[AnyKeyT, float]], aggregate: Optional[str]=…) -> ResponseT
  • changed: method SortedSetCommands.zpopmax(name: KeyT, count: Union[int, None]=…) -> ResponseT → method SortedSetCommands.zpopmax(name: KeyT, count: Optional[int]=…) -> ResponseT
  • changed: method SortedSetCommands.zpopmin(name: KeyT, count: Union[int, None]=…) -> ResponseT → method SortedSetCommands.zpopmin(name: KeyT, count: Optional[int]=…) -> ResponseT
  • changed: method SortedSetCommands.zrandmember(key: KeyT, count: int=…, withscores: bool=…) -> ResponseT → method SortedSetCommands.zrandmember(key: KeyT, count: Optional[int]=…, withscores: bool=…) -> ResponseT
  • changed: method SortedSetCommands.zrange(name: KeyT, start: int, end: int, desc: bool=…, withscores: bool=…, score_cast_func: Union[type, Callable]=…, byscore: bool=…, bylex: bool=…, offset: int=…, num: int=…) -> ResponseT → method SortedSetCommands.zrange(name: KeyT, start: int, end: int, desc: bool=…, withscores: bool=…, score_cast_func: Union[type, Callable]=…, byscore: bool=…, bylex: bool=…, offset: Optional[int]=…, num: Optional[int]=…) -> ResponseT
  • changed: method SortedSetCommands.zrangebylex(name: KeyT, min: EncodableT, max: EncodableT, start: Union[int, None]=…, num: Union[int, None]=…) -> ResponseT → method SortedSetCommands.zrangebylex(name: KeyT, min: EncodableT, max: EncodableT, start: Optional[int]=…, num: Optional[int]=…) -> ResponseT
  • changed: method SortedSetCommands.zrangebyscore(name: KeyT, min: ZScoreBoundT, max: ZScoreBoundT, start: Union[int, None]=…, num: Union[int, None]=…, withscores: bool=…, score_cast_func: Union[type, Callable]=…) -> ResponseT → method SortedSetCommands.zrangebyscore(name: KeyT, min: ZScoreBoundT, max: ZScoreBoundT, start: Optional[int]=…, num: Optional[int]=…, withscores: bool=…, score_cast_func: Union[type, Callable]=…) -> ResponseT
  • changed: method SortedSetCommands.zrangestore(dest: KeyT, name: KeyT, start: int, end: int, byscore: bool=…, bylex: bool=…, desc: bool=…, offset: Union[int, None]=…, num: Union[int, None]=…) -> ResponseT → method SortedSetCommands.zrangestore(dest: KeyT, name: KeyT, start: int, end: int, byscore: bool=…, bylex: bool=…, desc: bool=…, offset: Optional[int]=…, num: Optional[int]=…) -> ResponseT
  • changed: method SortedSetCommands.zrevrangebylex(name: KeyT, max: EncodableT, min: EncodableT, start: Union[int, None]=…, num: Union[int, None]=…) -> ResponseT → method SortedSetCommands.zrevrangebylex(name: KeyT, max: EncodableT, min: EncodableT, start: Optional[int]=…, num: Optional[int]=…) -> ResponseT
  • changed: method SortedSetCommands.zrevrangebyscore(name: KeyT, max: ZScoreBoundT, min: ZScoreBoundT, start: Union[int, None]=…, num: Union[int, None]=…, withscores: bool=…, score_cast_func: Union[type, Callable]=…) → method SortedSetCommands.zrevrangebyscore(name: KeyT, max: ZScoreBoundT, min: ZScoreBoundT, start: Optional[int]=…, num: Optional[int]=…, withscores: bool=…, score_cast_func: Union[type, Callable]=…)
  • changed: method SortedSetCommands.zunion(keys: Union[Sequence[KeyT], Mapping[AnyKeyT, float]], aggregate: Union[str, None]=…, withscores: bool=…) -> ResponseT → method SortedSetCommands.zunion(keys: Union[Sequence[KeyT], Mapping[AnyKeyT, float]], aggregate: Optional[str]=…, withscores: bool=…) -> ResponseT
  • changed: method SortedSetCommands.zunionstore(dest: KeyT, keys: Union[Sequence[KeyT], Mapping[AnyKeyT, float]], aggregate: Union[str, None]=…) -> ResponseT → method SortedSetCommands.zunionstore(dest: KeyT, keys: Union[Sequence[KeyT], Mapping[AnyKeyT, float]], aggregate: Optional[str]=…) -> ResponseT
  • changed: method StreamCommands.xadd(name: KeyT, fields: Dict[FieldT, EncodableT], id: StreamIdT=…, maxlen: Union[int, None]=…, approximate: bool=…, nomkstream: bool=…, minid: Union[StreamIdT, None]=…, limit: Union[int, None]=…) -> ResponseT → method StreamCommands.xadd(name: KeyT, fields: Dict[FieldT, EncodableT], id: StreamIdT=…, maxlen: Optional[int]=…, approximate: bool=…, nomkstream: bool=…, minid: Union[StreamIdT, None]=…, limit: Optional[int]=…, ref_policy: Optional[Literal['KEEPREF', 'DELREF', 'ACKED']]=…) -> ResponseT
  • changed: method StreamCommands.xautoclaim(name: KeyT, groupname: GroupT, consumername: ConsumerT, min_idle_time: int, start_id: StreamIdT=…, count: Union[int, None]=…, justid: bool=…) -> ResponseT → method StreamCommands.xautoclaim(name: KeyT, groupname: GroupT, consumername: ConsumerT, min_idle_time: int, start_id: StreamIdT=…, count: Optional[int]=…, justid: bool=…) -> ResponseT
  • changed: method StreamCommands.xclaim(name: KeyT, groupname: GroupT, consumername: ConsumerT, min_idle_time: int, message_ids: Union[List[StreamIdT], Tuple[StreamIdT]], idle: Union[int, None]=…, time: Union[int, None]=…, retrycount: Union[int, None]=…, force: bool=…, justid: bool=…) -> ResponseT → method StreamCommands.xclaim(name: KeyT, groupname: GroupT, consumername: ConsumerT, min_idle_time: int, message_ids: Union[List[StreamIdT], Tuple[StreamIdT]], idle: Optional[int]=…, time: Optional[int]=…, retrycount: Optional[int]=…, force: bool=…, justid: bool=…) -> ResponseT
  • changed: method StreamCommands.xpending_range(name: KeyT, groupname: GroupT, min: StreamIdT, max: StreamIdT, count: int, consumername: Union[ConsumerT, None]=…, idle: Union[int, None]=…) -> ResponseT → method StreamCommands.xpending_range(name: KeyT, groupname: GroupT, min: StreamIdT, max: StreamIdT, count: int, consumername: Union[ConsumerT, None]=…, idle: Optional[int]=…) -> ResponseT
  • changed: method StreamCommands.xrange(name: KeyT, min: StreamIdT=…, max: StreamIdT=…, count: Union[int, None]=…) -> ResponseT → method StreamCommands.xrange(name: KeyT, min: StreamIdT=…, max: StreamIdT=…, count: Optional[int]=…) -> ResponseT
  • changed: method StreamCommands.xread(streams: Dict[KeyT, StreamIdT], count: Union[int, None]=…, block: Union[int, None]=…) -> ResponseT → method StreamCommands.xread(streams: Dict[KeyT, StreamIdT], count: Optional[int]=…, block: Optional[int]=…) -> ResponseT
  • changed: method StreamCommands.xreadgroup(groupname: str, consumername: str, streams: Dict[KeyT, StreamIdT], count: Union[int, None]=…, block: Union[int, None]=…, noack: bool=…) -> ResponseT → method StreamCommands.xreadgroup(groupname: str, consumername: str, streams: Dict[KeyT, StreamIdT], count: Optional[int]=…, block: Optional[int]=…, noack: bool=…) -> ResponseT
  • changed: method StreamCommands.xrevrange(name: KeyT, max: StreamIdT=…, min: StreamIdT=…, count: Union[int, None]=…) -> ResponseT → method StreamCommands.xrevrange(name: KeyT, max: StreamIdT=…, min: StreamIdT=…, count: Optional[int]=…) -> ResponseT
  • changed: method StreamCommands.xtrim(name: KeyT, maxlen: Union[int, None]=…, approximate: bool=…, minid: Union[StreamIdT, None]=…, limit: Union[int, None]=…) -> ResponseT → method StreamCommands.xtrim(name: KeyT, maxlen: Optional[int]=…, approximate: bool=…, minid: Union[StreamIdT, None]=…, limit: Optional[int]=…, ref_policy: Optional[Literal['KEEPREF', 'DELREF', 'ACKED']]=…) -> ResponseT
  • added: class HashDataPersistOptions(Enum)
  • added: field HashDataPersistOptions.FNX
  • added: field HashDataPersistOptions.FXX
  • added: method HashCommands.hgetdel(name: str, *keys: str) -> Union[Awaitable[Optional[List[Union[str, bytes]]]], Optional[List[Union[str, bytes]]]]
  • added: method HashCommands.hgetex(name: KeyT, *keys: str, ex: Optional[ExpiryT]=…, px: Optional[ExpiryT]=…, exat: Optional[AbsExpiryT]=…, pxat: Optional[AbsExpiryT]=…, persist: bool=…) -> Union[Awaitable[Optional[List[Union[str, bytes]]]], Optional[List[Union[str, bytes]]]]
  • added: method HashCommands.hsetex(name: str, key: Optional[str]=…, value: Optional[str]=…, mapping: Optional[dict]=…, items: Optional[list]=…, ex: Optional[ExpiryT]=…, px: Optional[ExpiryT]=…, exat: Optional[AbsExpiryT]=…, pxat: Optional[AbsExpiryT]=…, data_persist_option: Optional[HashDataPersistOptions]=…, keepttl: bool=…) -> Union[Awaitable[int], int]
  • added: method StreamCommands.xackdel(name: KeyT, groupname: GroupT, *ids: StreamIdT, ref_policy: Literal['KEEPREF', 'DELREF', 'ACKED']=…) -> ResponseT
  • added: method StreamCommands.xdelex(name: KeyT, *ids: StreamIdT, ref_policy: Literal['KEEPREF', 'DELREF', 'ACKED']=…) -> ResponseT
  • removed: async method AsyncGraph.call_procedure(procedure, *args, read_only=…, **kwagrs)
  • removed: async method AsyncGraph.get_label(idx)
  • removed: async method AsyncGraph.get_property(idx)
  • removed: async method AsyncGraph.get_relation(idx)
  • removed: async method AsyncGraph.labels()
  • removed: async method AsyncGraph.property_keys()
  • removed: async method AsyncGraph.relationship_types()
  • removed: class AsyncGraph(Graph, AsyncGraphCommands)
  • removed: class Graph(GraphCommands)
  • removed: constructor Graph(client, name=…)
  • removed: export AsyncGraphCommands
  • removed: export Edge
  • removed: export GraphCommands
  • removed: export Node
  • removed: export Path
  • removed: export quote_string
  • removed: export random_string
  • removed: export stringify_param_value
  • removed: method Graph.add_edge(edge)
  • removed: method Graph.add_node(node)
  • removed: method Graph.call_procedure(procedure, *args, read_only=…, **kwagrs)
  • removed: method Graph.get_label(idx)
  • removed: method Graph.get_property(idx)
  • removed: method Graph.get_relation(idx)
  • removed: method Graph.labels()
  • removed: method Graph.property_keys()
  • removed: method Graph.relationship_types()
  • removed: property Graph.name
  • removed: variable DB_LABELS
  • removed: variable DB_PROPERTYKEYS
  • removed: variable DB_RAELATIONSHIPTYPES
  • removed: async method AsyncGraphCommands.execution_plan(query, params=…)
  • removed: async method AsyncGraphCommands.explain(query, params=…)
  • removed: async method AsyncGraphCommands.flush()
  • removed: async method AsyncGraphCommands.query(q, params=…, timeout=…, read_only=…, profile=…)
  • removed: class AsyncGraphCommands(GraphCommands)
  • removed: class GraphCommands
  • removed: method GraphCommands.bulk(**kwargs)
  • removed: method GraphCommands.commit()
  • removed: method GraphCommands.config(name, value=…, set=…)
  • removed: method GraphCommands.delete()
  • removed: method GraphCommands.execution_plan(query, params=…)
  • removed: method GraphCommands.explain(query, params=…)
  • removed: method GraphCommands.flush()
  • removed: method GraphCommands.list_keys()
  • removed: method GraphCommands.merge(pattern)
  • removed: method GraphCommands.profile(query)
  • removed: method GraphCommands.query(q, params=…, timeout=…, read_only=…, profile=…)
  • removed: method GraphCommands.slowlog()
  • removed: variable CONFIG_CMD
  • removed: variable DELETE_CMD
  • removed: variable EXPLAIN_CMD
  • removed: variable LIST_CMD
  • removed: variable PROFILE_CMD
  • removed: variable QUERY_CMD
  • removed: variable RO_QUERY_CMD
  • removed: variable SLOWLOG_CMD
  • removed: class Edge
  • removed: constructor Edge(src_node, relation, dest_node, edge_id=…, properties=…)
  • removed: method Edge.to_string()
  • removed: class VersionMismatchException(Exception)
  • removed: constructor VersionMismatchException(version)
  • removed: class ExecutionPlan
  • removed: class Operation
  • removed: class ProfileStats
  • removed: constructor ExecutionPlan(plan)
  • removed: constructor Operation(name, args=…, profile_stats=…)
  • removed: constructor ProfileStats(records_produced, execution_time)
  • removed: method Operation.append_child(child)
  • removed: method Operation.child_count()
  • removed: class Node
  • removed: constructor Node(node_id=…, alias=…, label=…, properties=…)
  • removed: method Node.to_string()
  • removed: class Path
  • removed: constructor Path(nodes, edges)
  • removed: method Path.add_edge(edge)
  • removed: method Path.add_node(node)
  • removed: method Path.edge_count()
  • removed: method Path.edges()
  • removed: method Path.first_node()
  • removed: method Path.get_node(index)
  • removed: method Path.get_relationship(index)
  • removed: method Path.last_node()
  • removed: method Path.nodes()
  • removed: method Path.nodes_count()
  • removed: static method Path.new_empty_path()
  • removed: async method AsyncQueryResult.initialize(graph, response, profile=…)
  • removed: async method AsyncQueryResult.parse_array(value)
  • removed: async method AsyncQueryResult.parse_edge(cell)
  • removed: async method AsyncQueryResult.parse_entity_properties(props)
  • removed: async method AsyncQueryResult.parse_map(cell)
  • removed: async method AsyncQueryResult.parse_node(cell)
  • removed: async method AsyncQueryResult.parse_path(cell)
  • removed: async method AsyncQueryResult.parse_records(raw_result_set)
  • removed: async method AsyncQueryResult.parse_results(raw_result_set)
  • removed: async method AsyncQueryResult.parse_scalar(cell)
  • removed: class AsyncQueryResult(QueryResult)
  • removed: class QueryResult
  • removed: class ResultSetColumnTypes
  • removed: class ResultSetScalarTypes
  • removed: constructor AsyncQueryResult()
  • removed: constructor QueryResult(graph, response, profile=…)
  • removed: field ResultSetColumnTypes.COLUMN_NODE
  • removed: field ResultSetColumnTypes.COLUMN_RELATION
  • removed: field ResultSetColumnTypes.COLUMN_SCALAR
  • removed: field ResultSetColumnTypes.COLUMN_UNKNOWN
  • removed: field ResultSetScalarTypes.VALUE_ARRAY
  • removed: field ResultSetScalarTypes.VALUE_BOOLEAN
  • removed: field ResultSetScalarTypes.VALUE_DOUBLE
  • removed: field ResultSetScalarTypes.VALUE_EDGE
  • removed: field ResultSetScalarTypes.VALUE_INTEGER
  • removed: field ResultSetScalarTypes.VALUE_MAP
  • removed: field ResultSetScalarTypes.VALUE_NODE
  • removed: field ResultSetScalarTypes.VALUE_NULL
  • removed: field ResultSetScalarTypes.VALUE_PATH
  • removed: field ResultSetScalarTypes.VALUE_POINT
  • removed: field ResultSetScalarTypes.VALUE_STRING
  • removed: field ResultSetScalarTypes.VALUE_UNKNOWN
  • removed: function strtobool(val)
  • removed: method QueryResult.is_empty()
  • removed: method QueryResult.parse_array(value)
  • removed: method QueryResult.parse_boolean(value)
  • removed: method QueryResult.parse_double(cell)
  • removed: method QueryResult.parse_edge(cell)
  • removed: method QueryResult.parse_entity_properties(props)
  • removed: method QueryResult.parse_header(raw_result_set)
  • removed: method QueryResult.parse_integer(cell)
  • removed: method QueryResult.parse_map(cell)
  • removed: method QueryResult.parse_node(cell)
  • removed: method QueryResult.parse_null(cell)
  • removed: method QueryResult.parse_path(cell)
  • removed: method QueryResult.parse_point(cell)
  • removed: method QueryResult.parse_profile(response)
  • removed: method QueryResult.parse_records(raw_result_set)
  • removed: method QueryResult.parse_results(raw_result_set)
  • removed: method QueryResult.parse_scalar(cell)
  • removed: method QueryResult.parse_statistics(raw_statistics)
  • removed: method QueryResult.parse_string(cell)
  • removed: method QueryResult.parse_unknown(cell)
  • removed: property QueryResult.cached_execution
  • removed: property QueryResult.indices_created
  • removed: property QueryResult.indices_deleted
  • removed: property QueryResult.labels_added
  • removed: property QueryResult.labels_removed
  • removed: property QueryResult.nodes_created
  • removed: property QueryResult.nodes_deleted
  • removed: property QueryResult.parse_record_types
  • removed: property QueryResult.parse_scalar_types
  • removed: property QueryResult.properties_removed
  • removed: property QueryResult.properties_set
  • removed: property QueryResult.relationships_created
  • removed: property QueryResult.relationships_deleted
  • removed: property QueryResult.run_time_ms
  • removed: variable CACHED_EXECUTION
  • removed: variable INDICES_CREATED
  • removed: variable INDICES_DELETED
  • removed: variable INTERNAL_EXECUTION_TIME
  • removed: variable LABELS_ADDED
  • removed: variable LABELS_REMOVED
  • removed: variable NODES_CREATED
  • removed: variable NODES_DELETED
  • removed: variable PROPERTIES_REMOVED
  • removed: variable PROPERTIES_SET
  • removed: variable RELATIONSHIPS_CREATED
  • removed: variable RELATIONSHIPS_DELETED
  • removed: variable STATS
  • removed: function parse_to_dict(response)
  • removed: function quote_string(v)
  • removed: function stringify_param_value(value)
  • changed: method JSONCommands.arrappend(name: str, path: Optional[str]=…, *args: List[JsonType]) -> List[Union[int, None]] → method JSONCommands.arrappend(name: str, path: Optional[str]=…, *args: List[JsonType]) -> List[Optional[int]]
  • changed: method JSONCommands.arrindex(name: str, path: str, scalar: int, start: Optional[int]=…, stop: Optional[int]=…) -> List[Union[int, None]] → method JSONCommands.arrindex(name: str, path: str, scalar: int, start: Optional[int]=…, stop: Optional[int]=…) -> List[Optional[int]]
  • changed: method JSONCommands.arrinsert(name: str, path: str, index: int, *args: List[JsonType]) -> List[Union[int, None]] → method JSONCommands.arrinsert(name: str, path: str, index: int, *args: List[JsonType]) -> List[Optional[int]]
  • changed: method JSONCommands.arrlen(name: str, path: Optional[str]=…) -> List[Union[int, None]] → method JSONCommands.arrlen(name: str, path: Optional[str]=…) -> List[Optional[int]]
  • changed: method JSONCommands.arrpop(name: str, path: Optional[str]=…, index: Optional[int]=…) -> List[Union[str, None]] → method JSONCommands.arrpop(name: str, path: Optional[str]=…, index: Optional[int]=…) -> List[Optional[str]]
  • changed: method JSONCommands.arrtrim(name: str, path: str, start: int, stop: int) -> List[Union[int, None]] → method JSONCommands.arrtrim(name: str, path: str, start: int, stop: int) -> List[Optional[int]]
  • changed: method JSONCommands.objkeys(name: str, path: Optional[str]=…) -> List[Union[List[str], None]] → method JSONCommands.objkeys(name: str, path: Optional[str]=…) -> List[Optional[List[str]]]
  • changed: method JSONCommands.strlen(name: str, path: Optional[str]=…) -> List[Union[int, None]] → method JSONCommands.strlen(name: str, path: Optional[str]=…) -> List[Optional[int]]
  • removed: method AsyncRedisModuleCommands.graph(index_name=…)
  • removed: method RedisModuleCommands.graph(index_name=…)
  • changed: method AsyncRedisModuleCommands.ft(index_name=…) → method AsyncRedisModuleCommands.ft(index_name=…) -> AsyncSearch
  • changed: method RedisModuleCommands.bf() → method RedisModuleCommands.bf() -> BFBloom
  • changed: method RedisModuleCommands.cf() → method RedisModuleCommands.cf() -> CFBloom
  • changed: method RedisModuleCommands.cms() → method RedisModuleCommands.cms() -> CMSBloom
  • changed: method RedisModuleCommands.ft(index_name=…) → method RedisModuleCommands.ft(index_name=…) -> Search
  • changed: method RedisModuleCommands.json(encoder=…, decoder=…) → method RedisModuleCommands.json(encoder=…, decoder=…) -> JSON
  • changed: method RedisModuleCommands.tdigest() → method RedisModuleCommands.tdigest() -> TDigestBloom
  • changed: method RedisModuleCommands.topk() → method RedisModuleCommands.topk() -> TOPKBloom
  • changed: method RedisModuleCommands.ts() → method RedisModuleCommands.ts() -> TimeSeries
  • added: method RedisModuleCommands.vset() -> VectorSet
  • changed: constructor Reducer(*args: List[str]) -> None → constructor Reducer(*args: str) -> None
  • changed: method AggregateRequest.load(*fields: List[str]) -> AggregateRequest → method AggregateRequest.load(*fields: str) -> AggregateRequest
  • changed: method AggregateRequest.sort_by(*fields: List[str], **kwargs) -> AggregateRequest → method AggregateRequest.sort_by(*fields: str, **kwargs) -> AggregateRequest
  • removed: variable DROP_CMD
  • removed: variable GET_CMD
  • changed: async method AsyncSearchCommands.aggregate(query: Union[str, Query], query_params: Dict[str, Union[str, int, float]]=…) → async method AsyncSearchCommands.aggregate(query: Union[AggregateResult, Cursor], query_params: Dict[str, Union[str, int, float]]=…)
  • changed: method SearchCommands.aggregate(query: Union[str, Query], query_params: Dict[str, Union[str, int, float]]=…) → method SearchCommands.aggregate(query: Union[AggregateRequest, Cursor], query_params: Dict[str, Union[str, int, float]]=…)
  • changed: method SearchCommands.profile(query: Union[str, Query, AggregateRequest], limited: bool=…, query_params: Optional[Dict[str, Union[str, int, float]]]=…) → method SearchCommands.profile(query: Union[Query, AggregateRequest], limited: bool=…, query_params: Optional[Dict[str, Union[str, int, float]]]=…)
  • added: variable DEFAULT_DIALECT
  • removed: class IndexDefinition
  • removed: class IndexType(Enum)
  • removed: constructor IndexDefinition(prefix=…, filter=…, language_field=…, language=…, score_field=…, score=…, payload_field=…, index_type=…)
  • removed: field IndexType.HASH
  • removed: field IndexType.JSON
  • added: class IndexDefinition
  • added: class IndexType(Enum)
  • added: constructor IndexDefinition(prefix=…, filter=…, language_field=…, language=…, score_field=…, score=…, payload_field=…, index_type=…)
  • added: field IndexType.HASH
  • added: field IndexType.JSON
  • added: class ProfileInformation
  • added: constructor ProfileInformation(info: Any) -> None
  • added: property ProfileInformation.info -> Any
  • changed: method SentinelCommands.sentinel_get_master_addr_by_name(service_name) → method SentinelCommands.sentinel_get_master_addr_by_name(service_name, return_responses=…)
  • changed: method SentinelCommands.sentinel_master(service_name) → method SentinelCommands.sentinel_master(service_name, return_responses=…)
  • changed: method SentinelCommands.sentinel_sentinels(service_name) → method SentinelCommands.sentinel_sentinels(service_name, return_responses=…)
  • added: class VectorSet(VectorSetCommands)
  • added: constructor VectorSet(client, **kwargs)
  • added: export VEMB_CMD
  • added: export VGETATTR_CMD
  • added: export VINFO_CMD
  • added: export VLINKS_CMD
  • added: export VSIM_CMD
  • added: export VectorSetCommands
  • added: export get_protocol_version
  • added: export pairs_to_dict
  • added: export parse_vemb_result
  • added: export parse_vlinks_result
  • added: export parse_vsim_result
  • added: class CallbacksOptions(Enum)
  • added: class QuantizationOptions(Enum)
  • added: class VectorSetCommands(CommandsProtocol)
  • added: field CallbacksOptions.ALLOW_DECODING
  • added: field CallbacksOptions.RAW
  • added: field CallbacksOptions.RESP3
  • added: field CallbacksOptions.WITHSCORES
  • added: field QuantizationOptions.BIN
  • added: field QuantizationOptions.NOQUANT
  • added: field QuantizationOptions.Q8
  • added: method VectorSetCommands.vadd(key: KeyT, vector: Union[List[float], bytes], element: str, reduce_dim: Optional[int]=…, cas: Optional[bool]=…, quantization: Optional[QuantizationOptions]=…, ef: Optional[Number]=…, attributes: Optional[Union[dict, str]]=…, numlinks: Optional[int]=…) -> Union[Awaitable[int], int]
  • added: method VectorSetCommands.vcard(key: KeyT) -> Union[Awaitable[int], int]
  • added: method VectorSetCommands.vdim(key: KeyT) -> Union[Awaitable[int], int]
  • added: method VectorSetCommands.vemb(key: KeyT, element: str, raw: Optional[bool]=…) -> Union[Awaitable[Optional[Union[List[EncodableT], Dict[str, EncodableT]]]], Optional[Union[List[EncodableT], Dict[str, EncodableT]]]]
  • added: method VectorSetCommands.vgetattr(key: KeyT, element: str) -> Union[Optional[Awaitable[dict]], Optional[dict]]
  • added: method VectorSetCommands.vinfo(key: KeyT) -> Union[Awaitable[dict], dict]
  • added: method VectorSetCommands.vlinks(key: KeyT, element: str, with_scores: Optional[bool]=…) -> Union[Awaitable[Optional[List[Union[List[Union[str, bytes]], Dict[Union[str, bytes], Number]]]]], Optional[List[Union[List[Union[str, bytes]], Dict[Union[str, bytes], Number]]]]]
  • added: method VectorSetCommands.vrandmember(key: KeyT, count: Optional[int]=…) -> Union[Awaitable[Optional[Union[List[str], str]]], Optional[Union[List[str], str]]]
  • added: method VectorSetCommands.vrem(key: KeyT, element: str) -> Union[Awaitable[int], int]
  • added: method VectorSetCommands.vsetattr(key: KeyT, element: str, attributes: Optional[Union[dict, str]]=…) -> Union[Awaitable[int], int]
  • added: method VectorSetCommands.vsim(key: KeyT, input: Union[List[float], bytes, str], with_scores: Optional[bool]=…, count: Optional[int]=…, ef: Optional[Number]=…, filter: Optional[str]=…, filter_ef: Optional[str]=…, truth: Optional[bool]=…, no_thread: Optional[bool]=…, epsilon: Optional[Number]=…) -> Union[Awaitable[Optional[List[Union[List[EncodableT], Dict[EncodableT, Number]]]]], Optional[List[Uni…
  • added: variable VADD_CMD
  • added: variable VCARD_CMD
  • added: variable VDIM_CMD
  • added: variable VEMB_CMD
  • added: variable VGETATTR_CMD
  • added: variable VINFO_CMD
  • added: variable VLINKS_CMD
  • added: variable VRANDMEMBER_CMD
  • added: variable VREM_CMD
  • added: variable VSETATTR_CMD
  • added: variable VSIM_CMD
  • added: function parse_vemb_result(response, **options)
  • added: function parse_vlinks_result(response, **options)
  • added: function parse_vsim_result(response, **options)
  • changed: constructor CacheProxyConnection(conn: ConnectionInterface, cache: CacheInterface, pool_lock: threading.Lock) → constructor CacheProxyConnection(conn: ConnectionInterface, cache: CacheInterface, pool_lock: threading.RLock)
  • changed: method AbstractConnection.get_protocol() -> int or str → method AbstractConnection.get_protocol() -> Union[int, str]
  • added: method AbstractConnection.connect_check_health(check_health: bool=…, retry_socket_connect: bool=…)
  • added: method AbstractConnection.on_connect_check_health(check_health: bool=…)
  • added: variable ssl
  • removed: property AfterPubSubConnectionInstantiationEvent.connection_lock -> Union[threading.Lock, asyncio.Lock]
  • removed: property AfterSingleConnectionInstantiationEvent.connection_lock -> Union[threading.Lock, asyncio.Lock]
  • changed: constructor AfterPubSubConnectionInstantiationEvent(pubsub_connection, connection_pool, client_type: ClientType, connection_lock: Union[threading.Lock, asyncio.Lock]) → constructor AfterPubSubConnectionInstantiationEvent(pubsub_connection, connection_pool, client_type: ClientType, connection_lock: Union[threading.RLock, asyncio.Lock])
  • changed: constructor AfterSingleConnectionInstantiationEvent(connection, client_type: ClientType, connection_lock: Union[threading.Lock, asyncio.Lock]) → constructor AfterSingleConnectionInstantiationEvent(connection, client_type: ClientType, connection_lock: Union[threading.RLock, asyncio.Lock])
  • added: property AfterPubSubConnectionInstantiationEvent.connection_lock -> Union[threading.RLock, asyncio.Lock]
  • added: property AfterSingleConnectionInstantiationEvent.connection_lock -> Union[threading.RLock, asyncio.Lock]
  • added: class CrossSlotTransactionError(RedisClusterException)
  • added: class InvalidPipelineStack(RedisClusterException)
  • changed: constructor Lock(redis, name: str, timeout: Optional[Number]=…, sleep: Number=…, blocking: bool=…, blocking_timeout: Optional[Number]=…, thread_local: bool=…) → constructor Lock(redis, name: str, timeout: Optional[Number]=…, sleep: Number=…, blocking: bool=…, blocking_timeout: Optional[Number]=…, thread_local: bool=…, raise_on_release_error: bool=…)
  • changed: method Lock.do_extend(additional_time: int, replace_ttl: bool) -> bool → method Lock.do_extend(additional_time: Number, replace_ttl: bool) -> bool
  • changed: method Lock.extend(additional_time: int, replace_ttl: bool=…) -> bool → method Lock.extend(additional_time: Number, replace_ttl: bool=…) -> bool
  • added: variable logger
  • removed: method Retry.update_supported_errors(specified_errors: Iterable[Type[Exception]]) -> None
  • changed: class Retry → class Retry(AbstractRetry[Exception])
  • added: class AbstractRetry(Generic[E], abc.ABC)
  • added: constructor AbstractRetry(backoff: AbstractBackoff, retries: int, supported_errors: Tuple[Type[E], ...])
  • added: method AbstractRetry.get_retries() -> int
  • added: method AbstractRetry.update_retries(value: int) -> None
  • added: method AbstractRetry.update_supported_errors(specified_errors: Iterable[Type[E]]) -> None
  • added: variable E
  • removed: field CommandsProtocol.connection_pool: Union[AsyncConnectionPool, ConnectionPool]
  • changed: function deprecated_args(args_to_warn: list=…, allowed_args: list=…, reason: str=…, version: str=…) → function deprecated_args(args_to_warn: list=…, allowed_args: list=…, reason: str=…, version: str=…) -> Callable[[C], C]
  • added: function extract_expire_flags(ex: Optional[ExpiryT]=…, px: Optional[ExpiryT]=…, exat: Optional[AbsExpiryT]=…, pxat: Optional[AbsExpiryT]=…) -> List[EncodableT]
  • added: function truncate_text(txt, max_length=…)
  • added: variable C
  • added: variable hiredis_version