1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
|
# Unreleased
# 0.26.4
- Further improve `rediss://` URLs used with Redis sentinel. Now avoid override explictly set `ssl:` paramter.
- Fix compatibility with `redis-rb` in sentinel mode.
# 0.26.3
- Fix `rediss://` (ssl) URLs used with Redis sentinel.
- Handle Ruby 4.0 connection timeout raising an `IO::Timeout` instead of `Errno::ETIMEDOUT`.
- Entirely close the connection on authentication failures.
# 0.26.2
- Fix compatibility with `connection_pool` version 3+.
# 0.26.1
- Fix a few corner cases where `RedisClient::Error#final?` was innacurate.
- hiredis-client: Properly reconnect to the new leader after a sentinel failover.
# 0.26.0
- Add `RedisClient::Error#final?` and `#retriable?` to allow middleware to filter out non-final errors.
- Fix precedence of `db: nil` initialization parameter.
```ruby
Redis.new(url: "redis://localhost:6379/3", db: nil).db
```
Before: `0`
After: `3`
# 0.25.3
- Fix `hiredis-client` compilation with `clang 21`.
# 0.25.2
- Fix circuit breakers to respect the `error_threshold_timeout` config is provided.
- Fix circuit breakers to clear errors when closing back.
# 0.25.1
- Fix Ruby driver TCP keep alive TTL. It was intended to be 120 seconds but was mistakenly set to 15 seconds.
# 0.25.0
- Fix `hiredis-client` compilation with GCC 15.
- Fix `hiredis-client` from a work directory with spaces.
- Add `CommandError#code`.
- Add `RedisClient::NoScriptError` for `EVALSHA`.
# 0.24.0
- Allow `sentinel_password` to be provided as a `Proc`.
- Ensure `Config#inspect` and `Config#to_s` do not display stored passwords.
# 0.23.2
- Fix retry logic not to attempt to retry on an open circuit breaker. Fix #227.
# 0.23.1
- Fix a potential crash in `hiredis-client` when using subcriptions (`next_event`). See #221.
# 0.23.0
- Allow `password` to be a callable. Makes it easy to implement short lived password authentication strategies.
- Fix a thread safety issue in `hiredis-client` when using the `pubsub` client concurrently.
# 0.22.2
- Fix the sentinel client to properly extend timeout for blocking commands.
- Fix IPv6 support in `RedisClient::Config#server_url`.
# 0.22.1
- Fix `ProtocolError: Unknown sigil type` errors when using SSL connection. See #190.
# 0.22.0
- Made various performance optimizations to the Ruby driver. See #184.
- Always assume UTF-8 encoding instead of relying on `Encoding.default_external`.
- Add `exception` flag in `pipelined` allowing failed commands to be returned in the result array when set to `false`. See #187.
# 0.21.1
- Handle unresolved Sentinel master/replica error when displaying server URL in exceptions. See #182.
# 0.21.0
- Include redis server URL in most error messages. See #178.
- Close Redis Sentinel connection after resolving role. See #176.
# 0.20.0
- Accept `unix://` schemes as well as simple paths in the `url:` config parameter. #170.
- Make basic usage Ractor compatible.
# 0.19.1
- Fixed a bug in `hiredis-client` that could cause a crash if interrupted by `Timeout.timeout` or other `Thread#raise` based mecanism.
- Fixed a GC bug that could cause crashes in `hiredis-client`.
# 0.19.0
- Revalidate connection in `RedisClient#connected?`
- Eagerly fail if `db:` isn't an Integer. #151.
# 0.18.0
- Expose more connection details such as `host`, `db`, etc on `RedisClient`.
# 0.17.1
- Add support for `NaN` in RESP3 protocol doubles.
This was initially missing from the spec and added about a year ago.
# 0.17.0
- Adds `sentinel_username` and `sentinel_password` options for `RedisClient#sentinel`
# 0.16.0
- Add `RedisClient#disable_reconnection`.
- Reverted the special discard of connection. A regular `close(2)` should be enough.
# 0.15.0
- Discard sockets rather than explictly close them when a fork is detected. #126.
- Allow to configure sentinel client via url. #117.
- Fix sentinel to preverse the auth/password when refreshing the sentinel list. #107.
- Added `RedisClient#measure_round_trip_delay` method. #113.
# 0.14.1
- Include the timeout value in TimeoutError messages.
- Fix connection keep-alive on FreeBSD. #102.
# 0.14.0
- Implement Sentinels list automatic refresh.
- hiredis binding now implement GC compaction and write barriers.
- hiredis binding now properly release the GVL around `connect(2)`.
- hiredis the client memory is now re-used on reconnection when possible to reduce allocation churn.
# 0.13.0
- Enable TCP keepalive on redis sockets. It sends a keep alive probe every 15 seconds for 2 minutes. #94.
# 0.12.2
- Cache calls to `Process.pid` on Ruby 3.1+. #91.
# 0.12.1
- Improve compatibility with `uri 0.12.0` (default in Ruby 3.2.0).
# 0.12.0
- hiredis: fix a compilation issue on macOS and Ruby 3.2.0. See: #79
- Close connection on MASTERDOWN errors. Similar to READONLY.
- Add a `circuit_breaker` configuration option for cache servers and other disposable Redis servers. See #55 / #70
# 0.11.2
- Close connection on READONLY errors. Fix: #64
- Handle Redis 6+ servers with a missing HELLO command. See: #67
- Validate `url` parameters a bit more strictly. Fix #61
# 0.11.1
- hiredis: Workaround a compilation bug with Xcode 14.0. Fix: #58
- Accept `URI` instances as `uri` parameter.
# 0.11.0
- hiredis: do not eagerly close the connection on read timeout, let the caller decide if a timeout is final.
- Add `Config#custom` to store configuration metadata. It can be used for per server middleware configuration.
# 0.10.0
- Added instance scoped middlewares. See: #53
- Allow subclasses of accepted types as command arguments. Fix: #51
- Improve hiredis driver error messages.
# 0.9.0
- Automatically reconnect if the process was forked.
# 0.8.1
- Make the client resilient to `Timeout.timeout` or `Thread#kill` use (it still is very much discouraged to use either).
Use of async interrupts could cause responses to be interleaved.
- hiredis: handle commands returning a top-level `false` (no command does this today, but some extensions might).
- Workaround a bug in Ruby 2.6 causing a crash if the `debug` gem is enabled when `redis-client` is being required. Fix: #48
# 0.8.0
- Add a `connect` interface to the instrumentation API.
# 0.7.4
- Properly parse script errors on pre 7.0 redis server.
# 0.7.3
- Fix a bug in `url` parsing conflicting with the `path` option.
# 0.7.2
- Raise a distinct `RedisClient::OutOfMemoryError`, for Redis `OOM` errors.
- Fix the instrumentation API to be called even for authentication commands.
- Fix `url:` configuration to accept a trailing slash.
# 0.7.1
- Fix `#pubsub` being called when reconnection is disabled (redis-rb compatibility fix).
# 0.7.0
- Sentinel config now accept a list of URLs: `RedisClient.sentinel(sentinels: %w(redis://example.com:7000 redis://example.com:7001 ..))`
# 0.6.2
- Fix sentinel to not connected to s_down or o_down replicas.
# 0.6.1
- Fix `REDIS_REPLY_SET` parsing in `hiredis`.
# 0.6.0
- Added `protocol: 2` options to talk with Redis 5 and older servers.
- Added `_v` versions of `call` methods to make it easier to pass commands as arrays without splating.
- Fix calling `blocking_call` with a block in a pipeline.
- `blocking_call` now raise `ReadTimeoutError` if the command didn't complete in time.
- Fix `blocking_call` to not respect `reconnect_attempts` on timeout.
- Stop parsing RESP3 sets as Ruby Set instances.
- Fix `SystemStackError` when parsing very large hashes. Fix: #30
- `hiredis` now more properly release the GVL when doing IOs.
# 0.5.1
- Fix a regression in the `scan` familly of methods, they would raise with `ArgumentError: can't issue an empty redis command`. Fix: #24
# 0.5.0
- Fix handling of connection URLs with empty passwords (`redis://:pass@example.com`).
- Handle URLs with IPv6 hosts.
- Add `RedisClient::Config#server_url` as a quick way to identify which server the client is pointing to.
- Add `CommandError#command` to expose the command that caused the error.
- Raise a more explicit error when connecting to older redises without RESP3 support (5.0 and older).
- Properly reject empty commands early.
# 0.4.0
- The `hiredis` driver have been moved to the `hiredis-client` gem.
# 0.3.0
- `hiredis` is now the default driver when available.
- Add `RedisClient.default_driver=`.
- `#call` now takes an optional block to cast the return value.
- Treat `#call` keyword arguments as Redis flags.
- Fix `RedisClient#multi` returning some errors as values instead of raising them.
# 0.2.1
- Use a more robust way to detect the current compiler.
# 0.2.0
- Added `RedisClient.register` as a public instrumentation API.
- Fix `read_timeout=` and `write_timeout=` to apply even when the client or pool is already connected.
- Properly convert DNS resolution errors into `RedisClient::ConnectionError`. Previously it would raise `SocketError`
# 0.1.0
- Initial Release
|