Releases: redis/redis-py
6.0.0b1
Changes
π New Features
- New hash commands with expiration options support are added - HGETDEL, HGETEX, HSETEX (#3570)
- Adding load balancing strategy configuration to cluster clients(replacement for 'read_from_replicas' config) (#3563)
- Exponential with jitter backoff (#3550)
- Adds option not to raise an exception when leaving context manager after lock expiration (#3531)
- Add force_master_ip support to async Sentinel client (#3524)
π₯ Breaking changes
- Removing support for RedisGears module. (#3553). For more info you can check the deprecated Redis features
- Removing support for RedisGraph module. (#3548). For more info you can check the deprecated Redis features
- Fixing typing for FCALL commands to match PEP 484 (#3537)
- Moved ClusterParser exceptions to BaseParser class (#3475)
- Changed default dialect to 2 (#3467) - This release introduces a client-side default dialect for Redisβ search and query capabilities. By default, the client now overrides the server-side dialect with version 2, automatically appending DIALECT 2to commands like FT.AGGREGATE and FT.SEARCH.
Important: Be aware that the query dialect may impact the results returned. If needed, you can revert to a different dialect version by configuring the client accordingly. You can find further details in the query dialect documentation.
β οΈ Deprecations
- Adding load balancing strategy configuration to cluster clients(replacement for 'read_from_replicas' config, 'read_from_replicas' is deprecated) (#3563)
- Deprecating unused arguments in connection pools's get_connection functions (#3517)
- Adding deprecation messages for the exposed in search module commands: FT.CONFIG GET and FT.CONFIG SET (#3499 #3500 )
- Deprecating Search module config_set and config_get commands. Adding tests for modules ACL and modules config changes in 8.0 (#3489)
π Bug Fixes
- Fixing search module dropindex function not to send invalid third parameter. Updating pipeline infra (#3564)
- Fixing async cluster pipeline execution when client is created with cluster_error_retry_attempts=0 (#3545)
- Fix client_list with multiple client ids (#3539)
- Add valid Exception type to Except in ClusterPipeline (#3516)
- Remove decreasing of created connections count when releasing not owned by connection pool connection(fixes issue #2832). (#3514)
- Fix #3130 TimeoutError during ClusterPipeline makes the client unrecoverable (#3513)
- Fix connection health check for protocol != 2 when auth credentials are provided and health check interval is configured (#3477)
- Fix AttributeError when client.get_default_node() returns None (#3458)
- fix: add TimeoutError handling in get_connection() (#1485)
- Avoid stacktrace on process exit in Client.del() (#3397)
π§° Maintenance
- Type hints improvements (#3420 #3480 #3522 #3526)
- Increasing the operations-per-run for stale issues GH action (#3556)
- Got rid of time.time() everywhere (#3551)
- Removing deprecated usage of forbid_global_loop=True in pytest.mark.asyncio decorator (#3542)
- allow more recent pyopenssl (#3541)
- Bump rojopolis/spellcheck-github-actions from 0.38.0 to 0.47.0 (#3538)
- Fix LockError message when releasing a lock. (#3534)
- Fix readthedocs.yml integration(#3527 #3528 #3529)
- Adding vector search tests for types int8/uint8 (#3525)
- Adding requested resources into sdist. Fix for issue #3057 (#3511)
- maintenance: Python 3.13 compatibility (#3510)
- Adding unit test for core info command related to modules info (#3507)
- Replacing the redis and redis-stack-server images with redis-libs-tests image in test infrastructure (#3505)
- Update connection_examples.ipynb (#3504)
- Update Python imports in doc examples (index_definition => indexDefinition) (#3490)
- DOC-4736 added geo indexing examples (#3485)
- Updated test infrastructure with latest versions (#3484)
- fix: update redis university url, the old link doesn't work (#3481)
- Fix #3464: Correct misleading exception_handler example in docs (#3474)
- Added Redis 8.0 to test matrix (#3469)
- Added workflow_dispatch for pypi release workflow (#3465)
- Avoid the multiprocessing forkserver method in Python 3.14 (#3442)
- Fix inaccurate docstring for unwatch() (#3424)
- Update README.md - Fix 'Note' - bold (#3413)
- skip ssl import if not available (#3078)
- Replace flake8+isort+black with ruff (#3147)
- Fixes minor grammar nit in documentation. (#3354)
Contributors
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
5.3.0b5
Changes
π New Features
Token-based authentication:
CredentialProvider instance creation interface was enhanced. Feel free to check the updated documentation
π Bug Fixes
- Fixed flacky TokenManager test (#3468)
- Fix incorrect attribute reuse in redis.connection.CacheProxyConnection (#3456)
- Moved self._lock initialisation to Pool constructor (#3473)
π§° Maintenance
- Updated CredentialProvider test infrastructure (#3502)
- Expand type for EncodedT (#3472)
- DOC-4423: add TCEs for various command pages (#3476)
- DOC-4345 added testable JSON search examples for home page (#3407)
- DOC-4796 fixed capped lists example (#3493)
- Added unit test fix to improve compatibility with MacOS (#3486)
- Added missing type hints (#3494 #3495 #3496 #3357)
Contributors
We'd like to thank all the contributors who worked on this release!
@petyaslavova @andy-stark-redis @hauntsaninja @dwdougherty @patrick91 @Vulwsztyn @vladvildanov
5.3.0b4
Changes
π New Features
Includes Token-based authentication feature from previous beta. Check release notes
π Bug Fixes
- Fixed bug with missing PyJWT dependency (#3462)
Contributors
We'd like to thank all the contributors who worked on this release!
5.3.0b3
Changes
π New Features
Token-based authentication:
- Added StreamingCredentialProvider interface (#3445)
- Extended CredentialProvider class with get_credentials_async method (#3445)
- Added event-driven entities (Dispatcher, Listener, Events) (#3445)
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.
π§° Maintenance
- Fixed package version
Contributors
We'd like to thank all the contributors who worked on this release!
5.3.0b2
Changes
π Bug Fixes
- Fixed Token-based authentication documentation
Contributors
We'd like to thank all the contributors who worked on this release!
5.3.0b1
Changes
π New Features
Token-based authentication:
- Added StreamingCredentialProvider interface (#3445)
- Extended CredentialProvider class with get_credentials_async method (#3445)
- Added event-driven entities (Dispatcher, Listener, Events) (#3445)
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.
Contributors
We'd like to thank all the contributors who worked on this release!
5.2.1
Changes
π Bug Fixes
- Fixed unsecured tempfile.mktemp() command usage (#3446)
- Fixed bug with SLOWLOG GET response parsing on Redis Software (#3441)
- Fixed issue with invoking _close() on closed event loop (#3438)
π§° Maintenance
- Migrate test infrastructure to new custom docker images (#3415)
- Fixed flacky test with HEXPIREAT command (#3437)
Contributors
We'd like to thank all the contributors who worked on this release!
5.2.0
5.1.1
Changes
5.1.1
π Bug Fixes
- Fixed return type for Redis Set commands to be Set instead of List (#3399)
- Fixed bug with partial Hiredis availability (#3400)
- Fixed bug with async pipeline and cluster fails with some commands (#3402)
5.1.0
π New Features
How to start with Client-side caching?
- Install redis-py 5.1.0
- Use the following code snippet:
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
π₯ Breaking Changes
- Timeseries insertion filters for close samples (#3228)
- Enhanced classes string representation (#3001)
- Partial clean up of Python 3.7 compatibility (#2928)
- Handle Redis Set data type as Python list to avoid a limitations with nested dictionaries (#3324)
Contributors
We'd like to thank all the contributors who worked on this release!
@vladvildanov @dmaier-redislabs @vineethvkumar @ramchandra-st @RafalBielickiIM @jules-ch
5.1.0
Changes
π New Features
How to start with Client-side caching?
- Install redis-py 5.1.0
- Use the following code snippet:
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
π₯ Breaking Changes
- Timeseries insertion filters for close samples (#3228)
- Enhanced classes string representation (#3001)
- Partial clean up of Python 3.7 compatibility (#2928)
- Handle RESP3 sets as Python lists (#3324)
π Bug Fixes
- Handle RESP3 sets as Python lists (#3324)
- Prevent async ClusterPipeline instances from becoming "false-y" (#3068)
- Add hostname field to _parse_node_line (#3343)
- More docs fixes (#3326)
- Delete the first-defined (and thus "duplicate") Script class (#3333)
- Catch a known DeprecationWarning when calling .close() (#3335)
- Add missed redismod at test_commands.py (#3369)
π§° Maintenance
- Update README.md - mentioning redis 7.4 support (#3375)
- Update PyPy 3.8 to 3.10 in CI (#3370)
- Updated commands from docker-compose to docker compose (#3352)
- Added version restrictions for pytest-asyncio (#3362)
- Documentation examples (#3361, #3372, #3374, #3377, #3378)
Contributors
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