二进制安全的文本协议 RESF,工作基于 TCP 协议
KV 内存数据库的核心是并发安全的哈希表,采用 golang 社区广泛使用的分段锁策略。将 key 分散到固定数量的 shard 中避免 rehash 操作。shard 是有锁保护的 map, 当 shard 进行 rehash 时会阻塞shard内的读写,但不会对其他 shard 造成影响。
数据结构示意图:
实现在:datastruct/zset/sortedset.go 中
实现在:datastruct/dict/dict.go 中
实现在:datastruct/set/set.go 中
在服务端未响应时客户端继续向服务端发送请求的模式称为 Pipeline 模式。因为减少等待网络传输的时间,Pipeline 模式可以极大的提高吞吐量,减少所需使用的 tcp 链接数。为每一个 tcp 连接分配了一个 goroutine 可以保证先收到的请求先先回复,pipeline 模式的 redis 客户端需要有两个后台协程程负责 tcp 通信,调用方通过 channel 向后台协程发送指令,并阻塞等待直到收到响应,这是一个典型的异步编程模式。