A high-performance key-value store server written in Rust with async support.
- In-memory and persistent (Sled) storage backends
- Async I/O using Tokio runtime
- TLS support for secure communication
- Yamux multiplexing for efficient connection handling
- Comprehensive logging with tracing
Generate certificates using the gen_cert example:
cargo run --example gen_cert
This will create:
fixtures/ca.cert
: CA certificatefixtures/server.{cert,key}
: Server certificate and keyfixtures/client.{cert,key}
: Client certificate and key
To use custom domains/names, modify the example code:
let pem = creat_cert(&ca, &["your.domain.com"], "Your Server Name", false)?;
Generate configuration using the gen_cert example:
cargo run --example gen_config
This will create:
fixtures/server.conf
: Server configurationfixtures/client.conf
: Client configuration
use kv_server_rs::{CommandRequest, ProstClientStream, TlsClientConnector};
use tokio::net::TcpStream;
// Setup TLS connector
let connector = TlsClientConnector::new(
"kvserver.acme.inc", // Server name
Some((client_cert, client_key)), // Client credentials
Some(ca_cert) // CA certificate
)?;
// Connect and execute command
let stream = TcpStream::connect("127.0.0.1:9527").await?;
let tls_stream = connector.connect(stream).await?;
let mut client = ProstClientStream::new(tls_stream);
let cmd = CommandRequest::hset("table1", "key", "value".into());
let response = client.execute(cmd).await?;
RUST_LOG=info cargo run --bin kv-c
use kv_server_rs::{MemTable, ProstServerStream, Service, ServiceInner, TlsServerAcceptor};
use tokio::net::TcpListener;
// Setup TLS
let acceptor = TlsServerAcceptor::new(
server_cert,
server_key,
Some(ca_cert)
)?;
// Initialize service with storage backend
let service: Service = ServiceInner::new(MemTable::new()).into();
// Start server
let listener = TcpListener::bind("127.0.0.1:9527").await?;
loop {
let (stream, _) = listener.accept().await?;
let tls_stream = acceptor.accept(stream).await?;
let server_stream = ProstServerStream::new(tls_stream, service.clone());
tokio::spawn(async move { server_stream.process().await });
}
RUST_LOG=info cargo run --bin kv-s
ProstClientStream
/ProstServerStream
: Protobuf serializationTlsClientConnector
/TlsServerAcceptor
: TLS managementCommandRequest
: Operations (hget/hset/hdel)Service
: Request processingStorage
traits: Memory/Sled implementations
MIT