NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #140 most downloaded on PyPI
Python client for Redis database and key-value store
Last release 2 months ago
30 Jul 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
169 releases · first in 2012
Async maintenance notifications
redis-py now supports server-pushed maintenance notifications in the asyncio stack for both
standalone and cluster clients, bringing the async client to parity with the sync implementation.
When a Redis deployment signals maintenance events (such as node migration or failover windows), the
async client reacts through the maintenance-notifications handler (redis/maint_notifications.py and
its async integration under redis/asyncio/), allowing applications to adapt connection handling
during maintenance without downtime. (#4177)
This release adds a batch of new command surfaces across core data types and modules:
LMOVEM / BLMOVEM for moving multiple elements between lists (#4174).SDIFFCARD and SUNIONCARD cardinality commands (#4171).MAXCOUNT / MAXSIZE options for XREAD and XREADGROUP (#4173).TS.READ (#4170), TS.QUERYLABELS (#4197), TS.NRANGE / TS.NREVRANGE (#4163),exclude_empty (EXCLUDEEMPTY) option for TS.MRANGE / TS.MREVRANGE (#4188).FT.ALIASLIST (#4198) and a COLLECT reducer for aggregations (#4179).The feature considered unstable and public API might be changed in the future minor version
We'd like to thank all the contributors who worked on this release!
@LOGESHWAR123 @kiryazovi-redis @Stunned1 @eeshsaxena @sean-kim05 @Brumbelow @Sanjays2402 @nazarli-shabnam @chuenchen309 @petyaslavova
One column per quarter.
Fix Unix socket maintenance notification handling and tests
We'd like to thank all the contributors who worked on this release!
@violuke @mokashang @arpitjain099 @coredumperror @elena-kolevska @vladvildanov @petyaslavova
Updating dependencies to fix reported vulnerabilities
This release introduces full asyncio Cluster PubSub support, bringing shard-channel capabilities (SSUBSCRIBE, SUNSUBSCRIBE, SPUBLISH) to the async RedisCluster client. The new ClusterPubSub class in redis.asyncio.cluster automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via RedisCluster.pubsub() and use ssubscribe(), sunsubscribe(), and get_sharded_message() just as they would with the sync cluster client.
Redis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — KeyspaceNotifications, ClusterKeyspaceNotifications, AsyncKeyspaceNotifications, and AsyncClusterKeyspaceNotifications — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: subkeyspace, subkeyevent, subkeyspaceitem, and subkeyspaceevent. Convenience methods like subscribe_keyspace(), subscribe_keyevent(), subscribe_subkeyspace(), subscribe_subkeyevent(), subscribe_subkeyspaceitem(), and subscribe_subkeyspaceevent() simplify common patterns, with channel classes for both key and subkey channels.
In cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync run_in_thread() and async listen() workflows are supported.
redis-py now supports Redis Arrays, a preview Redis data type for sparse, index-addressable sequences of strings. New AR* command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including ARGET, ARSET, ARMGET, ARMSET, ARSCAN, ARGREP, ARRING, and AROP.
The @overload pattern has been applied systematically across core commands (core.py), VectorSet commands, and module commands (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined ResponseT (i.e., Union[Awaitable[Any], Any]), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., int, bool, list[str]) while async clients see Awaitable[...] wrappers. This is a breaking change for type-checking only—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, SyncClientProtocol and AsyncClientProtocol, are used in overload signatures to enable this distinction.
redis-py 8.0.0 now uses RESP3 on the wire by default while preserving legacy RESP2-compatible Python response shapes for existing applications (#4052). Protocol-independent unified response shapes are available by setting legacy_responses=False, so affected commands return the same Python structure with RESP2 or RESP3.
Use protocol=2 to force RESP2 on the wire, protocol=3 to opt into native RESP3 response shapes, or legacy_responses=False to migrate to unified responses. See docs/unified_responses.rst and specs/unified_responses_migration_guide.md for the affected commands and migration details.
Default connection settings were updated: socket_timeout and socket_connect_timeout now default to 5 seconds, TCP keepalive is enabled by default, socket reads use a 32 KB buffer, connection pools default to max_connections=100, and retry defaults now use 10 attempts with exponential jitter backoff.
Note: socket_timeout can affect blocking commands such as BLPOP/BRPOP; if a command blocks longer than the client socket timeout, it may raise TimeoutError before the command timeout elapses (#2807).
We'd like to thank all the contributors who worked on this release!
@hydroblaze @Br1an67 @mokashang @swoutch @armorbreak001 @Brumbelow @paoloredis @Pack-Yak1 @abersheeran @alisaifee @majiayu000 @uglide @dmaier-redislabs @vladvildanov @petyaslavova
Unified command response types across RESP2 and RESP3 protocols
In this release, the command response types across RESP2 and RESP3 protocols are unified, ensuring that the same command returns the same Python type and structure regardless of which protocol version is in use — eliminating the need for protocol-specific branching in application code (#4025). Approximately 84 commands are affected across core Redis, Search, JSON, TimeSeries, and Probabilistic modules. Additionally, the default protocol has been changed from RESP2 to RESP3 for all Redis clients and connections, enabling richer native types (maps, sets, doubles, booleans) and improved performance out of the box (#4031).
These changes are breaking relative to redis-py 7.x and earlier, so users upgrading should carefully review the migration guide. For a complete list of affected commands and updated response formats, see docs/resp_unification.rst and the detailed migration guide at specs/resp2_resp3_migration_guide.md.
Users who need to retain the previous default protocol configuration can explicitly set protocol=2 when creating their client or connection.
We'd like to thank all the contributors who worked on this release!
@Pack-Yak1 @petyaslavova
Updating dependencies to fix reported vulnerabilities
This release introduces full asyncio Cluster PubSub support, bringing shard-channel capabilities (SSUBSCRIBE, SUNSUBSCRIBE, SPUBLISH) to the async RedisCluster client. The new ClusterPubSub class in redis.asyncio.cluster automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via RedisCluster.pubsub() and use ssubscribe(), sunsubscribe(), and get_sharded_message() just as they would with the sync cluster client.
Alongside this, Redis Keyspace Notifications are now supported for both standalone and cluster deployments, in both sync and async modes. New classes—KeyspaceNotifications, ClusterKeyspaceNotifications, AsyncKeyspaceNotifications, and AsyncClusterKeyspaceNotifications—provide a high-level API for subscribing to keyspace and keyevent channels. In cluster mode, notifications are automatically subscribed across all primary nodes (since each node only emits notifications for keys it owns), with built-in topology-change handling. Convenience methods like subscribe_keyspace(), subscribe_keyevent(), and channel classes (KeyspaceChannel, KeyeventChannel) simplify common subscription patterns. Both sync run_in_thread() and async listen() workflows are supported.
The @overload pattern has been applied systematically across core commands (core.py), VectorSet commands, and module commands (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined ResponseT (i.e., Union[Awaitable[Any], Any]), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., int, bool, list[str]) while async clients see Awaitable[...] wrappers. This is a breaking change for type-checking only—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, SyncClientProtocol and AsyncClientProtocol, are used in overload signatures to enable this distinction.
We'd like to thank all the contributors who worked on this release!
@abersheeran @alisaifee @majiayu000 @dmaier-redislabs @vladvildanov @petyaslavova
Addressing dependency vulnerabilities and flaky test fixes ( source diff )
We'd like to thank all the contributors who worked on this release!
@elena-kolevska @vladvildanov @petyaslavova
Fix AttributeError in cluster metrics recording when connection is None or ClusterNode object instance is used to extract the connection info
We'd like to thank all the contributors who worked on this release! @vladvildanov @petyaslavova
Addressing dependency vulnerabilities and flaky test fixes ( source diff )
We'd like to thank all the contributors who worked on this release!
@elena-kolevska @vladvildanov @petyaslavova
OpenTelemetry Native Metrics Support for asynchronous clients Added comprehensive OpenTelemetry metrics support for asynchronous clients following the
OpenTelemetry Native Metrics Support for asynchronous clients Added comprehensive OpenTelemetry metrics support for asynchronous clients following the OpenTelemetry Database Client Semantic Conventions. Metric groups include:
We'd like to thank all the contributors who worked on this release! @mitre88 @turanalmammadov @haosenwang1018 @Medno @vladvildanov @petyaslavova
Addressing dependency vulnerabilities and flaky test fixes ( source diff )
We'd like to thank all the contributors who worked on this release!
@elena-kolevska @vladvildanov @petyaslavova
Handle connection attributes conditionally for metrics and set connection data on exceptions in cluster error handling
We'd like to thank all the contributors who worked on this release! @dotlambda @rhoboro @skylarkoo7 @praboud @bysiber @vladvildanov @petyaslavova
Adding special handling of client_tracking_on and client_tracking_off for cluster clients. Marking those two functions as deprecated for cluster - emb…
Redis 8.6 Support Added support for Redis 8.6, including new commands and features for streams idempotent production and HOTKEYS.
Smart Client Handoff (Maintenance Notifications) for Cluster note: Pending a Redis Enterprise version release
This release introduces comprehensive support for Redis Enterprise Cluster maintenance notifications via SMIGRATING/SMIGRATED push notifications. The client now automatically handles slot migrations by:
Relaxing timeouts during migration (SMIGRATING) to prevent false failures Triggering cluster state reloads upon completion (SMIGRATED) Enabling seamless operations during Redis Enterprise maintenance windows
OpenTelemetry Native Metrics Support Added comprehensive OpenTelemetry metrics support following the OpenTelemetry Database Client Semantic Conventions. Metric groups include:
We'd like to thank all the contributors who worked on this release! @veeceey @dariaguy @Nepomuk5665 @praboud @Timour-Ilyas @barshaul @devbyteai @itssimon @majiayu000 @aveao @s-t-e-v-e-n-k @cheizdo2-art @Jonathan-Landeed @PeterJCLaw @ShubhamKaudewar @vchomakov @dmaier-redislabs @elena-kolevska @vladvildanov @petyaslavova
Added initial health check policies, refactored add_database method
We'd like to thank all the contributors who worked on this release! @vladvildanov
Adding CLAIM option to XREADGROUP command + unit tests
We'd like to thank all the contributors who worked on this release! @ShubhamKaudewar @matthewwiese @peperon @vladvildanov @petyaslavova
This release adds small fixes related to documentation.
This release adds small fixes related to documentation.
We'd like to thank all the contributors who worked on this release! @dmaier @petyaslavova
One of the main features introduced in this release is a new type of client MultiDBClient. The purpose of this client is a communication with multiple
One of the main features introduced in this release is a new type of client MultiDBClient. The purpose of this client is a communication with multiple databases that are eventually consistent (Active-Active setup) and handling failures by failover across databases.
More information could be found in docs.
We'd like to thank all the contributors who worked on this release! @scovetta @mengxunQAQ @abrookins @VincentHokie @sobolevn @hunterhogan @luka-mikec @zion-off @peperon @andy-stark-redis @uglide @elena-kolevska @kiryazovi-redis @vladvildanov @petyaslavova
Main feature introduced in this beta release is a new type of client MultiDBClient. The purpose of this client is a communication with multiple databa
Main feature introduced in this beta release is a new type of client MultiDBClient. The purpose of this client is a communication with multiple databases that are eventually consistent (Active-Active setup) and handling failures by failover across databases.
More information could be found in docs.
We'd like to thank all the contributors who worked on this release! @zion-off @petyaslavova @kiryazovi-redis @vladvildanov
Adding ssl_verify_flags_config argument for ssl connection configuration
We'd like to thank all the contributors who worked on this release! @petyaslavova @elena-kolevska @andy-stark-redis
Support for maintenance push notifications handling during server upgrade or maintenance procedures.
We'd like to thank all the contributors who worked on this release! @scovetta @mengxunQAQ @abrookins @VincentHokie @sobolevn @hunterhogan @luka-mikec @elena-kolevska @kiryazovi-redis @petyaslavova
Added epsilon property to the vsim command
We'd like to thank all the contributors who worked on this release! @htemelski-redis @elena-kolevska @petyaslavova @vladvildanov
Annotate deprecated_args decorator to preserve wrapped function type signature
We'd like to thank all the contributors who worked on this release! @robertosantamaria-scopely @mahigupta @alisaifee @tzongw @earonesty @IlianIliev @ofekshenawa @andy-stark-redis @AmirHossein81Gholami @mharding-hpe @git-hulk @ngabhanenetskope @terencehonles @ManelCoutinhoSensei @petyaslavova @vladvildanov
Add dynamic_startup_nodes parameter to async RedisCluster
dynamic_startup_nodes parameter to async RedisCluster (#3646)hiredis-py parser (#3648)RedisCluster client (#3649)check_hostname when instantiating RedisSSLContext (#3655)__del__ call (#3654)search_json_examples.ipynb: Fix the old import indexDefinition -> index_definition (#3652)Python 3.8 support as it has reached end of life (#3657)We'd like to thank all the contributors who worked on this release! @JCornat @ShubhamKaudewar @uglide @petyaslavova @vladvildanov
Revert wrongly changed default value for check_hostname when instantiating RedisSSLContext
check_hostname when instantiating RedisSSLContext (#3655)__del__ call (#3654)We'd like to thank all the contributors who worked on this release! @vladvildanov @petyaslavova
…has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the curr…
RedisCluster client (#3611)Retry and backoff classes (#3628)ssl_check_hostname not set to connections. For SSL verification with ssl_cert_reqs="none", check_hostname is set to False (#3637)
Important: The default value for the check_hostname field of RedisSSLContext has been changed as part of this PR - this is a breaking change and should not be introduced in minor versions - unfortunately, it is part of the current release.
The breaking change is reverted in the next release to fix the behavior --> 6.2.0Retry and backoff classes (#3628) - fixes integration with Django RQAttributeError on ClusterPipeline (#3634)REDIS_MAJOR_VERSION correctly in run-tests (#3642)hiredis-py-integration.yaml (#3641)RedisModuleCommands class (#3632)None args or return types to be annotated with Optional - includes commands in core.py and json commands (#3610)A big thank you to our collaborators at Scopely for their valuable contributions to this release! Your support and improvements help move the project forward — we appreciate it!
We'd like to thank all the contributors who worked on this release! @robertosantamaria-scopely @sentrivana @terencehonles @kesha1225 @aberres @uglide @omerfeyzioglu @petyaslavova @vladvildanov @andy-stark-redis
Argument 'cluster_error_retry_attempts' is now deprecated
retry object becomes mandatory.
We'd like to thank all the contributors who worked on this release! @elena-kolevska @petyaslavova @vladvildanov @andy-stark-redis @JimNero009 @donbowman @julianolm @666romeo @three-kinds @bssyousefi @mbilski @Yard1 @bacchuswng @noirbee @nbertram @birthdaysgift @Perlence @excitoon @dimbleby @shenxiangzhuang @paololazzari @dwdougherty @niklasbec @byeongjulee222 @befeleme @djroze @BaseMax @dicej @akx @cavemanpi @lattwood @rbs333 @rohansingh @allrob23
Adding VectorSet commands support. #3584
We'd like to thank all the contributors who worked on this release!
@excitoon, @lattwood, @rbs333, @rohansingh, @allrob23, @paololazzari, @petyaslavova, @vladvildanov, @elena-kolevska
Removing support for RedisGears module. (#3553). For more info you can check the deprecated Redis features
We'd like to thank all the contributors who worked on this release! @vladvildanov @petyaslavova @JimNero009 @donbowman @julianolm @666romeo @three-kinds @bssyousefi @mbilski @Yard1 @bacchuswng @noirbee @nbertram @birthdaysgift @Perlence @excitoon @dimbleby @shenxiangzhuang @paololazzari @andy-stark-redis @dwdougherty @niklasbec @byeongjulee222 @befeleme @djroze @BaseMax @dicej @akx @cavemanpi
Allow newer PyJWT versions for branch 5.3
We'd like to thank all the contributors who worked on this release! @bcmills
Deprecating unused arguments in connection pools's get_connection functions(#3517 #3625)
Token-based authentication:
New StreamingCredentialProvider interface was added with an idea to integrate redis-py with credential providers that stream an events that should be handled by given listeners.
Check the documentation for the quick start guide.
CredentialProvider instance creation interface was enhanced. Feel free to check the updated documentation
Other features:
We'd like to thank all the contributors who worked on this release!
@uglide @woutdenolf @vladvildanov @hauntsaninja @dwdougherty @patrick91 @Vulwsztyn @JimNero009 @andy-stark-redis @petyaslavova
CredentialProvider instance creation interface was enhanced. Feel free to check the updated documentation
Token-based authentication:
CredentialProvider instance creation interface was enhanced. Feel free to check the updated documentation
We'd like to thank all the contributors who worked on this release!
@petyaslavova @andy-stark-redis @hauntsaninja @dwdougherty @patrick91 @Vulwsztyn @vladvildanov
Includes Token-based authentication feature from previous beta. Check release notes
Includes Token-based authentication feature from previous beta. Check release notes
We'd like to thank all the contributors who worked on this release!
@woutdenolf @vladvildanov
Added StreamingCredentialProvider interface
Token-based authentication:
New StreamingCredentialProvider interface was added with an idea to integrate redis-py with credential providers that stream an events that should be handled by given listeners.
Check the documentation for the quick start guide.
We'd like to thank all the contributors who worked on this release!
@vladvildanov
Added StreamingCredentialProvider interface
Token-based authentication:
New StreamingCredentialProvider interface was added with an idea to integrate redis-py with credential providers that stream an events that should be handled by given listeners.
Check the documentation for the quick start guide.
We'd like to thank all the contributors who worked on this release!
@uglide @vladvildanov
Fixed unsecured tempfile.mktemp() command usage
We'd like to thank all the contributors who worked on this release!
@IlianIliev @uglide @vladvildanov @teodorfn @akx
Extend AggregateRequest with scorer argument
We'd like to thank all the contributors who worked on this release!
@uglide @rbs333 @vladvildanov @dwdougherty
Fixed return type for Redis Set commands to be Set instead of List
r = Redis(protocol=3, cache_config=CacheConfig())
cache = r.get_cache()
r.set("foo", "bar")
# get key from redis and save in local cache
print(r.get("foo"))
# get key from local cache
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)
# change key in redis (cause invalidation)
r.set("foo", "barbar")
# Retrieves a new value from server and cache it
print(r.get("foo"))
# Make sure that new value was cached
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)
Check documentation to get more examples
We'd like to thank all the contributors who worked on this release!
@vladvildanov @dmaier-redislabs @vineethvkumar @ramchandra-st @RafalBielickiIM @jules-ch
Catch a known DeprecationWarning when calling .close()
r = Redis(protocol=3, cache_config=CacheConfig())
cache = r.get_cache()
r.set("foo", "bar")
# get key from redis and save in local cache
print(r.get("foo"))
# get key from local cache
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)
# change key in redis (cause invalidation)
r.set("foo", "barbar")
# Retrieves a new value from server and cache it
print(r.get("foo"))
# Make sure that new value was cached
print(cache.get(CacheKey(command="GET", redis_keys=("foo",))).cache_value)
Check documentation to get more examples
We'd like to thank all the contributors who worked on this release!
@AYMENJD, @AniketP04, @BackflipPenguin, @ING-XIAOJIAN, @MrDenkoV, @Pedram-Parsian, @TheBlusky, @TomerHekmati, @Wh1isper, @Zaczero, @ahmedabdou14, @akx, @andy-stark-redis, @catap, @chayim, @d184230, @danielzhangau, @daveisfera, @dependabot, @dependabot[bot], @dkuser, @dmaier-redislabs, @dmkulazhenko, @dudizimber, @dvora-h, @dwdougherty, @enjoy-binbin, @gerzse, @hongqn, @jakob-keller, @kristjanvalur, @kurtmckee, @matrey, @mattwang44, @max-muoto, @parmenashp, @poiuj, @r0ro, @sjpotter, @tbbream, @trkwyk, @uglide, @vladvildanov, @w-miller, @wKollendorf, @willfrey, @willianmrs, @zakaf, @zware and @zxjlm
Timeseries insertion filters for close samples
We'd like to thank all the contributors who worked on this release!
@andy-stark-redis, @dependabot[bot], @enjoy-binbin, @gerzse, @Wh1isper
Support NOVALUES parameter for HSCAN
backoff.py (#3249)Client side caching improvements: typing, better test coverage, bug fixes
message in LockError optional to support backwards compatibility (#3176)We'd like to thank all the contributors who worked on this release!
@AYMENJD, @AniketP04, @BackflipPenguin, @ING-XIAOJIAN, @MrDenkoV, @Pedram-Parsian, @TheBlusky, @Zaczero, @ahmedabdou14, @akx, @chayim, @d184230, @danielzhangau, @dmkulazhenko, @dvora-h, @enjoy-binbin, @gerzse, @hongqn, @jakob-keller, @kristjanvalur, @matrey, @mattwang44, @parmenashp, @poiuj, @r0ro, @sjpotter, @tbbream, @trkwyk, @w-miller, @wKollendorf, @willianmrs, @zakaf, @zware and @zxjlm
Use the following code example to get started: ```python import redis
import redis
# enable csc
r = redis.Redis(
"localhost", 6379, protocol=3,
cache_enabled=True, cache_ttl=100, cache_max_size=1000,
# cache_blacklist=["GET", "LLEN"] # if needed, you can exclude certain commands from caching
)
r.set("foo", "bar")
r.get("foo")
r.get("foo") # this will be fetched from cache
# manually invalidate key in cache
r.invalidate_key_from_cache("foo")
# or flush the entire cache
r.flush_cache()
We'd like to thank all the contributors who worked on this release!
@AYMENJD, @AniketP04, @BackflipPenguin, @ING-XIAOJIAN, @MrDenkoV, @Pedram-Parsian, @TheBlusky, @ahmedabdou14, @akx, @chayim, @d184230, @danielzhangau, @dependabot, @dependabot[bot], @dmkulazhenko, @dvora-h, @enjoy-binbin, @hongqn, @jakob-keller, @kristjanvalur, @mattwang44, @parmenashp, @poiuj, @r0ro, @sjpotter, @tbbream, @trkwyk, @w-miller, @wKollendorf, @zakaf, @zware and @zxjlm
Expose delete functions, rename attributes, add AbstractCache class
HSET unexpectedly mutates the list passed to items (#3103)JSON.OBJLEN type hint (#2966)HDEL type hint (#3029)We'd like to thank all the contributors who worked on this release!
@AYMENJD, @AniketP04, @BackflipPenguin, @ING-XIAOJIAN, @MrDenkoV, @Pedram-Parsian, @TheBlusky, @akx, @chayim, @d184230, @danielzhangau, @dependabot, @dependabot[bot], @dmkulazhenko, @dvora-h, @enjoy-binbin, @jakob-keller, @kristjanvalur, @mattwang44, @parmenashp, @r0ro, @sjpotter, @tbbream, @trkwyk, @zware and @zxjlm
Support client side caching with ConnectionPool
We'd like to thank all the contributors who worked on this release!
@dvora-h
Update reported version deprecation in asyncio.client
acl_genpass with bits (#3062)FT.PROFILE result (#3063)disable_decoding in async read_response with hiredis parser. (#3042)We'd like to thank all the contributors who worked on this release!
@AYMENJD, @AniketP04, @BackflipPenguin, @MrDenkoV, @Pedram-Parsian, @akx, @chayim, @d184230, @danielzhangau, @dependabot, @dependabot[bot], @dvora-h, @enjoy-binbin, @jakob-keller, @kristjanvalur, @parmenashp, @r0ro, @sjpotter, @tbbream and @zware
Add GEOSHAPE field type for index creation of RediSearch
We'd like to thank all the contributors who worked on this release!
@chayim, @d184230, @danielzhangau, @dependabot, @dependabot[bot], @dvora-h, @kristjanvalur, @r0ro and @sjpotter
Add missing type hints for retry.py
Updated redis version to represent latest available build
We'd like to thank all the contributors who worked on this release!
@vladvildanov @dmaier-redislabs
Handle lists in the response of INFO
# Changes ## 🐛 Bug Fixes - Fix parsing of INFO response
Make it possible to customize SSL ciphers
Fix breaking change: message in LockError is now optional
Update reported version deprecation in asyncio.client
HSET unexpectedly mutates the list passed to items (#3103)acl_genpass with bits (#3062)FT.PROFILE result (#3063)disable_decoding in async read_response with hiredis parser. (#3042)JSON.OBJLEN type hint (#2966)HDEL type hint (#3029)We'd like to thank all the contributors who worked on this release!
@AYMENJD, @AniketP04, @BackflipPenguin, @ING-XIAOJIAN, @MrDenkoV, @Pedram-Parsian, @TheBlusky, @ahmedabdou14, @akx, @chayim, @d184230, @danielzhangau, @dependabot, @dependabot[bot], @dmkulazhenko, @dvora-h, @enjoy-binbin, @hongqn, @jakob-keller, @kristjanvalur, @mattwang44, @parmenashp, @poiuj, @r0ro, @sjpotter, @tbbream, @trkwyk, @w-miller, @wKollendorf, @zakaf, @zware and @zxjlm
Provide aclose() / close() for classes requiring lifetime management
ModuleCommands in cluster (#2951)RPUSHX (#2949)Redis.from_pool() class method, for explicitly owning and closing a ConnectionPool (#2913)push_request keyword argument to read_response (#2922)clear_connect_callbacks with _deregister_connect_callback (#2955)We'd like to thank all the contributors who worked on this release!
@AOrazaev, @akx, @anio, @chayim, @dvora-h, @elfkuzco, @hauntsaninja, @kristjanvalur, @meiravgri, @uglide and @yangbodong22011
If you continue to use Python 3.7 post-EOL, you may expose your projects and systems to potential security vulnerabilities. We ended its support in th…
Triggers and Functions allow you to execute server-side functions triggered when key values are modified or created in Redis, a stream entry arrival, or explicitly calling them. Simply put, you can replace Lua scripts with easy-to-develop JavaScript or TypeScript code. Move your business logic closer to the data to ensure a lower latency, and forget about updating dependent key values manually in your code. Try it for yourself with Quick start
Python 3.7 has reached its end-of-life (EOL) as of June 2023. This means that starting from this date, Python 3.7 will no longer receive any updates, including security patches, bug fixes, or improvements. If you continue to use Python 3.7 post-EOL, you may expose your projects and systems to potential security vulnerabilities. We ended its support in this version and strongly recommend migrating to Python 3.10.
CONTRIBUTING.md (#2848)We'd like to thank all the contributors who worked on this release!
@JoanFM, @Ovsyanka83, @chayim, @dependabot, @dependabot[bot], @dvora-h, @kristjanvalur, @kurtmckee, @pall-j and @shacharPash
RESP3 response-callbacks cleanup
Change SISMEMBER return type to int by
SISMEMBER return type to int by (#2813)Add support for sharded pubsub in sync client
This beta release includes 2 bug fixes for the RESP3 parser.
This beta release includes 2 bug fixes for the RESP3 parser.
COMMAND response callback (#2740)Please note response types change for those using RESP3 - meaning there breaking changes. Today this includes support for the following:
This release includes only support for RESP3, it should be treated as a beta. Please note response types change for those using RESP3 - meaning there breaking changes. Today this includes support for the following:
The following are not yet implemented:
RESP3 support introduces two different ways to enable a RESP3 redis connection, when your redis server supports it.
import redis
r = redis.Redis.from_url("redis://localhost:6379?protocol=3")
r.ping()
protocol=3 into any existing connection object eg:from redis.asyncio import Redis
r = Redis(host="localhost", port=6379, protocol=3)
r.ping()
Please note response types change for those using RESP3 - meaning there breaking changes. Today this includes support for the following:
This release includes only support for RESP3, it should be treated as a beta. Please note response types change for those using RESP3 - meaning there breaking changes. Today this includes support for the following:
The following are not yet implemented:
This release introduces two different ways to enable a RESP3 redis connection, when your redis server supports it.
import redis
r = redis.Redis.from_url("redis://localhost:6379?protocol=3")
r.ping()
protocol=3 into any existing connection object eg:from redis.asyncio import Redis
r = Redis(host="localhost", port=6379, protocol=3)
r.ping()
Your coding agent can read these notes before it upgrades. Set up the MCP server →