#redis #multiplexing #connection #notifications #command #kubernetes #reconnection

redis-swapplex

Redis multiplexing with reconnection notifications and MGET auto-batching

20 releases (10 breaking)

0.12.0 Mar 24, 2024
0.10.0 Feb 10, 2024
0.9.0 Jun 11, 2023
0.8.2 Mar 27, 2023
0.1.0 Nov 30, 2021

#425 in Database interfaces

Download history 17/week @ 2024-02-20 275/week @ 2024-02-27 1/week @ 2024-03-05 145/week @ 2024-03-12 146/week @ 2024-03-19 12/week @ 2024-03-26 35/week @ 2024-04-02

198 downloads per month
Used in 3 crates

MIT license

28KB
643 lines

redis-swapplex

License Cargo Documentation

Redis multiplexing with reconnection notifications and MGET auto-batching

Why use this instead of redis::aio::ConnectionManager?

  • Error-free reconnection behavior: when a command would otherwise fail as a consequence of the connection being dropped, this library will immediately reconnect and retry when able without producing an otherwise avoidable IoError and with subsequent reconnections debounced 1500ms
  • ENV configuration simplifies kubernetes usage
  • Reconnects can be observed allowing for Redis server-assisted client-side caching using client tracking redirection
  • Integrated MGET auto-batching

ENV Configuration

Composible connection urls are provided by environment variables using env-url with the REDIS prefix:

REDIS_URL=redis://127.0.0.1:6379
# Override env mapping for easy kubernetes config
REDIS_HOST_ENV=MONOLITH_STAGE_REDIS_MASTER_PORT_6379_TCP_ADDR
REDIS_PORT_ENV=MONOLITH_STAGE_REDIS_MASTER_SERVICE_PORT_REDIS

Example

use redis::{AsyncCommands, RedisResult};
use redis_swapplex::get_connection;

async fn get_value(key: &str) -> RedisResult<String> {
  let mut conn = get_connection();
  conn.get(key).await
}

Runtime Configuration (optional)

For best performance, use the Tokio runtime as configured via the tokio::main or tokio::test macro with the crate attribute set to async_local while the barrier-protected-runtime feature is enabled on async-local. Doing so configures the Tokio runtime with a barrier that rendezvous runtime worker threads during shutdown in a way that ensures tasks never outlive thread local data owned by runtime worker threads and obviates the need for Box::leak as a means of lifetime extension.

Dependencies

~8–41MB
~616K SLoC