qinglong-go/internal/cache/cache.go

82 lines
1.5 KiB
Go

package cache
import (
log "github.com/huoxue1/go-utils/base/log"
"github.com/nutsdb/nutsdb"
"sync"
)
var (
db *nutsdb.DB
once = sync.Once{}
)
func initCache() {
once.Do(func() {
log.Infoln("start init cache")
var err error
db, err = nutsdb.Open(nutsdb.DefaultOptions, nutsdb.WithDir("./data/cache"))
if err != nil {
log.Errorf("open the cache error: %s", err.Error())
return
}
})
}
func Exists(key string) bool {
initCache()
var exists bool
_ = db.View(func(tx *nutsdb.Tx) error {
_, err := tx.Get("default", []byte(key))
if err != nil {
exists = false
} else {
exists = true
}
return nil
})
return exists
}
func Get(key string) (string, error) {
initCache()
var val string
err := db.View(func(tx *nutsdb.Tx) error {
entry, err := tx.Get("default", []byte(key))
if err != nil {
return err
}
val = string(entry.Value)
return nil
})
return val, err
}
func GetBytes(key string) ([]byte, error) {
initCache()
var val []byte
err := db.View(func(tx *nutsdb.Tx) error {
entry, err := tx.Get("default", []byte(key))
if err != nil {
return err
}
val = entry.Value
return nil
})
return val, err
}
func Set(key string, value string) error {
initCache()
return db.Update(func(tx *nutsdb.Tx) error {
return tx.Put("default", []byte(key), []byte(value), 0)
})
}
func SetBytes(key string, value []byte) error {
initCache()
return db.Update(func(tx *nutsdb.Tx) error {
return tx.Put("default", []byte(key), value, 0)
})
}