# raftCache
一个用来学习raft协议的demo,使用raft协议来构建一个分布式缓存,项目参考了[hraftd](https://github.com/otoolep/hraftd)。
## 调试代码
**leader** 启动初始化节点node0
```shell
cd /cmd
go run main.go -id node0 node0
```
**follower** 加入多个follower node1 & node2
```shell
go run main.go -id node1 -haddr :11001 -raddr :12001 -join :11000 node1
go run main.go -id node2 -haddr :11002 -raddr :12002 -join :11000 node2
```
得到三个副本
```shell
├── test_dbnode0
│ ├── raft-log.db
│ ├── raft-stable.db
│ └── snapshots
├── test_dbnode1
│ ├── raft-log.db
│ ├── raft-stable.db
│ └── snapshots
└── test_dbnode2
├── raft-log.db
├── raft-stable.db
└── snapshots
```
## 调试API
只能对leader节点发起**写**请求
> POST
> 127.0.0.1:11000/v1/cache/key
```json
{
"value": "testNode0Value1"
}
```
> DELETE
> 127.0.0.1:11000/v1/cache/key
可以最任意一个节点发起**读**请求
> GET
> 127.0.0.1:11000/v1/cache/key
> 127.0.0.1:11001/v1/cache/key
> 127.0.0.1:11002/v1/cache/key
```json
{
"key": "key",
"value": {
"value": "testNode0Value1"
}
}
```
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传