Releases: dahomey-technologies/rustis
Releases · dahomey-technologies/rustis
0.19.1
0.19.0
This release introduces significant performance optimizations with the new "Fast Path" serialization, simplified cluster command routing, a major refactor of error handling.
BREAKING CHANGES
- Removal of Redis Graph: Support for the Redis Graph module has been removed, including all associated commands and internal state management.
- Typed Error Handling: Replaced generic string-based errors with a structured ClientError enum. This provides more granular variants such as ConfigParseError, ClusterConfig, ExecCalledWithoutMulti, and UnexpectedMessageReceived. new dependency to
thiserror - Command Signature Updates: Several commands (like evalsha) have been simplified, and internal traits now require explicit cluster routing information.
New Features & Improvements
- WAITAOF Support: Added the WAITAOF command with integrated cluster policy management.
Performance Optimizations
- Fast Path Serialization: Introduced FastPathCommandBuilder which optimizes the serialization of simple commands using primitives, significantly reducing CPU overhead.
- Allocation Reduction in Pipelines: The Pipeline and transaction systems now utilize SmallVec (stack-allocated for up to 10 commands/flags) to avoid heap allocations for small batches.
- Pipeline Capacity Reservation: Added a reserve(additional) method to pipelines to pre-allocate memory before bulk command queuing.
- Optimized RESP Deserialization: Improved scanning logic within the RespDeserializer and added #[inline] hints to critical serialization paths.
- Explicit Cluster Routing: Updated all core command builders (including Bloom, Generic, Hash, List, and String commands) to use .key() explicitly, ensuring reliable command routing in Redis Cluster environments.
- Cluster Request/Response Policies: Refactored commands like SLOWLOG and TOUCH to include explicit RequestPolicy (e.g., AllShards, MultiShard) and ResponsePolicy (e.g., AggSum), improving behavior across complex topologies.
- switched allocator to
mimalloc
0.18.0
BREAKING CHANGES:
- removed resp::Arg trait. From now own, commands expect a type that implements the Serialize trait for more flexibility and to be more standard.
- CommandBuider struct has been introduced to serialize command arguments on the fly into a RESP buffer for less allocations and less copies
- Command struct is now based on a Bytes RESP buffer and a command name & arguments layout to extract in performant way name & arguments on demand.
- All high level commands & network layer have been refactored consequently
0.17.0
- Refactored Args and Response traits for more simplicity
- Removed uncessary pubsub statuses in NetworkHandler thanks to RESP3
0.6.13
- Clarify pub/sub implementation in documentation
0.16.2
- fix: don't panic on slice resp_buf to display
- fix Cache compilation after change in moka API.
0.16.1
Fix release compilation
0.16.0
- Added client-side caching support
0.15.2
New optional feature json: added Json and JsonRef wrappers for Redis JSON (de)serialization.
- Added
Json<T>for deserializing JSON-encoded bulk strings from Redis responses. - Added
JsonRef<'a, T>for serializing Rust values to JSON when sending commands.
0.15.1
- Added generic iterator-based argument helpers (
single_arg_iter,single_arg_ref_iter,key_value_args_iter,key_value_args_ref_iter) to efficiently build command arguments from any clonable iterator or iterator of references.