mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
|
|
package cache
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"encoding"
|
||
|
|
"fmt"
|
||
|
|
"reflect"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
// cacheable entity
|
||
|
|
type CacheableEntity interface {
|
||
|
|
encoding.BinaryMarshaler
|
||
|
|
encoding.BinaryUnmarshaler
|
||
|
|
}
|
||
|
|
|
||
|
|
func WrapCacheableEntityErrors(rt reflect.Type, caller string) error {
|
||
|
|
if rt == nil {
|
||
|
|
return fmt.Errorf("%s: (nil)", caller)
|
||
|
|
}
|
||
|
|
|
||
|
|
if rt.Kind() != reflect.Pointer {
|
||
|
|
return fmt.Errorf("%s: (non-pointer \"%s\")", caller, rt.String())
|
||
|
|
}
|
||
|
|
|
||
|
|
return fmt.Errorf("%s: (nil \"%s\")", caller, rt.String())
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
// cache status
|
||
|
|
type RetrieveStatus int
|
||
|
|
|
||
|
|
const (
|
||
|
|
RetrieveStatusHit = RetrieveStatus(iota)
|
||
|
|
RetrieveStatusPartialHit
|
||
|
|
RetrieveStatusRangeMiss
|
||
|
|
RetrieveStatusKeyMiss
|
||
|
|
RetrieveStatusRevalidated
|
||
|
|
|
||
|
|
RetrieveStatusError
|
||
|
|
)
|
||
|
|
|
||
|
|
func (s RetrieveStatus) String() string {
|
||
|
|
switch s {
|
||
|
|
case RetrieveStatusHit:
|
||
|
|
return "hit"
|
||
|
|
case RetrieveStatusPartialHit:
|
||
|
|
return "partial hit"
|
||
|
|
case RetrieveStatusRangeMiss:
|
||
|
|
return "range miss"
|
||
|
|
case RetrieveStatusKeyMiss:
|
||
|
|
return "key miss"
|
||
|
|
case RetrieveStatusRevalidated:
|
||
|
|
return "revalidated"
|
||
|
|
case RetrieveStatusError:
|
||
|
|
return "error"
|
||
|
|
default:
|
||
|
|
return "unknown"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// cache interface
|
||
|
|
type Cache interface {
|
||
|
|
Connect(ctx context.Context) error
|
||
|
|
Store(ctx context.Context, cacheKey string, data CacheableEntity, ttl time.Duration) error
|
||
|
|
Retrieve(ctx context.Context, cacheKey string, dest CacheableEntity, allowExpired bool) (RetrieveStatus, error)
|
||
|
|
SetTTL(ctx context.Context, cacheKey string, ttl time.Duration)
|
||
|
|
Remove(ctx context.Context, cacheKey string)
|
||
|
|
BulkRemove(ctx context.Context, cacheKeys []string)
|
||
|
|
Close(ctx context.Context) error
|
||
|
|
}
|