valkey-glide-sync 2.2.3__tar.gz → 2.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/PKG-INFO +1 -1
  2. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/aio/connection.rs +7 -4
  3. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/aio/mod.rs +2 -1
  4. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/aio/tokio.rs +8 -4
  5. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/client.rs +15 -5
  6. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_async/connections_logic.rs +1 -0
  7. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_async/mod.rs +1 -0
  8. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_client.rs +13 -0
  9. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cmd.rs +2 -2
  10. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/commands/macros.rs +3 -3
  11. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/lib.rs +3 -3
  12. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/client/mod.rs +2 -0
  13. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/client/reconnecting_connection.rs +4 -0
  14. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/client/standalone_client.rs +6 -1
  15. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/client/types.rs +4 -0
  16. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/protobuf/connection_request.proto +2 -0
  17. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/config.py +13 -2
  18. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/pyproject.toml +1 -1
  19. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/valkey_glide_sync.egg-info/PKG-INFO +1 -1
  20. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/MANIFEST.in +0 -0
  21. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/README.md +0 -0
  22. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/.cargo/config.toml +0 -0
  23. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/.gitignore +0 -0
  24. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/.ort.yml +0 -0
  25. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/Cargo.toml +0 -0
  26. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/DEVELOPER.md +0 -0
  27. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/README.md +0 -0
  28. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/cbindgen.toml +0 -0
  29. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/Cargo.toml +0 -0
  30. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/README.md +0 -0
  31. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/Cargo.toml +0 -0
  32. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/client.rs +0 -0
  33. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/cluster_scan_container.rs +0 -0
  34. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/command_request.rs +0 -0
  35. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/connection_request.rs +0 -0
  36. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/errors.rs +0 -0
  37. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/lib.rs +0 -0
  38. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/request_type.rs +0 -0
  39. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-glide-core/src/scripts_container.rs +0 -0
  40. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-logger-core/Cargo.toml +0 -0
  41. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-logger-core/src/lib.rs +0 -0
  42. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-redis/Cargo.toml +0 -0
  43. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-redis/src/cluster_routing.rs +0 -0
  44. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-redis/src/cluster_topology.rs +0 -0
  45. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-redis/src/lib.rs +0 -0
  46. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-telemetry/Cargo.toml +0 -0
  47. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-telemetry/src/lib.rs +0 -0
  48. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-tokio/Cargo.toml +0 -0
  49. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-tokio/src/lib.rs +0 -0
  50. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-tokio/src/runtime.rs +0 -0
  51. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-tokio/src/sync.rs +0 -0
  52. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/mock-tokio/src/task.rs +0 -0
  53. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/miri-tests/rust-toolchain.toml +0 -0
  54. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/ffi/src/lib.rs +0 -0
  55. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/.cargo/config.toml +0 -0
  56. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/.ort.yml +0 -0
  57. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/Cargo.toml +0 -0
  58. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/README.md +0 -0
  59. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/THIRD_PARTY_LICENSES_RUST +0 -0
  60. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/build.rs +0 -0
  61. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/Cargo.toml +0 -0
  62. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/LICENSE +0 -0
  63. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/README.md +0 -0
  64. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/appveyor.yml +0 -0
  65. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/get_command_info.py +0 -0
  66. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/CHANGELOG.md +0 -0
  67. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/Cargo.toml +0 -0
  68. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/LICENSE +0 -0
  69. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/examples/async-await.rs +0 -0
  70. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/examples/async-multiplexed.rs +0 -0
  71. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/examples/async-pub-sub.rs +0 -0
  72. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/examples/async-scan.rs +0 -0
  73. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/examples/basic.rs +0 -0
  74. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/release.toml +0 -0
  75. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/aio/connection_manager.rs +0 -0
  76. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/aio/multiplexed_connection.rs +0 -0
  77. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/aio/runtime.rs +0 -0
  78. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster.rs +0 -0
  79. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_async/LICENSE +0 -0
  80. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_async/connections_container.rs +0 -0
  81. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_async/pipeline_routing.rs +0 -0
  82. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_pipeline.rs +0 -0
  83. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_routing.rs +0 -0
  84. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_slotmap.rs +0 -0
  85. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/cluster_topology.rs +0 -0
  86. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/commands/cluster_scan.rs +0 -0
  87. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/commands/mod.rs +0 -0
  88. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/connection.rs +0 -0
  89. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/macros.rs +0 -0
  90. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/parser.rs +0 -0
  91. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/pipeline.rs +0 -0
  92. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/push_manager.rs +0 -0
  93. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/retry_strategies.rs +0 -0
  94. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/sentinel.rs +0 -0
  95. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/tls.rs +0 -0
  96. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/redis/src/types.rs +0 -0
  97. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/rustfmt.toml +0 -0
  98. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/redis-rs/src/main.rs +0 -0
  99. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/client/value_conversion.rs +0 -0
  100. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/cluster_scan_container.rs +0 -0
  101. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/errors.rs +0 -0
  102. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/iam/mod.rs +0 -0
  103. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/lib.rs +0 -0
  104. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/protobuf/command_request.proto +0 -0
  105. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/protobuf/response.proto +0 -0
  106. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/request_type.rs +0 -0
  107. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/rotating_buffer.rs +0 -0
  108. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/scripts_container.rs +0 -0
  109. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/src/socket_listener.rs +0 -0
  110. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/telemetry/Cargo.toml +0 -0
  111. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/telemetry/src/lib.rs +0 -0
  112. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/telemetry/src/metrics_exporter_file.rs +0 -0
  113. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/telemetry/src/open_telemetry.rs +0 -0
  114. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide-core/telemetry/src/span_exporter_file.rs +0 -0
  115. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/__init__.py +0 -0
  116. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/__init__.py +0 -0
  117. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/batch.py +0 -0
  118. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/batch_options.py +0 -0
  119. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/bitmap.py +0 -0
  120. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/command_args.py +0 -0
  121. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/core_options.py +0 -0
  122. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/server_modules/ft_options/ft_aggregate_options.py +0 -0
  123. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/server_modules/ft_options/ft_constants.py +0 -0
  124. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/server_modules/ft_options/ft_create_options.py +0 -0
  125. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/server_modules/ft_options/ft_profile_options.py +0 -0
  126. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/server_modules/ft_options/ft_search_options.py +0 -0
  127. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/server_modules/json_batch.py +0 -0
  128. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/server_modules/json_options.py +0 -0
  129. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/sorted_set.py +0 -0
  130. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/commands/stream.py +0 -0
  131. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/constants.py +0 -0
  132. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/exceptions.py +0 -0
  133. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/protobuf_codec.py +0 -0
  134. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/py.typed +0 -0
  135. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_shared/routes.py +0 -0
  136. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/__init__.py +0 -0
  137. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/_glide_ffi.py +0 -0
  138. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/config.py +0 -0
  139. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/glide_client.py +0 -0
  140. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/logger.py +0 -0
  141. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/py.typed +0 -0
  142. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/__init__.py +0 -0
  143. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/cluster_commands.py +0 -0
  144. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/cluster_scan_cursor.py +0 -0
  145. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/core.py +0 -0
  146. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/ft.py +0 -0
  147. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/glide_json.py +0 -0
  148. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/script.py +0 -0
  149. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/glide_sync/sync_commands/standalone_commands.py +0 -0
  150. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/logger_core/Cargo.toml +0 -0
  151. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/logger_core/src/lib.rs +0 -0
  152. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/setup.cfg +0 -0
  153. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/setup.py +0 -0
  154. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/valkey_glide_sync.egg-info/SOURCES.txt +0 -0
  155. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/valkey_glide_sync.egg-info/dependency_links.txt +0 -0
  156. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/valkey_glide_sync.egg-info/requires.txt +0 -0
  157. {valkey_glide_sync-2.2.3 → valkey_glide_sync-2.2.5}/valkey_glide_sync.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valkey-glide-sync
