rukai / redis-protocol.rs

Structs and functions for implementing the Redis protocol.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Redis Protocol

License License Build Status Crates.io API docs

Structs and functions for implementing the Redis protocol.

Install

With cargo edit.

cargo add redis-protocol

Features

  • Supports RESP2 and RESP3, including streaming frames.
  • Encode and decode with BytesMut or slices.
  • Parse publish-subscribe messages.
  • Support cluster redirection errors.
  • Implements cluster key hashing.
  • Utility functions for converting between RESP2 and RESP3.

Examples

use redis_protocol::resp2::prelude::*;
use bytes::BytesMut;

fn main() {
  let frame = Frame::BulkString("foobar".into());
  let mut buf = BytesMut::new();
  
  let len = match encode_bytes(&mut buf, &frame) {
    Ok(l) => l,
    Err(e) => panic!("Error encoding frame: {:?}", e)
  };
  println!("Encoded {} bytes into buffer with contents {:?}", len, buf);
  
  let buf: BytesMut = "*3\r\n$3\r\nFoo\r\n$-1\r\n$3\r\nBar\r\n".into();
  let (frame, consumed) = match decode(&buf) {
    Ok(Some((f, c))) => (f, c),
    Ok(None) => panic!("Incomplete frame."),
    Err(e) => panic!("Error parsing bytes: {:?}", e)
  };
  println!("Parsed frame {:?} and consumed {} bytes", frame, consumed);
  
  let key = "foobarbaz";
  println!("Hash slot for {}: {}", key, redis_keyslot(key));
}

IndexMap

Enable the index-map feature to use IndexMap instead of HashMap and HashSet. This is useful for testing and may also be useful to callers.

Tests

To run the unit tests:

cargo test --features index-map

About

Structs and functions for implementing the Redis protocol.

License:Apache License 2.0


Languages

Language:Rust 100.0%Language:Shell 0.0%