0%

通过实现一个简单的K–V存储数据库,学习Go语言(四)

为了能够和网络中的 key-value 存储交互,我们创建自定义的 TCP 协议。

您将需要为 key-value 存储的每一个函数定义关键字。

为简单起见,每个关键字都跟着相关数据。大多数命令的结果将是成功或失败消息

阅读全文 »

通过实现一个简单的K–V存储数据库,学习Go语言(三)

作为数据库我们需要将键值存储的数据保存在磁盘上,以及如何在下一次启动应用程序时将其加载到内存。

我们准备创建两个新函数,save()保存数据到磁盘,load()从磁盘加载数据。

将数据转换为字节流的过程称为序列化。读取数据文件并将其转换为对象的过程称为反序列化。

encoding/gob标准Go包将用于程序中。它将有助于序列化和反序列化过程。

encoding/gob包使用gob格式存储其数据。这种格式的官方名称是流编码。

gob格式的好处是,Go完成了所有的繁琐工作,因此你不必担心编码和解码阶段。

阅读全文 »

通过实现一个简单的K–V存储数据库,学习Go语言(二)

实现本地增删改查功能(使用map)

命令为 SET DELETE UPDATE GET SHOW

  1. 添加新元素
  2. 基于key删除已有的元素
  3. 修改key对应的value
  4. 给定key查找对应value
  5. 查找所有key,value
阅读全文 »

通过实现一个简单的K–V存储数据库,学习Go语言(一)

实现本地读写功能(使用map)

  1. 使用结构体,实现myRedis类

注意 map 中值为 any 等同于 interface{} 本人使用go 1.18 any 为 interface{} 的自定义类型名称

使用 any 就可以存储任意类型

type myRedis struct {
	mymap map[string]any
}

func newRedis() *myRedis {
	return &myRedis{mymap: map[string]any{}}
}
阅读全文 »