3
- Version: 2.2.3
3
+ Version: 2.2.5
4
4
  Summary: Valkey GLIDE Sync client. Supports Valkey and Redis OSS.
5
5
  License: Apache-2.0
6
6
  Classifier: Topic :: Database
@@ -419,12 +419,13 @@ where
419
419
  pub(crate) async fn connect_simple<T: RedisRuntime>(
420
420
  connection_info: &ConnectionInfo,
421
421
  _socket_addr: Option<SocketAddr>,
422
+ tcp_nodelay: bool,
422
423
  ) -> RedisResult<(T, Option<IpAddr>)> {
423
424
  Ok(match connection_info.addr {
424
425
  ConnectionAddr::Tcp(ref host, port) => {
425
426
  if let Some(socket_addr) = _socket_addr {
426
427
  return Ok::<_, RedisError>((
427
- <T>::connect_tcp(socket_addr).await?,
428
+ <T>::connect_tcp(socket_addr, tcp_nodelay).await?,
428
429
  Some(socket_addr.ip()),
429
430
  ));
430
431
  }
@@ -433,7 +434,7 @@ pub(crate) async fn connect_simple<T: RedisRuntime>(
433
434
  log_conn_creation("TCP", format!("{host}:{port}"), Some(socket_addr.ip()));
434
435
  Box::pin(async move {
435
436
  Ok::<_, RedisError>((
436
- <T>::connect_tcp(socket_addr).await?,
437
+ <T>::connect_tcp(socket_addr, tcp_nodelay).await?,
437
438
  Some(socket_addr.ip()),
438
439
  ))
439
440
  })
@@ -450,7 +451,8 @@ pub(crate) async fn connect_simple<T: RedisRuntime>(
450
451
  } => {
451
452
  if let Some(socket_addr) = _socket_addr {
452
453
  return Ok::<_, RedisError>((
453
- <T>::connect_tcp_tls(host, socket_addr, insecure, tls_params).await?,
454
+ <T>::connect_tcp_tls(host, socket_addr, insecure, tls_params, tcp_nodelay)
455
+ .await?,
454
456
  Some(socket_addr.ip()),
455
457
  ));
456
458
  }
@@ -463,7 +465,8 @@ pub(crate) async fn connect_simple<T: RedisRuntime>(
463
465
  );
464
466
  Box::pin(async move {
465
467
  Ok::<_, RedisError>((
466
- <T>::connect_tcp_tls(host, socket_addr, insecure, tls_params).await?,
468
+ <T>::connect_tcp_tls(host, socket_addr, insecure, tls_params, tcp_nodelay)
469
+ .await?,
467
470
  Some(socket_addr.ip()),
468
471
  ))
469
472
  })
@@ -29,7 +29,7 @@ pub mod tokio;
29
29
  #[async_trait]
30
30
  pub(crate) trait RedisRuntime: AsyncStream + Send + Sync + Sized + 'static {
31
31
  /// Performs a TCP connection
32
- async fn connect_tcp(socket_addr: SocketAddr) -> RedisResult<Self>;
32
+ async fn connect_tcp(socket_addr: SocketAddr, tcp_nodelay: bool) -> RedisResult<Self>;
33
33
 
34
34
  // Performs a TCP TLS connection
35
35
  async fn connect_tcp_tls(
@@ -37,6 +37,7 @@ pub(crate) trait RedisRuntime: AsyncStream + Send + Sync + Sized + 'static {
37
37
  socket_addr: SocketAddr,
38
38
  insecure: bool,
39
39
  tls_params: &Option<TlsConnParams>,
40
+ tcp_nodelay: bool,
40
41
  ) -> RedisResult<Self>;
41
42
 
42
43
  /// Performs a UNIX connection
@@ -25,8 +25,9 @@ use crate::tls::TlsConnParams;
25
25
  use super::Path;
26
26
 
27
27
  #[inline(always)]
28
- async fn connect_tcp(addr: &SocketAddr) -> io::Result<TcpStreamTokio> {
28
+ async fn connect_tcp(addr: &SocketAddr, tcp_nodelay: bool) -> io::Result<TcpStreamTokio> {
29
29
  let socket = TcpStreamTokio::connect(addr).await?;
30
+ socket.set_nodelay(tcp_nodelay)?;
30
31
  #[cfg(feature = "keep-alive")]
31
32
  {
32
33
  //For now rely on system defaults
@@ -111,8 +112,10 @@ impl AsyncRead for Tokio {
111
112
 
112
113
  #[async_trait]
113
114
  impl RedisRuntime for Tokio {
114
- async fn connect_tcp(socket_addr: SocketAddr) -> RedisResult<Self> {
115
- Ok(connect_tcp(&socket_addr).await.map(Tokio::Tcp)?)
115
+ async fn connect_tcp(socket_addr: SocketAddr, tcp_nodelay: bool) -> RedisResult<Self> {
116
+ Ok(connect_tcp(&socket_addr, tcp_nodelay)
117
+ .await
118
+ .map(Tokio::Tcp)?)
116
119
  }
117
120
 
118
121
  async fn connect_tcp_tls(
@@ -120,6 +123,7 @@ impl RedisRuntime for Tokio {
120
123
  socket_addr: SocketAddr,
121
124
  insecure: bool,
122
125
  tls_params: &Option<TlsConnParams>,
126
+ tcp_nodelay: bool,
123
127
  ) -> RedisResult<Self> {
124
128
  let config = create_rustls_config(insecure, tls_params.clone())?;
125
129
  let tls_connector = TlsConnector::from(Arc::new(config));
@@ -127,7 +131,7 @@ impl RedisRuntime for Tokio {
127
131
  Ok(tls_connector
128
132
  .connect(
129
133
  rustls_pki_types::ServerName::try_from(hostname)?.to_owned(),
130
- connect_tcp(&socket_addr).await?,
134
+ connect_tcp(&socket_addr, tcp_nodelay).await?,
131
135
  )
132
136
  .await
133
137
  .map(|con| Tokio::TcpTls(Box::new(con)))?)
@@ -96,6 +96,9 @@ pub struct GlideConnectionOptions {
96
96
  pub connection_timeout: Option<Duration>,
97
97
  /// Retry strategy configuration for reconnect attempts.
98
98
  pub connection_retry_strategy: Option<RetryStrategy>,
99
+ /// TCP_NODELAY socket option. When true, disables Nagle's algorithm for lower latency.
100
+ /// When false, enables Nagle's algorithm to reduce network overhead.
101
+ pub tcp_nodelay: bool,
99
102
  }
100
103
 
101
104
  /// To enable async support you need to enable the feature: `tokio-comp`
@@ -115,7 +118,10 @@ impl Client {
115
118
  let (con, _ip) = match Runtime::locate() {
116
119
  #[cfg(feature = "tokio-comp")]
117
120
  Runtime::Tokio => {
118
- self.get_simple_async_connection::<crate::aio::tokio::Tokio>(None)
121
+ // Note: tcp_nodelay is hardcoded to true (default) since this deprecated API
122
+ // doesn't accept GlideConnectionOptions. Modern code should use
123
+ // get_multiplexed_async_connection which allows configuring tcp_nodelay.
124
+ self.get_simple_async_connection::<crate::aio::tokio::Tokio>(None, true)
119
125
  .await?
120
126
  }
121
127
  };
@@ -427,7 +433,9 @@ impl Client {
427
433
  where
428
434
  T: crate::aio::RedisRuntime,
429
435
  {
430
- let (con, ip) = self.get_simple_async_connection::<T>(socket_addr).await?;
436
+ let (con, ip) = self
437
+ .get_simple_async_connection::<T>(socket_addr, glide_connection_options.tcp_nodelay)
438
+ .await?;
431
439
  crate::aio::MultiplexedConnection::new_with_response_timeout(
432
440
  &self.connection_info,
433
441
  con,
@@ -441,6 +449,7 @@ impl Client {
441
449
  async fn get_simple_async_connection<T>(
442
450
  &self,
443
451
  socket_addr: Option<SocketAddr>,
452
+ tcp_nodelay: bool,
444
453
  ) -> RedisResult<(
445
454
  Pin<Box<dyn crate::aio::AsyncStream + Send + Sync>>,
446
455
  Option<IpAddr>,
@@ -449,7 +458,8 @@ impl Client {
449
458
  T: crate::aio::RedisRuntime,
450
459
  {
451
460
  let (conn, ip) =
452
- crate::aio::connect_simple::<T>(&self.connection_info, socket_addr).await?;
461
+ crate::aio::connect_simple::<T>(&self.connection_info, socket_addr, tcp_nodelay)
462
+ .await?;
453
463
  Ok((conn.boxed(), ip))
454
464
  }
455
465
 
@@ -519,11 +529,11 @@ impl Client {
519
529
  ///
520
530
  /// let mut con = client.get_async_connection(None).await?;
521
531
  ///
522
- /// con.set("key1", b"foo").await?;
532
+ /// con.set::<_, _, ()>("key1", b"foo").await?;
523
533
  ///
524
534
  /// redis::cmd("SET")
525
535
  /// .arg(&["key2", "bar"])
526
- /// .query_async(&mut con)
536
+ /// .query_async::<_, ()>(&mut con)
527
537
  /// .await?;
528
538
  ///
529
539
  /// let result = redis::cmd("MGET")
@@ -193,6 +193,7 @@ where
193
193
  discover_az,
194
194
  connection_timeout: Some(params.connection_timeout),
195
195
  connection_retry_strategy: None,
196
+ tcp_nodelay: params.tcp_nodelay,
196
197
  },
197
198
  )
198
199
  .await
@@ -1132,6 +1132,7 @@ where
1132
1132
  discover_az,
1133
1133
  connection_timeout: Some(cluster_params.connection_timeout),
1134
1134
  connection_retry_strategy: Some(connection_retry_strategy),
1135
+ tcp_nodelay: cluster_params.tcp_nodelay,
1135
1136
  };
1136
1137
 
1137
1138
  let connections = Self::create_initial_connections(
@@ -47,6 +47,7 @@ struct BuilderParams {
47
47
  reconnect_retry_strategy: Option<RetryStrategy>,
48
48
  refresh_topology_from_initial_nodes: bool,
49
49
  database_id: i64,
50
+ tcp_nodelay: bool,
50
51
  }
51
52
 
52
53
  #[derive(Clone)]
@@ -150,6 +151,7 @@ pub struct ClusterParams {
150
151
  pub(crate) reconnect_retry_strategy: Option<RetryStrategy>,
151
152
  pub(crate) refresh_topology_from_initial_nodes: bool,
152
153
  pub(crate) database_id: i64,
154
+ pub(crate) tcp_nodelay: bool,
153
155
  }
154
156
 
155
157
  impl ClusterParams {
@@ -182,6 +184,7 @@ impl ClusterParams {
182
184
  reconnect_retry_strategy: value.reconnect_retry_strategy,
183
185
  refresh_topology_from_initial_nodes: value.refresh_topology_from_initial_nodes,
184
186
  database_id: value.database_id,
187
+ tcp_nodelay: value.tcp_nodelay,
185
188
  })
186
189
  }
187
190
  }
@@ -495,6 +498,16 @@ impl ClusterClientBuilder {
495
498
  self
496
499
  }
497
500
 
501
+ /// Sets the TCP_NODELAY socket option.
502
+ ///
503
+ /// When true, disables Nagle's algorithm for lower latency.
504
+ /// When false, enables Nagle's algorithm to reduce network overhead.
505
+ /// Defaults to true if not set.
506
+ pub fn tcp_nodelay(mut self, tcp_nodelay: bool) -> ClusterClientBuilder {
507
+ self.builder_params.tcp_nodelay = tcp_nodelay;
508
+ self
509
+ }
510
+
498
511
  /// Enables timing out on slow connection time.
499
512
  ///
500
513
  /// If enabled, the cluster will only wait the given time on each connection attempt to each node.
@@ -131,8 +131,8 @@ impl<'a, T: FromRedisValue + 'a + Unpin + Send> AsyncIter<'a, T> {
131
131
  /// # async fn scan_set() -> redis::RedisResult<()> {
132
132
  /// # let client = redis::Client::open("redis://127.0.0.1/")?;
133
133
  /// # let mut con = client.get_async_connection(None).await?;
134
- /// con.sadd("my_set", 42i32).await?;
135
- /// con.sadd("my_set", 43i32).await?;
134
+ /// con.sadd::<_, _, ()>("my_set", 42i32).await?;
135
+ /// con.sadd::<_, _, ()>("my_set", 43i32).await?;
136
136
  /// let mut iter: redis::AsyncIter<i32> = con.sscan("my_set").await?;
137
137
  /// while let Some(element) = iter.next_item().await {
138
138
  /// assert!(element == 42 || element == 43);
@@ -32,7 +32,7 @@ macro_rules! implement_commands {
32
32
  /// use redis::Commands;
33
33
  /// let client = redis::Client::open("redis://127.0.0.1/")?;
34
34
  /// let mut con = client.get_connection(None)?;
35
- /// con.set("my_key", 42)?;
35
+ /// con.set::<_, _, ()>("my_key", 42)?;
36
36
  /// assert_eq!(con.get("my_key"), Ok(42));
37
37
  /// # Ok(()) }
38
38
  /// ```
@@ -136,7 +136,7 @@ macro_rules! implement_commands {
136
136
  /// # async fn do_something() -> redis::RedisResult<()> {
137
137
  /// let client = redis::Client::open("redis://127.0.0.1/")?;
138
138
  /// let mut con = client.get_async_connection(None).await?;
139
- /// redis::cmd("SET").arg("my_key").arg(42i32).query_async(&mut con).await?;
139
+ /// redis::cmd("SET").arg("my_key").arg(42i32).query_async::<_, ()>(&mut con).await?;
140
140
  /// assert_eq!(redis::cmd("GET").arg("my_key").query_async(&mut con).await, Ok(42i32));
141
141
  /// # Ok(()) }
142
142
  /// ```
@@ -149,7 +149,7 @@ macro_rules! implement_commands {
149
149
  /// use redis::Commands;
150
150
  /// let client = redis::Client::open("redis://127.0.0.1/")?;
151
151
  /// let mut con = client.get_async_connection(None).await?;
152
- /// con.set("my_key", 42i32).await?;
152
+ /// con.set::<_, _, ()>("my_key", 42i32).await?;
153
153
  /// assert_eq!(con.get("my_key").await, Ok(42i32));
154
154
  /// # Ok(()) }
155
155
  /// ```
@@ -107,7 +107,7 @@
107
107
  //! fn do_something(con: &mut redis::Connection) -> redis::RedisResult<usize> {
108
108
  //! // This will result in a server error: "unknown command `MEMORY USAGE`"
109
109
  //! // because "USAGE" is technically a sub-command of "MEMORY".
110
- //! redis::cmd("MEMORY USAGE").arg("my_key").query(con)?;
110
+ //! redis::cmd("MEMORY USAGE").arg("my_key").query::<()>(con)?;
111
111
  //!
112
112
  //! // However, this will work as you'd expect
113
113
  //! redis::cmd("MEMORY").arg("USAGE").arg("my_key").query(con)
@@ -312,9 +312,9 @@ use redis::AsyncCommands;
312
312
  let client = redis::Client::open("redis://127.0.0.1/").unwrap();
313
313
  let mut con = client.get_async_connection(None).await?;
314
314
 
315
- con.set("key1", b"foo").await?;
315
+ con.set::<_, _, ()>("key1", b"foo").await?;
316
316
 
317
- redis::cmd("SET").arg(&["key2", "bar"]).query_async(&mut con).await?;
317
+ redis::cmd("SET").arg(&["key2", "bar"]).query_async::<_, ()>(&mut con).await?;
318
318
 
319
319
  let result = redis::cmd("MGET")
320
320
  .arg(&["key1", "key2"])
@@ -1260,6 +1260,8 @@ async fn create_cluster_client(
1260
1260
  builder =
1261
1261
  builder.refresh_topology_from_initial_nodes(request.refresh_topology_from_initial_nodes);
1262
1262
 
1263
+ builder = builder.tcp_nodelay(request.tcp_nodelay);
1264
+
1263
1265
  // Always use with Glide
1264
1266
  builder = builder.periodic_connections_checks(Some(CONNECTION_CHECKS_INTERVAL));
1265
1267
 
@@ -123,6 +123,7 @@ async fn create_connection(
123
123
  push_sender: Option<mpsc::UnboundedSender<PushInfo>>,
124
124
  discover_az: bool,
125
125
  connection_timeout: Duration,
126
+ tcp_nodelay: bool,
126
127
  ) -> Result<ReconnectingConnection, (ReconnectingConnection, RedisError)> {
127
128
  let client = {
128
129
  let guard = connection_backend
@@ -140,6 +141,7 @@ async fn create_connection(
140
141
  discover_az,
141
142
  connection_timeout: Some(connection_timeout),
142
143
  connection_retry_strategy: Some(retry_strategy),
144
+ tcp_nodelay,
143
145
  };
144
146
 
145
147
  let action = || async {
@@ -224,6 +226,7 @@ impl ReconnectingConnection {
224
226
  discover_az: bool,
225
227
  connection_timeout: Duration,
226
228
  tls_params: Option<redis::TlsConnParams>,
229
+ tcp_nodelay: bool,
227
230
  ) -> Result<ReconnectingConnection, (ReconnectingConnection, RedisError)> {
228
231
  log_debug(
229
232
  "connection creation",
@@ -242,6 +245,7 @@ impl ReconnectingConnection {
242
245
  push_sender,
243
246
  discover_az,
244
247
  connection_timeout,
248
+ tcp_nodelay,
245
249
  )
246
250
  .await
247
251
  }
@@ -152,6 +152,8 @@ impl StandaloneClient {
152
152
  DEFAULT_CONNECTION_TIMEOUT,
153
153
  );
154
154
 
155
+ let tcp_nodelay = connection_request.tcp_nodelay;
156
+
155
157
  let tls_params = if !connection_request.root_certs.is_empty() {
156
158
  if tls_mode.unwrap_or(TlsMode::NoTls) == TlsMode::NoTls {
157
159
  return Err(StandaloneClientConnectionError::FailedConnection(vec![(
@@ -192,9 +194,10 @@ impl StandaloneClient {
192
194
  let discover = discover_az;
193
195
  let timeout = connection_timeout;
194
196
  let params = tls_params.clone();
197
+ let nodelay = tcp_nodelay;
195
198
  async move {
196
199
  get_connection_and_replication_info(
197
- &address, &retry, &info, tls, &sender, discover, timeout, params,
200
+ &address, &retry, &info, tls, &sender, discover, timeout, params, nodelay,
198
201
  )
199
202
  .await
200
203
  .map_err(|err| (format!("{}:{}", address.host, address.port), err))
@@ -692,6 +695,7 @@ async fn get_connection_and_replication_info(
692
695
  discover_az: bool,
693
696
  connection_timeout: Duration,
694
697
  tls_params: Option<redis::TlsConnParams>,
698
+ tcp_nodelay: bool,
695
699
  ) -> Result<(ReconnectingConnection, Value), (ReconnectingConnection, RedisError)> {
696
700
  let reconnecting_connection = ReconnectingConnection::new(
697
701
  address,
@@ -702,6 +706,7 @@ async fn get_connection_and_replication_info(
702
706
  discover_az,
703
707
  connection_timeout,
704
708
  tls_params,
709
+ tcp_nodelay,
705
710
  )
706
711
  .await?;
707
712
 
@@ -30,6 +30,7 @@ pub struct ConnectionRequest {
30
30
  pub lazy_connect: bool,
31
31
  pub refresh_topology_from_initial_nodes: bool,
32
32
  pub root_certs: Vec<Vec<u8>>,
33
+ pub tcp_nodelay: bool,
33
34
  }
34
35
 
35
36
  /// Authentication information for connecting to Redis/Valkey servers
@@ -283,6 +284,8 @@ impl From<protobuf::ConnectionRequest> for ConnectionRequest {
283
284
  .map(|cert| cert.to_vec())
284
285
  .collect();
285
286
 
287
+ let tcp_nodelay = value.tcp_nodelay.unwrap_or(true);
288
+
286
289
  ConnectionRequest {
287
290
  read_from,
288
291
  client_name,
@@ -302,6 +305,7 @@ impl From<protobuf::ConnectionRequest> for ConnectionRequest {
302
305
  lazy_connect,
303
306
  refresh_topology_from_initial_nodes,
304
307
  root_certs,
308
+ tcp_nodelay,
305
309
  }
306
310
  }
307
311
  }
@@ -90,6 +90,8 @@ message ConnectionRequest {
90
90
  bool refresh_topology_from_initial_nodes = 18;
91
91
  string lib_name = 19;
92
92
  repeated bytes root_certs = 20;
93
+ // for future backport: the number skip is due to not porting PR 4759 and 5093
94
+ optional bool tcp_nodelay = 24;
93
95
  }
94
96
 
95
97
  message ConnectionRetryStrategy {
@@ -289,15 +289,21 @@ class AdvancedBaseClientConfiguration:
289
289
  tls_config (Optional[TlsAdvancedConfiguration]): The advanced TLS configuration settings.
290
290
  This allows for more granular control of TLS behavior, such as enabling an insecure mode
291
291
  that bypasses certificate validation.
292
+ tcp_nodelay (Optional[bool]): Controls TCP_NODELAY socket option (Nagle's algorithm).
293
+ When True, disables Nagle's algorithm for lower latency by sending packets immediately without buffering.
294
+ When False, enables Nagle's algorithm to reduce network overhead by buffering small packets.
295
+ If not explicitly set, defaults to True.
292
296
  """
293
297
 
294
298
  def __init__(
295
299
  self,
296
300
  connection_timeout: Optional[int] = None,
297
301
  tls_config: Optional[TlsAdvancedConfiguration] = None,
302
+ tcp_nodelay: Optional[bool] = None,
298
303
  ):
299
304
  self.connection_timeout = connection_timeout
300
305
  self.tls_config = tls_config
306
+ self.tcp_nodelay = tcp_nodelay
301
307
 
302
308
  def _create_a_protobuf_conn_request(
303
309
  self, request: ConnectionRequest
@@ -305,6 +311,9 @@ class AdvancedBaseClientConfiguration:
305
311
  if self.connection_timeout:
306
312
  request.connection_timeout = self.connection_timeout
307
313
 
314
+ if self.tcp_nodelay is not None:
315
+ request.tcp_nodelay = self.tcp_nodelay
316
+
308
317
  if self.tls_config:
309
318
  if self.tls_config.use_insecure_tls:
310
319
  # Validate that TLS is enabled before allowing insecure mode
@@ -564,9 +573,10 @@ class AdvancedGlideClientConfiguration(AdvancedBaseClientConfiguration):
564
573
  self,
565
574
  connection_timeout: Optional[int] = None,
566
575
  tls_config: Optional[TlsAdvancedConfiguration] = None,
576
+ tcp_nodelay: Optional[bool] = None,
567
577
  ):
568
578
 
569
- super().__init__(connection_timeout, tls_config)
579
+ super().__init__(connection_timeout, tls_config, tcp_nodelay)
570
580
 
571
581
 
572
582
  class GlideClientConfiguration(BaseClientConfiguration):
@@ -744,8 +754,9 @@ class AdvancedGlideClusterClientConfiguration(AdvancedBaseClientConfiguration):
744
754
  connection_timeout: Optional[int] = None,
745
755
  tls_config: Optional[TlsAdvancedConfiguration] = None,
746
756
  refresh_topology_from_initial_nodes: bool = False,
757
+ tcp_nodelay: Optional[bool] = None,
747
758
  ):
748
- super().__init__(connection_timeout, tls_config)
759
+ super().__init__(connection_timeout, tls_config, tcp_nodelay)
749
760
  self.refresh_topology_from_initial_nodes = refresh_topology_from_initial_nodes
750
761
 
751
762
  def _create_a_protobuf_conn_request(
@@ -1,5 +1,5 @@
1
1
  [project]
2
- version = "2.2.3"
2
+ version = "2.2.5"
3
3
  name = "valkey-glide-sync"
4
4
  description = "Valkey GLIDE Sync client. Supports Valkey and Redis OSS."
5
5
  readme = "README.md"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: valkey-glide-sync
3
- Version: 2.2.3
3
+ Version: 2.2.5
4
4
  Summary: Valkey GLIDE Sync client. Supports Valkey and Redis OSS.
5
5
  License: Apache-2.0
6
6
  Classifier: Topic :: Database