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

总结

创建了命令行的键值对程序,使用内存作为存储。存储值后没有进行持久化,直接丢失了。

附录

posted @ 2025-10-27 10:32  jiangbo4444  阅读(2)  评论(0)    收藏  举报