#redis #protocols #resp #nom

无std redis-protocol-mm

实现Redis协议的结构和函数

2个稳定版本

4.2.0 2023年1月31日
4.1.0 2022年3月28日

#1772数据库接口

39 每月下载量
嵌入式Redis中使用

MIT 协议

325KB
9K SLoC

分支

注意: 此分支仅为以下上游PR专门创建:https://github.com/aembke/redis-protocol.rs/pull/21

一旦上游PR合并并发布,此crate将被删除!


lib.rs:

Redis协议

实现RESP2RESP3协议的结构和函数。

示例


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()));
}

注意:如果调用者未使用index-map特性,则在这些文档中将任何IndexMap类型替换为std::collections::HashMap。由于rustdoc没有很好的方式来根据特性标志显示类型替换。

依赖项

~1.3–2.2MB
~39K SLoC