TinySkin/db/cache/fastcache.go
thehrz 145bb045e9
Some checks failed
CI / deploy (push) Failing after 2m53s
fork from xmdhs/authlib-skin
2025-01-24 16:57:58 +08:00

56 lines
987 B
Go

package cache
import (
"fmt"
"time"
"github.com/VictoriaMetrics/fastcache"
"github.com/alecthomas/binary"
)
var _ Cache = (*FastCache)(nil)
type FastCache struct {
c *fastcache.Cache
}
type ttlCache struct {
TimeOut int64
V []byte
}
func NewFastCache(maxBytes int) *FastCache {
c := fastcache.New(maxBytes)
return &FastCache{c: c}
}
func (f *FastCache) Put(k []byte, v []byte, timeOut time.Time) error {
b, err := binary.Marshal(ttlCache{V: v, TimeOut: timeOut.Unix()})
if err != nil {
return fmt.Errorf("FastCache.Put: %w", err)
}
f.c.SetBig(k, b)
return nil
}
func (f *FastCache) Del(k []byte) error {
f.c.Del(k)
return nil
}
func (f *FastCache) Get(k []byte) ([]byte, error) {
b := f.c.GetBig(nil, k)
if b == nil {
return nil, nil
}
me := ttlCache{}
err := binary.Unmarshal(b, &me)
if err != nil {
return nil, fmt.Errorf("FastCache.Get: %w", err)
}
if time.Unix(me.TimeOut, 0).Before(time.Now()) {
return nil, nil
}
return me.V, nil
}