DocKV - 无需配置,零成本缓存
DocKV 是一个基于Google Sheets API实现的KV数据库。

快速开始

在开发数据监控工具时,通常需要缓存上一次的数据采集状态。这样的场景一多,维护这些数据库就会带来较高的心智成本,因此我开发了DocKV。

你只需要在Google Doc新建一个电子表格并配置好读写权限,即可把该表格变成一个存储介质。DocKV会在该表格上维护一个键值数据库。

准备工作

  1. 新建Google Service Account, 文档在此 👉 Document of Service Account . 创建完服务账号之后,记录Email字段,后面会用到(图1)。
    图1. Google Service Account
    图1. Google Service Account
  2. 点击图1中表格右侧的 Actions -> Manage Keys -> ADD KEY -> Create New Key, 此时会弹出一个对话框,这里Key type选择默认的 JSON,点击 CREATE,这时会自动格下载一个 JSON文件,要保存好,后面会用到。
    图1. Google Service Account
    图1. Google Service Account
  3. 进入 Google Doc , 新建一个电子表格。在表格的URL中找到 SHEET_ID 记录下来。
  4. 点击电子表格右上角的 共享,把这个表格的读写权限共享给第一步得到的 Email 对应的 Service Account。

安装

1
go get -u github.com/0xjeffro/DocKV

例子

定义数据模式

1
2
3
4
5
6
7
8
9
10
11
import (  
DocKV "github.com/0xjeffro/DocKV"
"os"
)

type Model struct {
Name string `json:"name"`
Age int `json:"age"`
Gender bool `json:"gender"`
}

连接

1
2
3
4
5
func connect() *DocKV.DocKV {  
clientSecret := os.Getenv("CLIENT_SECRET")
sheetID := os.Getenv("SHEET_ID")
return DocKV.NewDocKV(sheetID, Model{}, []byte(clientSecret), 60)
}

其中,CLIENT_SECRET 对应的是“准备工作”章节中拿到的JSON文件中的字符串;SHEET_ID 同理。
代码中的60是缓存时间,单位为秒。由于Google API有限速机制,因此DocKV实现了一个简单的缓存,尽量避免触发限制。

注意事项

Google Doc API对于接口调用的频率有明确的限制,具体规则可见:Usage limits 。因此,DocKV只适用于很小的项目使用,在业务逻辑中要注意缓存时间的把握以及数据规模的适当维护。尤其不适用于以下场景:

  • 高频地击穿查询:频繁查询缓存中可能不存在的键,导致大量请求直接落到API的调用上,触发请求频率限制。
  • 高频写入:频繁地插入新的键,触发请求频率限制。