0203: 更新操作

现在可以把一些基于主键的 SQL 对应到 KV 上。比如 select → get,delete → del。

但是 KV 的 set 操作,好像既可以是 insert,也可以是 update,实际上是 insert … on duplicate update。这个操作很常用,ProgresSQL 里专门增加了一个 upsert 语句来对应 KV 的 set。

需要把 insert 和 update 对应的操作加到 KV 里。增加 SetEx() 函数:

type UpdateMode int

const (
    ModeUpsert UpdateMode = 0 // insert or update
    ModeInsert UpdateMode = 1 // insert new
    ModeUpdate UpdateMode = 2 // update existing
)

func (kv *KV) SetEx(key []byte, val []byte, mode UpdateMode) (bool, error)

要求:

func (kv *KV) Set(key []byte, val []byte) (updated bool, err error) {
    return kv.SetEx(key, val, ModeUpsert)
}