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)要求:
ModeInsert遇到已经存在的 key,不做更新,返回 false。ModeUpdate只更新已有的 key。ModeUpsert就是原来的 set,增加 key 或覆盖已有的 key:
func (kv *KV) Set(key []byte, val []byte) (updated bool, err error) {
return kv.SetEx(key, val, ModeUpsert)
}