#redis #pub-sub #connection-pool #message #publish #subscribe #kiss

redis-kiss

A really stupid approach to managing Redis PubSub

5 releases

0.1.4 Apr 21, 2023
0.1.3 Feb 21, 2022
0.1.2 Feb 21, 2022
0.1.1 Feb 18, 2022
0.1.0 Feb 5, 2022

#2092 in Database interfaces

Download history 37/week @ 2024-07-21 50/week @ 2024-07-28 45/week @ 2024-08-04 35/week @ 2024-08-11 29/week @ 2024-08-18 70/week @ 2024-08-25 68/week @ 2024-09-01 65/week @ 2024-09-08 26/week @ 2024-09-15 53/week @ 2024-09-22 113/week @ 2024-09-29 128/week @ 2024-10-06 69/week @ 2024-10-13 52/week @ 2024-10-20 62/week @ 2024-10-27 38/week @ 2024-11-03

237 downloads per month
Used in 4 crates

MIT license

13KB
203 lines

redis_kiss

Note: this now also exposes access to the Redis connection pool.

This is a pretty simple library intended for just consuming and producing messages for Redis PubSub, it does not follow "good programming practice" in the slightest but it does work and does simplify the work required.

The library manages a global pool of Redis connections and creates listener connections on the fly (due to some technical limitations).

Example

Publish something to Redis:

// Handle the Result<_, _>
redis_kiss::publish("channel", "data").await?;

// Log the error instead
redis_kiss::p("channel", "data").await;

Subscribe to Redis (as usual, see Redis documentation for more info):

// Create a new PubSub connection
let mut conn = redis_kiss::open_pubsub_connection().await?;

// Subscribe to something
conn.subscribe("test").await?;

// Handle incoming messages
let mut stream = conn.on_message();
while let Some(item) = stream.next().await {
    // Use Redis crate API as usual
    let channel = item.get_channel_name().to_string();

    // Decode the message using previously specified options
    // into a certain DeserializeOwned data type T, in this case String
    let payload: String = redis_kiss::decode_payload(&item).await?;

    // You can also choose a specific type on the fly
    use redis_kiss::PayloadType;
    let payload: String = redis_kiss::decode_payload(&item, &PayloadType::Msgpack).await?;

    // Do something with channel and payload
}

Environment Variables

The library is provided with options through the environment.

Name Description Default
REDIS_URI URI of the Redis server redis://localhost
REDIS_POOL_MAX_OPEN Maximum number of connections in Redis pool (for publishing data) 1000
REDIS_PAYLOAD_TYPE Data type to use when publishing data to Redis, either json, msgpack or bincode json
REDIS_KISS_LENIENT Whether to try to automatically decode other payload types if we fail to deserialize it using the chosen one 1

Dependencies

~10–22MB
~311K SLoC