Crate redis_protocol

Source
Expand description

§Redis Protocol

Structs and functions for implementing the RESP2 and RESP3 protocol.

§Examples


use redis_protocol::resp2::prelude::*;
use bytes::{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: Bytes = "*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.as_bytes()));
}

Note: if callers are not using the index-map feature then substitute std::collections::HashMap for any IndexMap types in these docs. rustdoc doesn’t have a great way to show type substitutions based on feature flags.

Modules§

resp2
Types and functions for implementing the RESP2 protocol.
resp3
Types and functions for implementing the RESP3 protocol.
types
Error types and general redis protocol types.

Constants§

ZEROED_KB
A pre-defined zeroed out KB of data, used to speed up extending buffers while encoding.

Functions§

digits_in_number
Returns the number of bytes necessary to encode a string representation of d.
redis_keyslot
Map a Redis key to its cluster key slot.
resp2_frame_to_resp3
Utility function to translate RESP2 frames to RESP3 frames.