mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2026-01-04 22:55:48 +08:00
初步实验使用KV数据库(pebble)存储缓存索引
This commit is contained in:
33
internal/utils/kvstore/table_counter.go
Normal file
33
internal/utils/kvstore/table_counter.go
Normal file
@@ -0,0 +1,33 @@
|
||||
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||
|
||||
package kvstore
|
||||
|
||||
type CounterTable[T int64 | uint64] struct {
|
||||
*Table[T]
|
||||
}
|
||||
|
||||
func NewCounterTable[T int64 | uint64](name string) (*CounterTable[T], error) {
|
||||
table, err := NewTable[T](name, NewIntValueEncoder[T]())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &CounterTable[T]{
|
||||
Table: table,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (this *CounterTable[T]) Increase(key string, delta T) (newValue T, err error) {
|
||||
err = this.Table.WriteTx(func(tx *Tx[T]) error {
|
||||
value, getErr := tx.Get(key)
|
||||
if getErr != nil {
|
||||
if !IsKeyNotFound(getErr) {
|
||||
return getErr
|
||||
}
|
||||
}
|
||||
|
||||
newValue = value + delta
|
||||
return tx.Set(key, newValue)
|
||||
})
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user