┌─────────────────────────────────────────────────────┐
│ Application Layer │
│ cmd/goswiftkv/ │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ Extension Layer │
│ pkg/extension/ │
│ OpenClaw / Skills / MCP / Plugins │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ Security Layer │
│ pkg/security/ │
│ Authenticator / RateLimiter / Filter │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ Network Layer │
│ pkg/net/ │
│ TCP Server / Connection │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ Protocol Layer │
│ pkg/resp/ │
│ RESP Parser / Serializer │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ Core Layer │
│ pkg/core/ │
│ DB / ConcurrentDict / Commands / Types │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ Persistence Layer │
│ pkg/persist/ │
│ AOF / RDB │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ Infrastructure Layer │
│ pkg/lib/ │
│ Logger / Utils / Config │
└─────────────────────────────────────────────────────┘
ConcurrentDict: 65536 分片并发字典
type ConcurrentDict struct {
segments []*Segment // 65536 个独立分片
count int
}
type Segment struct {
m map[string]interface{}
mu sync.RWMutex // 每个分片独立锁
}
优势:
RESP 协议支持:
+OK\r\n-ERR message\r\n:1\r\n$6\r\nfoobar\r\n*2\r\n$3\r\nfoo\r\n$3\r\nbar\r\nAOF (Append Only File):
RDB (Redis Database):
认证: 密码 + Session 管理 限流: 滑动窗口算法 命令过滤: 危险命令拦截 + 重命名
OpenClaw: AI 助手直接操作接口 Skills: 自定义命令扩展 MCP: 模型上下文协议 Plugins: 插件系统
┌─────────────┐
│ Listener │
└──────┬──────┘
│ Accept
┌────────────┼────────────┐
│ │ │
┌─────▼─────┐ ┌────▼────┐ ┌────▼────┐
│ Goroutine │ │Goroutine│ │Goroutine│
│ Conn 1 │ │ Conn 2 │ │ Conn N │
└─────┬─────┘ └────┬────┘ └────┬────┘
│ │ │
└────────────┼────────────┘
│
┌──────▼──────┐
│ Concurrent │
│ Dict │
│ (65536 shards)
└─────────────┘
Client Request
│
▼
┌─────────────┐
│ TCP Server │
└──────┬──────┘
│
▼
┌─────────────┐
│ RESP Parser │
└──────┬──────┘
│
▼
┌─────────────┐
│ Router │
└──────┬──────┘
│
▼
┌─────────────┐ ┌─────────────┐
│ Command │────▶│ AOF │
│ Executor │ └─────────────┘
└──────┬──────┘
│
▼
┌─────────────┐
│ Concurrent │
│ Dict │
└──────┬──────┘
│
▼
┌─────────────┐
│ Response │
└─────────────┘
func init() {
RegisterCommand("mycommand", execMyCommand, prepareMyCommand, 2)
}
func execMyCommand(db *DB, args [][]byte) resp.Reply {
// 实现逻辑
return resp.OkReply
}
func prepareMyCommand(args [][]byte) (write, read []string) {
return []string{string(args[0])}, nil
}
type MyTypeData struct {
data interface{}
expireAt int64
}
func (db *DB) GetMyTypeData(key string) (*MyTypeData, bool) {
// 实现
}
type MyPlugin struct{}
func (p *MyPlugin) Init(config map[string]interface{}) error { return nil }
func (p *MyPlugin) Start() error { return nil }
func (p *MyPlugin) Stop() error { return nil }
func (p *MyPlugin) Info() PluginInfo {
return PluginInfo{Name: "my-plugin", Version: "1.0"}
}