49 lines
786 B
Go
49 lines
786 B
Go
|
package db
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"sync"
|
||
|
|
||
|
"github.com/go-gorm/caches/v4"
|
||
|
)
|
||
|
|
||
|
type memoryCacher struct {
|
||
|
store *sync.Map
|
||
|
}
|
||
|
|
||
|
func (c *memoryCacher) init() {
|
||
|
if c.store == nil {
|
||
|
c.store = &sync.Map{}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (c *memoryCacher) Get(ctx context.Context, key string, q *caches.Query[any]) (*caches.Query[any], error) {
|
||
|
c.init()
|
||
|
val, ok := c.store.Load(key)
|
||
|
if !ok {
|
||
|
return nil, nil
|
||
|
}
|
||
|
|
||
|
if err := q.Unmarshal(val.([]byte)); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return q, nil
|
||
|
}
|
||
|
|
||
|
func (c *memoryCacher) Store(ctx context.Context, key string, val *caches.Query[any]) error {
|
||
|
c.init()
|
||
|
res, err := val.Marshal()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
c.store.Store(key, res)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (c *memoryCacher) Invalidate(ctx context.Context) error {
|
||
|
c.store = &sync.Map{}
|
||
|
return nil
|
||
|
}
|