通过实现一个简单的K–V存储数据库,学习Go语言(四)
为了能够和网络中的 key-value 存储交互,我们创建自定义的 TCP 协议。
您将需要为 key-value 存储的每一个函数定义关键字。
为简单起见,每个关键字都跟着相关数据。大多数命令的结果将是成功或失败消息
为了能够和网络中的 key-value 存储交互,我们创建自定义的 TCP 协议。
您将需要为 key-value 存储的每一个函数定义关键字。
为简单起见,每个关键字都跟着相关数据。大多数命令的结果将是成功或失败消息
作为数据库我们需要将键值存储的数据保存在磁盘上,以及如何在下一次启动应用程序时将其加载到内存。
我们准备创建两个新函数,
save()
保存数据到磁盘,load()
从磁盘加载数据。将数据转换为字节流的过程称为序列化。读取数据文件并将其转换为对象的过程称为反序列化。
encoding/gob
标准
Go包将用于程序中。它将有助于序列化和反序列化过程。
encoding/gob
包使用gob
格式存储其数据。这种格式的官方名称是流编码。
gob
格式的好处是,Go
完成了所有的繁琐工作,因此你不必担心编码和解码阶段。
命令为 SET
DELETE
UPDATE
GET
SHOW
注意 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{}}
}