Revision history for Future-IO-Redis
0.001004 2026-02-02
- Bug Fix: Socket close ordering
- Fixed Future::IO corruption when disconnect() called with active watchers
- Cancel _current_read_future before socket close ensures Future::IO
unregisters watchers while fileno is still valid
- Let Perl's DESTROY handle close() after futures are cancelled
- Breaking Change: Future::IO configuration
- Removed Future::IO->load_best_impl from module
- Libraries should not configure Future::IO - only application entry
points should (following LeoNerd's guidance)
- Added comprehensive EVENT LOOP CONFIGURATION documentation section
- Updated SYNOPSIS with proper configuration guidance
- Improvements:
- Apply connect_timeout to Redis handshake (AUTH, SELECT, CLIENT SETNAME)
- Removed unused read_timeout and write_timeout settings
- Examples:
- Updated pagi-chat example for PAGI 0.001016 auto-configured Future::IO
- Testing:
- New t/93-socket-cleanup/close-with-watchers.t for disconnect scenarios
- Enhanced t/10-connection/socket-cleanup.t
0.001003 2026-01-18
- New Feature: Enhanced Lua Script Helper API
- define_command() for registering named scripts with metadata
- run_script() for executing registered scripts by name
- get_script(), list_scripts() for registry access
- preload_scripts() for pipeline optimization
- Automatic EVALSHA with EVAL fallback (NOSCRIPT handling)
- Pipeline integration via $pipe->run_script()
- Optional method installation (install => 1)
- Support for fixed or dynamic key counts
- Script.pm Enhancements:
- New run() method with explicit keys/args arrays
- New run_on() method for explicit connection targeting
- Metadata fields: name, num_keys, description
- Documentation:
- New LUA SCRIPTING section in Async::Redis POD
- Comprehensive examples for all script methods
- Pipeline integration examples
- Testing:
- t/60-scripting/define-command.t (18 tests)
- t/60-scripting/script-registry.t (17 tests)
- t/60-scripting/pipeline-scripts.t (16 tests)
- t/60-scripting/pagi-channels.t (16 tests) - realistic channel layer scenarios
0.001002 2026-01-17
- Bug Fix: Concurrent command response matching
- Fixed race condition where multiple async commands on a single
connection could receive mismatched responses
- Implemented Response Queue pattern with FIFO ordering
- Commands now register in inflight queue before sending
- Single reader coroutine processes responses in order
- New Features:
- Added inflight_count() method to check pending commands
- Added _wait_for_inflight_drain() for pipeline/PubSub synchronization
- Documentation:
- Added CONCURRENT COMMANDS section to POD
- Documented Response Queue pattern and best practices
- Testing:
- Added t/92-concurrency/response-ordering.t test suite
- Tests for concurrent SET, GET, mixed command types
- Stress test with 100 concurrent commands
- Inflight tracking verification
0.001001 2026-01-03
- Initial release
- Core Features:
- Full async/await support via Future::IO
- Event loop agnostic (IO::Async, AnyEvent, UV, etc.)
- RESP2 protocol support via Protocol::Redis
- All Redis commands via auto-generated methods
- Connection Features:
- TCP and TLS/SSL connections
- URI connection strings
- Automatic reconnection with exponential backoff
- Connection pooling with health checks
- Fork-safe for pre-fork servers
- Command Features:
- Pipelining for improved throughput
- Transactions (MULTI/EXEC/WATCH)
- Lua scripting with EVALSHA optimization
- SCAN iterators (SCAN, HSCAN, SSCAN, ZSCAN)
- Key prefixing
- PubSub:
- Channel and pattern subscriptions
- Sharded subscriptions (Redis 7+)
- Observability:
- OpenTelemetry tracing and metrics
- Debug logging
- Credential redaction
- Testing:
- Comprehensive test suite
- Integration tests
- Performance benchmarks