Files
open-im-server/pkg/localcache/option.go
T

120 lines
2.3 KiB
Go
Raw Normal View History

2024-01-08 15:39:39 +08:00
package localcache
import (
"context"
2024-01-15 15:23:42 +08:00
"github.com/openimsdk/localcache/lru"
2024-01-08 15:39:39 +08:00
"time"
)
func defaultOption() *option {
return &option{
localSlotNum: 500,
localSlotSize: 20000,
2024-01-12 15:41:05 +08:00
linkSlotNum: 500,
2024-01-15 15:23:42 +08:00
actively: false,
2024-01-08 15:39:39 +08:00
localSuccessTTL: time.Minute,
localFailedTTL: time.Second * 5,
delFn: make([]func(ctx context.Context, key ...string), 0, 2),
target: emptyTarget{},
}
}
type option struct {
localSlotNum int
localSlotSize int
2024-01-12 15:41:05 +08:00
linkSlotNum int
2024-01-15 15:23:42 +08:00
actively bool
2024-01-08 15:39:39 +08:00
localSuccessTTL time.Duration
localFailedTTL time.Duration
delFn []func(ctx context.Context, key ...string)
2024-01-15 15:23:42 +08:00
target lru.Target
2024-01-08 15:39:39 +08:00
}
type Option func(o *option)
2024-01-15 15:23:42 +08:00
func WithActively() Option {
return func(o *option) {
o.actively = true
}
}
func WithInertia() Option {
return func(o *option) {
o.actively = false
}
}
2024-01-12 15:41:05 +08:00
func WithLocalDisable() Option {
return WithLinkSlotNum(0)
}
func WithLinkDisable() Option {
return WithLinkSlotNum(0)
}
func WithLinkSlotNum(linkSlotNum int) Option {
2024-01-08 15:39:39 +08:00
return func(o *option) {
2024-01-12 15:41:05 +08:00
o.linkSlotNum = linkSlotNum
2024-01-08 15:39:39 +08:00
}
}
func WithLocalSlotNum(localSlotNum int) Option {
return func(o *option) {
o.localSlotNum = localSlotNum
}
}
func WithLocalSlotSize(localSlotSize int) Option {
return func(o *option) {
o.localSlotSize = localSlotSize
}
}
func WithLocalSuccessTTL(localSuccessTTL time.Duration) Option {
if localSuccessTTL < 0 {
panic("localSuccessTTL should be greater than 0")
}
return func(o *option) {
o.localSuccessTTL = localSuccessTTL
}
}
func WithLocalFailedTTL(localFailedTTL time.Duration) Option {
if localFailedTTL < 0 {
panic("localFailedTTL should be greater than 0")
}
return func(o *option) {
o.localFailedTTL = localFailedTTL
}
}
2024-01-15 15:23:42 +08:00
func WithTarget(target lru.Target) Option {
2024-01-08 15:39:39 +08:00
if target == nil {
panic("target should not be nil")
}
return func(o *option) {
o.target = target
}
}
func WithDeleteKeyBefore(fn func(ctx context.Context, key ...string)) Option {
if fn == nil {
panic("fn should not be nil")
}
return func(o *option) {
o.delFn = append(o.delFn, fn)
}
}
type emptyTarget struct{}
func (e emptyTarget) IncrGetHit() {}
func (e emptyTarget) IncrGetSuccess() {}
func (e emptyTarget) IncrGetFailed() {}
func (e emptyTarget) IncrDelHit() {}
func (e emptyTarget) IncrDelNotFound() {}