Revision history for Net-Async-Redis 6.006 2024-12-11 23:15:20+08:00 Asia/Singapore [Bugs fixed] - live migrations in a cluster would return the ASK error, we now handle that automatically rather than propagating it back to the client (with a limit on the number of attempts we'll make, to avoid cycles and broken cluster situations) 6.005 2024-11-08 23:45:45+08:00 Asia/Singapore [New features] - automatic creation of Redis methods based on extracted keyspec as a fallback [Bugs fixed] - documentation and code disagreed on the `use_read_replica` parameter, both are now supported but will emit a warning if the undocumented form is used 6.004 2024-11-06 08:35:33+08:00 Asia/Singapore [New features] - cluster direct access to replica connection via `$node->replica_connection` - direct all read-only queries to replicas instead of primaries via `use_read_replica` parameter to Net::Async::Redis::Cluster constructor or `->configure` method - latest command spec imported as of 2024-11-04 6.003 2024-10-23 06:15:05+08:00 Asia/Singapore [Bugs fixed] - SSUBSCRIBE and SPUBLISH were not correctly applying slot mapping, which could lead to infinite loops in a cluster 6.002 2024-09-18 07:44:19+08:00 Asia/Singapore [Bugs fixed] - switch back to plain inheritance, since Object::Pad rôles do not yet allow method overrides - this was causing issues with Net::Async::Redis::Cluster methods not being available 6.001 2024-09-15 09:27:56+08:00 Asia/Singapore [New features] - should handle reconnect more gracefully when commands are queued and the current connection drops [Bugs fixed] - some potential cases where protocol may go out of sync when there's an error during MULTI [Internal] - refactored to use an Object::Pad rôle for the command list 6.000 2024-01-28 05:00:01+08:00 Asia/Singapore [New features] - Initial OpenTelemetry support, thanks to JJATRIA's work on implementing (see OpenTelemetry::SDK). Note that this is expected to evolve in future as more async support is added to the OpenTelemetry SDK. [Bugs fixed] - some configuration features, such as clientside caching, could end up triggering a rapid memory leak due to interactions with Syntax::Keyword::Dynamically, the connection code has been refactored to avoid this (partially related to https://rt.cpan.org/Public/Bug/Display.html?id=148742) 5.001 2023-11-15 13:42:42+08:00 Asia/Singapore [New features] - helper methods for some standard cluster commands with no keys - these previously failed and generated warnings, now they accumulate results from all primary nodes and return the aggregated results - fall back to a random node when no keys are found for other commands - we now use the same primary connection across multiple slots, reduces the connection count when the shards are highly fragmented 5.000 2023-11-05 21:22:40+08:00 Asia/Singapore [Refactoring] - migrated to Object::Pad, for better OO handling (still uses a hashref-based object implementation, for backwards compatibility). Since this has the potential to be a big change, and may affect backward compatibility, the major version has been increased, and the Object::Pad migration will be released in steps during this version series (e.g. conversion to `field` instead of `$self->{accessor}`, move Net::Async::Redis::Commands to a rôle) - MULTI handling rewritten to handle cluster mode and mixed regular/transactional commands better [Bugs fixed] - previous versions exhibited excessive memory usage and poor performance when attempting to call MULTI within MULTI, the refactoring now includes tests to cover this scenario 4.002 2023-10-26 11:39:40+08:00 Asia/Singapore [Bugs fixed] - previously unable to connect to a single-node cluster, since the CLUSTER SLOTS output did not include any host/IP information (single-node clusters are not recommended, but useful for testing and local development!) - subscription on a cluster would fail since the subscription key isn't sharded - connection closure by the Redis server should be handled better now 4.001 2023-09-21 06:39:51+08:00 Asia/Singapore [Bugs fixed] - MULTI/EXEC were emitting a log message at `info` level 4.000 2023-08-27 01:12:09+08:00 Asia/Singapore [New features] - latest commands imported via `COMMAND LIST`, covering Redis 7.2 - support for key spec parsing via https://redis.io/docs/reference/key-specs/ [Bugs fixed] - MULTI/EXEC support overhaul for Net::Async::Redis::Cluster 3.024 2023-06-29 12:19:45+08:00 Asia/Singapore [New features] - helper method to allow Net::Async::Redis::Cluster::XS to ensure it's getting XS-backed nodes 3.023 2023-05-08 04:37:32+08:00 Asia/Singapore [New features] - support for sharded pubsub (`SSUBSCRIBE` / `SPUBLISH`) [Bugs fixed] - exception during subscription cancellation, thanks to Pavel Shaydo for patch+test - subscription handling should now work properly and consistently on both RESP2/RESP3 - `XREAD`/`XREADGROUP` now returns empty arrayref when no items, for consistency - cancelling a cached `GET` could cause an exception due to the request Future going out of scope 3.022 2022-03-21 02:11:58+08:00 Asia/Kuala_Lumpur [New features] - Added latest commands as of 7.0 RC2 3.021 2022-02-24 23:13:49+08:00 Asia/Kuala_Lumpur [New features] - to improve compatibility in future, the approach for handling multi-word commands such as `XGROUP CREATE` now applies to all commands, including cases such as `MEMORY DOCTOR` so you can use `->memory('DOCTOR')` or `->memory_doctor` interchangeably. This is due to the command list we auto-extract from the Redis website potentially changing the structure again in future. 3.020 2022-02-17 17:47:08+08:00 Asia/Kuala_Lumpur [Bugs fixed] - the ->xgroup method was still not available in Net::Async::Redis::Cluster due to an incomplete fix in 3.019, thanks to Nael Alolwani for catching and fixing this 3.019 2022-02-16 15:42:23+08:00 Asia/Kuala_Lumpur [Bugs fixed] - the ->xgroup method was not available due to 7.0 changes, added back in 3.018 2022-02-01 11:58:52+08:00 Asia/Kuala_Lumpur [New features] - Added latest commands from Redis 7.0 release candidate 3.017 2021-10-18 00:15:14+08:00 Asia/Kuala_Lumpur [New features] - Added ->client_no_evict from latest Redis 3.016 2021-09-26 02:23:34+08:00 Asia/Kuala_Lumpur [New features] - Added readonly methods from latest Redis, e.g. `->sort_ro` and `->bitfield_ro` 3.015 2021-07-27 03:47:43+08:00 Asia/Kuala_Lumpur [Bugs fixed] - The CLUSTER INFO command generated warnings (RT138053, thanks to Nael for reporting) 3.014 2021-07-20 18:37:09+08:00 Asia/Kuala_Lumpur [New features] - ->expiretime and ->eval_ro from latest commands list 3.013 2021-04-27 10:28:39+08:00 Asia/Kuala_Lumpur No new features. Bugs fixed: - removed `dynamically` usage for `$log->{context}` since it can trigger a memory leak and also affects performance, see: https://github.com/binary-com/perl-Myriad/issues/117 for an example 3.012 2021-04-22 21:26:23+08:00 Asia/Kuala_Lumpur New features: - automatic connection and queuing is now more reliable, you should only need `await $redis->connected` in a few cases now - acess to client-side invalidation events, for implementing observables - enable keyspace notifications in cluster mode Bugs fixed: - various issues with client-side caching resolved - in cluster mode, XREAD could fail due to incorrect node lookup for key (Github #23, thanks to Marc Frank for the patch) - the stream read/write lengths were using the same internal key, so any changes to one value would affect the other as well - XINFO was mapping to the wrong key in cluster mode, thanks to Eyad for catching and fixing this 3.011 2021-02-03 03:43:05+08:00 Asia/Kuala_Lumpur New features: - ->failover added from latest commands list 3.010 2021-02-01 04:56:52+08:00 Asia/Kuala_Lumpur New features: - ->bootstrap will now fail if the cluster's nodes addresses are not initiated. - cluster->execute_command will now redirect the command to the correct node if 'MOVED' error received. - latest commands from 6.2 - this includes ->getdel, ->getex, ->zrandfield 3.009 2021-01-27 06:33:18+08:00 Asia/Kuala_Lumpur No new features. Bugs fixed: - `XGROUP` KEY_FINDER index was wrong. - `PUBLISH`/`SUBSCRIBE` were not in the KEY_FINDER index. - Net::Async::Redis::Cluster was ignoring the protocol compatibility layer. 3.008 2021-01-17 01:29:19+08:00 Asia/Kuala_Lumpur New features: - latest commands from 6.2 - this includes ->xautoclaim, ->client_unpause and the `count => 'any'` option on various commands 3.007 2020-12-31 07:23:30+08:00 Asia/Kuala_Lumpur New features: - latest commands from 6.2 - this includes ->geosearch, ->client_info, ->client_trackinginfo etc. 3.006 2020-12-04 05:33:59+08:00 Asia/Kuala_Lumpur New features: - latest commands from 6.0.9 - ->copy is now supported (from latest Redis release) - stream handling now documents `MKSTREAM` and `NOMKSTREAM`, and updates the trimming to mention `~` (approximate) and `=` (exact) modes for removing old entries 3.005 2020-11-16 05:20:49+08:00 Asia/Kuala_Lumpur New features: - ->zdiff and ->zdiffstore commands from latest Redis release - provide RESP2/RESP3 compatibility when hashrefs option is not enabled, otherwise some commands such as ->xreadgroup can return inconsistent results between versions (thanks Eyad, Paul and Nael for the patch) - cluster mode now provides basic slot calculation caching, since this yields a small performance improvement 3.004 2020-11-04 12:40:40+08:00 Asia/Kuala_Lumpur No new features. Bugs fixed: - top-level hashes also now follow the `hashrefs` configuration option, this affects methods such as `->xreadgroup`. 3.003 2020-11-03 13:58:00+08:00 Asia/Kuala_Lumpur No new features. Bugs fixed: - RESP3 protocol changes (enabled by default in earlier versions of this module) meant that you'd end up with hashrefs or arrayrefs depending on what version of Redis you were connecting to. This behaviour is now controlled by the `hashrefs` configuration option, and is disabled by default even under RESP3. 3.002 2020-10-12 00:19:11+08:00 Asia/Kuala_Lumpur New features: - latest commands from 6.0.8, including LMOVE/BLMOVE 3.001 2020-09-22 01:51:28+08:00 Asia/Kuala_Lumpur New features: - RESP3 no longer establishes a separate client-side caching connection, since it can share the main connection - `AUTH username password` from latest Redis now supported Bugs fixed: - proper differentiation between regular arrays and pubsub messages when in pubsub mode on a RESP3 connection - avoid establishing client-side caching connection until we need one, could also have resulted in an attempt to connect to the wrong Redis server if using `->configure(host => ...); ->configure(port => ...);` - on a failure, continue with next item in pipeline - otherwise subsequent requests would get stuck 3.000 2020-09-14 02:00:10+08:00 Asia/Kuala_Lumpur New features: - RESP3 support, for Redis 6 - pubsub is now allowed on the same connection as other traffic if the connection is in RESP3 mode - protocol is autodetected via `HELLO` command, pass `protocol => 'resp2'` to disable this 2.007 2020-09-05 02:08:25+08:00 Asia/Kuala_Lumpur New features: - applies client_name on connection if configured - opentracing can be controlled by `->configure(opentracing => 1 || 0)` Note that OpenTracing support is now *disabled* by default, since it incurs a small (~5%) performance penalty. The USE_OPENTRACING env var is still supported for enabling/disabling globally. 2.006 2020-08-26 10:23:47+08:00 Asia/Kuala_Lumpur New features: - latest command updates from Redis 6.0.6 - main change here is ->lpos renaming "first" to "rank", see https://redis.io/commands/lpos - Redis database selection via URI or `database` ->configure parameter - OpenTracing support via OpenTracing::Any 2.005 2020-06-28 00:20:52+08:00 Asia/Kuala_Lumpur New features: - LPOS method added from latest Redis release Bugs fixed: - URI parameter without `redis://` prefix is now upgraded, allowing `->new(uri => 'localhost:1234')` (Github issue #7, thanks LeoNerd) - pipelining encoding bug (Github issue #14, thanks to dankroboth for reporting and highlighting the faulty code) 2.004_001 2020-06-01 06:46:51+08:00 Asia/Kuala_Lumpur (TRIAL RELEASE) New features: - initial client-side caching support for ->get calls, pass client_side_caching_size => $size to enable. Please note that this key is likely to change in a future version. 2.004 2020-06-01 05:29:32+08:00 Asia/Kuala_Lumpur New features: - acl_getuser and related commands added - client-side caching documentation updated 2.003 2020-05-01 00:37:12+08:00 Asia/Kuala_Lumpur New features: - latest commands from Redis 6.0 GA release This is intended to be a stable release with next phase of development aimed at supporting the newer RESP3 protocol: https://github.com/antirez/RESP3 2.002_005 2020-04-29 02:50:10+08:00 Asia/Kuala_Lumpur (TRIAL RELEASE) No new features. Bugs fixed: - the ->multi return value was a nested Future, changing the result compared to previous versions - thanks to Nael for reporting - subscribe/psubscribe interleaved with ping or other requests could get confused about the pending queue 2.002_004 2020-04-23 02:19:48+08:00 Asia/Kuala_Lumpur (TRIAL RELEASE) New features: - pipeline parameter now does something, set to 0 to allow "unlimited" pipelined requests (as in keep trying until the Redis server stops listening to process the backlog) 2.002_003 2020-04-23 01:59:30+08:00 Asia/Kuala_Lumpur (TRIAL RELEASE) No new features. Bugs fixed: - MULTI implementation broke in the previous version 2.002_002 2020-04-14 01:40:41+08:00 Asia/Kuala_Lumpur (TRIAL RELEASE) New features: - Latest Redis has new ACL methods, including those in Commands.pm - simple ping latency example for testing 2.002_001 2020-04-03 22:02:06+08:00 Asia/Kuala_Lumpur (TRIAL RELEASE) New features: - Redis cluster support, https://redis.io/topics/cluster-spec - updated to latest Redis 5.x commands 2.001 2019-07-22 13:36:07+08:00 Asia/Kuala_Lumpur New features: - improved performance when issuing many Redis commands at once - ->watch_keyspace now provides a Ryu::Source instance - latest command parameters from redis.io (ABSTTL etc. for `restore` and TYPE for `scan`) New examples: - moving-window sum 2.000 2019-06-16 22:44:26+08:00 Asia/Kuala_Lumpur New features: - now requires Future::AsyncAwait 1.014 2019-02-04 02:05:21+08:00 Asia/Kuala_Lumpur New features: - increase default buffer sizes from 8KB to 1MB, to improve efficiency in the common case where there are only a few active Redis connections - support configurable buffer sizes via `stream_read_len` / `stream_write_len` New examples: - `incr-ratelimit-aa.pl` and `consumer-groups-aa.pl` for Future::AsyncAwait basic examples Bugs fixed: - the example for `->subscription` was wrong, thanks to Michael Mueller for catching and patching! - retain completion Future when executing commands 1.013 2018-12-10 02:03:19+08:00 Asia/Kuala_Lumpur New features: - support for `NOACK` and type parameter for `client_kill`, as provided in latest Redis 5.x release 1.012 2018-10-19 11:03:35+08:00 Asia/Kuala_Lumpur No new features. Examples: - Improved documentation for consumer-groups.pl example (tested against 5.0 release) 1.011 2018-10-06 20:50:12+08:00 Asia/Kuala_Lumpur No new features. Bug fixes: - error handling improved, previously requests were not marked as failed - protocol handling for 'undef' arrays (treated as `undef` now) Examples: - consumer-groups.pl example for XADD/XREADGROUP 1.010 2018-10-06 15:26:00+08:00 Asia/Kuala_Lumpur New commands: - CLIENT ID - CLIENT UNBLOCK from Redis 5.0rc5. 1.009 2018-10-03 19:26:59+08:00 Asia/Kuala_Lumpur Updated to latest Redis 5.0 commands from last RC prior to 5.0 release. 1.008 2018-09-27 11:28:37+08:00 Asia/Kuala_Lumpur No new features. Bug fixes: - The connection was cached even if connection failed/interrupted so reconnecting attempts were failing as well, now the connection object will get deleted on failure - Subscriptions were not cancelled when the connection being interrupted, now they are cancelled properly (thanks to Eyad Arnabeh for reporting and fixing) 1.007 2018-09-05 10:11:44+08:00 Asia/Kuala_Lumpur No new features. Bug fixes: - Support auth parameter, rather than insisting on auth information be passed as part of the URI (thanks to Nael Alolwani for reporting) - "Pipeline depth" notifications were logged at `info` level, these are an internal diagnostic and not useful for application code, these are now `trace` level messages 1.006 2018-07-12 22:39:10+08:00 Asia/Kuala_Lumpur No new features. Bug fixes: - PSUBSCRIBE wasn't working (reported by Bill Marriott and leonerd, fix+tests by leonerd, I did little more than hit the merge button - thanks!) Dependencies: - Math::Random::Secure dep was missing (thanks MANWAR!) 1.005 2018-01-06 18:18:22+08:00 Asia/Kuala_Lumpur No new features. Dependencies: - Class::Method::Modifiers, and make sure we have a recent version of Future.pm 1.004 2017-12-29 20:10:42+08:00 Asia/Kuala_Lumpur No new features. Performance improvements: - DISCARD/EXEC are now pipelined, we don't need to wait for the write before sending more commands 1.003 2017-12-26 18:00:36+08:00 Asia/Kuala_Lumpur New features: - support queuing for MULTI and other commands - support for passing a Redis URI - minor performance improvements in protocol implementation and event handling Bugs fixed: - it was possible for cancelled/failed items within ->multi to cause the protocol handling to go out of sync, this is now fixed. - multi-word commands were generated incorrectly, these now work again Examples: - `examples/job-hash-worker.pl` - reliable priority-queue worker with job details in separate hash key - `examples/job-hash-submit.pl` - submit requests for priority-queue workers 1.002 2017-12-11 06:06:47+08:00 Asia/Kuala_Lumpur Dependencies: - Explicit Log::Any dependency to ensure that context support is available New features: - PSUBSCRIBE support 1.001 2017-12-11 05:38:20+08:00 Asia/Kuala_Lumpur Dependencies: - Added Test::HexString and Test::Deep to test deps list New features: - Support for MULTI transactions via ->multi method Examples: - `examples/job-worker.pl` - Simple list-based job queue - `examples/multi.pl` - Transaction using MULTI 1.000 2017-12-09 16:51:40+08:00 Asia/Kuala_Lumpur First stable release. Note that there are some API changes, but previous code should work mostly unmodified. New features: - Dropped Protocol::Redis in favour of local implementation - Separated out commands into an autogenerated class to make it easier to keep up to date with protocol changes - Better support for subscriptions (see `examples/pub|sub.pl`) - Dropped JSON::MaybeXS and Mixin::Event::Dispatch deps, events are now handled through Ryu Known issues: - All data is assumed to be binary, callers need their own Encode::encode()/::decode() calls - future versions are likely to include an `->encoding` setting and/or `_utf8` versions of string methods. 0.003 2015-11-15 03:16:27+00:00 Europe/London No new features. Dependencies: - Added List::Util 1.29, for pairmap 0.002 2015-11-13 16:35:59+00:00 Europe/London Bugs fixed: - [RT107134](https://rt.cpan.org/Public/Bug/Display.html?id=107134) Include JSON::MaybeXS dependency 0.001 2015-09-14 02:30:30+01:00 Europe/London Initial CPAN release