type Db = Arc<Mutex<HashMap<String, Bytes>>>;
+const LISTEN: &str = "127.0.0.1:6379";
+
#[tokio::main]
async fn main() {
- let listener = TcpListener::bind("127.0.0.1:6379").await.unwrap();
+ env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("debug")).init();
+
+ let listener = TcpListener::bind(LISTEN).await.unwrap();
+ log::info!("Listening on {}", LISTEN);
let db: Db = Arc::new(Mutex::new(HashMap::new()));
loop {
// The second item contains the IP and port of the new connection
- let (socket, _) = listener.accept().await.unwrap();
+ let (socket, addr) = listener.accept().await.unwrap();
+ log::debug!("got connection from {:?}", addr);
let db_i = db.clone();
tokio::spawn(async move { process(socket, db_i).await });
}
Set(cmd) => {
// The value is stored as `Vec<u8>`
db.lock().unwrap().insert(cmd.key().to_string(), cmd.value().clone());
+ log::debug!("Set {} → {:?}", &cmd.key(), &cmd.value());
Frame::Simple("OK".to_string())
}
Get(cmd) => {
if let Some(value) = db.lock().unwrap().get(cmd.key()) {
+ log::debug!("Get {} → {:?}", &cmd.key(), &value);
Frame::Bulk(value.clone())
} else {
+ log::debug!("Get {} unknown key", &cmd.key());
Frame::Null
}
}