当前位置: 首页 > news >正文

0283-KVS-实现 set 和 remove

环境

  • Time 2022-12-11
  • WSL-Ubuntu 22.04
  • Rust 1.65.0

前言

说明

参考:https://github.com/pingcap/talent-plan

目标

在上一节的基础上,实现 set 和 remove 的返回。

Cargo.toml

[package]
edition = "2021"
name = "kvs"
version = "1.0.0"[dependencies]
clap = {version = "4", features = ["derive"]}
serde = {version = "1", features = ["derive"]}
serde_json = "1"

cmd.rs

#[derive(serde::Serialize, serde::Deserialize)]
pub enum Command<'a> {Set { key: String, value: String },Remove { key: &'a str },
}

set 方法

pub (crate) fn set(&mut self, key: String, value: String) -> Result<Option<String>> {let command = Command::Set {key: key.to_string(),value: value.to_string(),};let json = serde_json::to_string(&command)?;self.writer.write_all(json.as_bytes())?;Ok(self.map.insert(key, value))
}

remove 方法

pub(crate) fn remove(&mut self, key: String) -> Result<Option<String>> {let command = Command::Remove { key: &key };let json = serde_json::to_string(&command)?;self.writer.write_all(json.as_bytes())?;Ok(self.map.remove(&key))
}

运行

使用 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 name ZhangSan
SET KEY: name, VALUE: JiangBo
root@jiangbo12490:~/git/game/target/release# ./kvs rm name
REM KEY: name, VALUE: ZhangSan

查看文件

root@jiangbo12490:~/log# cat /root/log/1.log
{"Set":{"key":"name","value":"JiangBo"}}{"Set":{"key":"name","value":"ZhangSan"}}{"Remove":{"key":"name"}}

总结

实现了 set 和 remove 时返回之前已经存在的值。

附录

http://www.zskr.cn/news/31364.html

相关文章:

  • 0281-KVS-启动时加载文件内容
  • 0280-KVS-将日志记录到文件
  • 2025 年留学咨询服务机构最新推荐榜,技术实力与服务品质双重维度剖析英国 / 澳洲 / 香港 / 美国 / 加拿大留学 / 留学中介 / 留学咨询机构推荐
  • 字符串-函数
  • 2025 年纤维喷涂厂家最新推荐榜,技术实力与市场口碑深度解析机房无机 / 隔音无机 / 地下室无机 / A 级防火无机纤维喷涂公司推荐
  • [背包] CF730J Bottles 题解
  • Day5表单—下拉菜单与文本域
  • 2025 年验厂咨询机构最新推荐榜,技术实力与市场口碑深度解析,助力企业突破国际贸易壁垒
  • 干掉 Chrome,Comet AI 浏览器杀疯了!!
  • 知识图谱三强争霸:Neo4j/LightRAG/GraphRAG 全方位 PK 及实战适配指南 - 指南
  • 2025年深圳房产分割律所权威推荐榜单:房产分割律所/婚姻/股权分割专业律师精选
  • 从Palantir本体论,看驱动智能(Data for AI)的下一代数据架构
  • 基于Java+Springboot+Vue开发的婚恋交友网站管理系统源码+运行步骤
  • kvm安装debian13之后启动报错
  • 2025 年最新推荐!钢结构防火涂料厂家排行榜:膨胀型 / 非膨胀型 / 室内外 / 超薄型 / 厚型防火涂料精选
  • 案例解析:养老服务标杆吉宝欣岳年借助纷享销客CRM实现数字化转型升级
  • 20232407 2025-2026-1 《网络与系统攻防技术》 实验三实验报告
  • 题解:uoj748 机器人表演
  • 2025 年混合机,强力混合机厂家最新推荐,产能、专利、环保三维数据透视!
  • Linux 自动输入 Enter 键
  • Voyage系列3: 技巧与提示
  • 完全开源!一款基于 SpringBoot + Vue 构建的社区平台!
  • 【一步步开发AI运动APP】十二、如何进行运动开始前的站位预检,提升用户体验
  • 2025年10月品牌认证机构推荐:权威榜单对比五强优劣
  • 解析 MySQL 与 KingbaseES 字符串排序规则差异
  • 2025 年最新推荐 PPT 生成软件排行榜:权威协会测评 + AI 备案技术加持,3500 万用户信赖之选全面解析
  • 数据结构——LinkedList和链表 - 实践
  • 10 25
  • 2025 年青岛点焊机厂家最新推荐榜,聚焦技术实力与市场口碑深度解析螺母/自动/螺栓/储能/汽车零部件点焊机厂家推荐
  • 日记14