Documentation ¶
Overview ¶
Package cache 缓存对象 更新缓存往往是竞争更新,因此需要使用分布式锁避免重复计算,同时等待更新完成后再取数据.
Index ¶
- Variables
- func ConstraintMode() optparams.Option[GetOptions]
- func NoConstraintMode() optparams.Option[GetOptions]
- func StrictMode() optparams.Option[GetOptions]
- func WithAlwaysRefreshTTL() optparams.Option[Options]
- func WithAutoRefreshInterval(autoRefreshInterval string) optparams.Option[Options]
- func WithKey(key string) optparams.Option[Options]
- func WithLimiter(limiter limiterhelper.LimiterInterface) optparams.Option[Options]
- func WithLimiterTimeout(timeout time.Duration) optparams.Option[Options]
- func WithLock(lock lock.LockInterface) optparams.Option[Options]
- func WithLockTimeout(timeout time.Duration) optparams.Option[Options]
- func WithMaxTTL(maxTTL time.Duration) optparams.Option[Options]
- func WithNamespace(ns ...string) optparams.Option[Options]
- func WithQueryAutoUpdateCacheTimeout(timeout time.Duration) optparams.Option[Options]
- func WithSpecifiedKey(key string) optparams.Option[Options]
- func WithTaskCron(taskCron *cron.Cron) optparams.Option[Options]
- func WithUpdatePeriod(updatePeriod string) optparams.Option[Options]
- type Cache
- type CacheInterface
- type Cachefunc
- type EmptyResCacheModeType
- type ForceLevelType
- type GetOptions
- type Options
Constants ¶
This section is empty.
Variables ¶
var Defaultopt = Options{ EmptyResCacheMode: EmptyResCacheMode__IGNORE, QueryAutoUpdateCacheTimeout: 300 * time.Millisecond, QueryLockTimeout: 300 * time.Millisecond, QueryLimiterTimeout: 300 * time.Millisecond, MiddlewareOpts: []optparams.Option[middlewarehelper.Options]{}, }
Defaultopt 默认的可选配置
var ErrAutoUpdateAlreadyStarted = errors.New("auto update already started")
ErrAutoUpdateAlreadyStarted 已经启动了自动更新任务
var ErrAutoUpdateNeedUpdatePeriod = errors.New("auto update need update period")
ErrAutoUpdateNeedUpdatePeriod 自动更新需要设置UpdatePeriod
var ErrLimiterNotAllow = errors.New("limiter not allow")
ErrLimiterNotAllow 限制器不允许执行更新任务
var ErrUpdateFuncAlreadyRegisted = errors.New("update function already registed")
ErrUpdateFuncAlreadyRegisted 缓存更新函数已经注册
Functions ¶
func ConstraintMode ¶ added in v2.0.1
func ConstraintMode() optparams.Option[GetOptions]
ConstraintMode 设置使用约束模式获取数据,约束模式下组件自身失效会继续处理,当更新函数得到的结果为空时会删除缓存以便下次再执行更新操作
func NoConstraintMode ¶ added in v2.0.1
func NoConstraintMode() optparams.Option[GetOptions]
NoConstraintMode 设置使用无约束模式获取数据,无约束模式下无视组件处理,当更新函数得到的结果为空时不会放入缓存,当更新函数得到的结果为空时依然存入作为缓存
func StrictMode ¶ added in v2.0.1
func StrictMode() optparams.Option[GetOptions]
StrictMode 设置使用严格模式获取数据,严格模式下无论如何只要报错和不满足组件要求就会终止,当更新函数得到的结果为空时不会放入缓存,而是刷新之前的过期时间
func WithAlwaysRefreshTTL ¶ added in v2.0.1
WithAlwaysRefreshTTL设置缓存是否即便没有变化也刷新TTL
func WithAutoRefreshInterval ¶ added in v2.0.1
WithAutoRefreshInterval 设置自动刷新过期时间的设置
func WithLimiter ¶
func WithLimiter(limiter limiterhelper.LimiterInterface) optparams.Option[Options]
WithLimiter 设置分布式限制器,限制器的作用是设置一段时间内的最大更新次数
func WithLimiterTimeout ¶
WithLimiterTimeout 设置请求限流器的过期时间,默认300毫秒
func WithLock ¶
func WithLock(lock lock.LockInterface) optparams.Option[Options]
WithLock 设置分布式锁防止重复计算,分布式锁的作用是限制最小更新间隔
func WithLockTimeout ¶
WithLockTimeout 设置请求分布式锁的过期时间,默认300毫秒
func WithMaxTTL ¶ added in v2.0.1
WithMaxTTL 设置token消减间隔时长,单位s
func WithNamespace ¶ added in v2.0.1
WithNamespace 中间件通用设置,指定锁的命名空间
func WithQueryAutoUpdateCacheTimeout ¶
WithQueryAutoUpdateCacheTimeout 设置自动更新缓存内容时写入缓存的过期时间,默认300毫秒
func WithSpecifiedKey ¶ added in v2.0.1
WithSpecifiedKey 中间件通用设置,指定使用的键,注意设置key后namespace将失效
func WithTaskCron ¶ added in v2.0.1
WithTaskCron 设置定时器
Types ¶
type Cache ¶
type Cache struct { *middlewarehelper.MiddleWareAbc // contains filtered or unexported fields }
Cache 缓存 缓存对象的锁可以和缓存不使用同一个redis客户端,甚至可以不用redis,只要他满足Canlock接口 缓存设置UpdatePeriod后会自动定时同步数据
func (*Cache) ActiveUpdate ¶
func (c *Cache) ActiveUpdate()
ActiveUpdate 主动更新函数,可以被用作定时主动更新,也可以通过监听外部信号来实现更新
func (*Cache) AutoUpdate ¶
AutoUpdate 自动更新缓存,自动更新缓存内容也受限流器影响,同时锁会用于限制更新程序的执行
func (*Cache) Get ¶
Get 获取数据 如果缓存中有就从缓存中获取,如果没有则直接从注册的缓存函数中获取,然后将结果更新到缓存 如果cache的key有设置MaxTTL则在获取到缓存的数据是会刷新key的过期时间 @param opt ...optparams.Option[GetOptions] 获取模式设置
func (*Cache) RegistUpdateFunc ¶
RegistUpdateFunc 注册缓存函数到对象
type CacheInterface ¶ added in v2.0.1
type CacheInterface interface { //RegistUpdateFunc 注册缓存函数到对象 //@params fn Cachefunc 缓存函数 RegistUpdateFunc(fn Cachefunc) error //ActiveUpdate 主动更新函数,可以被用作定时主动更新,也可以通过监听外部信号来实现更新 ActiveUpdate() //AutoUpdate 自动更新缓存,自动更新缓存内容也受限流器影响,同时锁会用于限制更新程序的执行 AutoUpdate() error //StopAutoUpdate 取消自动更新缓存 StopAutoUpdate() error //Get 获取数据 //如果缓存中有就从缓存中获取,如果没有则直接从注册的缓存函数中获取,然后将结果更新到缓存 //如果cache的key有设置MaxTTL则在获取到缓存的数据是会刷新key的过期时间 //@params ctx context.Context 获取的执行上下文 //@params opt ...optparams.Option[GetOptions] 获取模式设置 Get(ctx context.Context, opt ...optparams.Option[GetOptions]) ([]byte, error) }
type EmptyResCacheModeType ¶
type EmptyResCacheModeType uint16
EmptyResCacheModeType 处理更新函数返回空值的模式
const ( //EmptyResCacheMode__IGNORE 当更新函数得到的结果为空时不会放入缓存,而是刷新之前的过期时间保持原有缓存 EmptyResCacheMode__IGNORE EmptyResCacheModeType = iota //EmptyResCacheMode__DELETE 当更新函数得到的结果为空时会删除缓存以便下次再执行更新操作 EmptyResCacheMode__DELETE //EmptyResCacheMode__SAVE 当更新函数得到的结果为空时依然存入作为缓存 EmptyResCacheMode__SAVE )
type ForceLevelType ¶
type ForceLevelType uint16
ForceLevelType 强制执行类型枚举
const ( //ForceLevel__STRICT 严格模式,无论如何只要报错和不满足组件要求就会终止,当更新函数得到的结果为空时不会放入缓存,而是刷新之前的过期时间 ForceLevel__STRICT ForceLevelType = iota //ForceLevel__CONSTRAINT 约束模式,组件自身失效会继续处理,当更新函数得到的结果为空时会删除缓存以便下次再执行更新操作 ForceLevel__CONSTRAINT //ForceLevel__NOCONSTRAINT 无约束模式,无视组件处理,当更新函数得到的结果为空时不会放入缓存,当更新函数得到的结果为空时依然存入作为缓存 ForceLevel__NOCONSTRAINT )
type GetOptions ¶ added in v2.0.1
type GetOptions struct {
Force ForceLevelType
}
type Options ¶
type Options struct { UpdatePeriod string //使用自动更新,使用crontab格式 QueryAutoUpdateCacheTimeout time.Duration //自动更新时写入缓存的超时时长 Lock lock.LockInterface //使用的锁 QueryLockTimeout time.Duration //请求锁的超时时间 Limiter limiterhelper.LimiterInterface //使用的限制器 QueryLimiterTimeout time.Duration //请求限流器的超时时间 EmptyResCacheMode EmptyResCacheModeType //处理更新函数返回空值的模式 AlwaysRefreshTTL bool //是否即便没有变化也刷新TTL MiddlewareOpts []optparams.Option[middlewarehelper.Options] //初始化Middleware的配置 }
Options broker的配置