0277-KVS-使用命令行操作
环境
- Time 2022-12-11
- WSL-Ubuntu 22.04
- Rust 1.65.0
前言
说明
参考:https://github.com/pingcap/talent-plan
目标
在上一节的基础上,创建一个命令行程序来操作键值存储。
Cargo.toml
[package]
edition = "2021"
name = "kvs"
version = "1.0.0"
[dependencies]
clap = {version = "4", features = ["derive"]}
命令
#[derive(Parser)]
#[command(author, version, about, long_about = None)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// 设置值
Set {
/// 键
key: String,
/// 值
value: String,
},
/// 获取值
Get {
/// 键
key: String,
},
/// 删除值
Rm {
/// 键
key: String,
},
}
main
fn main() -> std::io::Result<()> {
let cli = Cli::parse();
let mut store = KvStore::default();
match cli.command {
Commands::Set { key, value } => {
if let Some(value) = store.set(key.to_string(), value) {
println!("SET KEY: {key}, VALUE: {value}");
} else {
println!("SET KEY: {key}, VALUE: None");
}
}
Commands::Get { key } => {
if let Some(value) = store.get(&key) {
println!("GET KEY: {key}, VALUE: {value}");
} else {
println!("GET KEY: {key}, VALUE: None");
}
}
Commands::Rm { key } => {
if let Some(value) = store.remove(&key) {
println!("REM KEY: {key}, VALUE: {value}");
} else {
println!("REM KEY: {key}, VALUE: None");
}
}
}
Ok(())
}
运行
使用 cargo build --release 构建后运行。
root@jiangbo12490:~/git/game/target/release# ./kvs set name JiangBo
SET KEY: name, VALUE: None
root@jiangbo12490:~/git/game/target/release# ./kvs set age 44
SET KEY: age, VALUE: None
root@jiangbo12490:~/git/game/target/release# ./kvs get name
GET KEY: name, VALUE: None
root@jiangbo12490:~/git/game/target/release# ./kvs rm name
REM KEY: name, VALUE: None
总结
创建了命令行的键值对程序,使用内存作为存储。存储值后没有进行持久化,直接丢失了。

浙公网安备 33010602011771号