cache

package
v2.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 27, 2022 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

Package cache 缓存对象 更新缓存往往是竞争更新,因此需要使用分布式锁避免重复计算,同时等待更新完成后再取数据.

Index

Constants

This section is empty.

Variables

View Source
var Defaultopt = Options{
	EmptyResCacheMode:           EmptyResCacheMode__IGNORE,
	QueryAutoUpdateCacheTimeout: 300 * time.Millisecond,
	QueryLockTimeout:            300 * time.Millisecond,
	QueryLimiterTimeout:         300 * time.Millisecond,
	MiddlewareOpts:              []optparams.Option[middlewarehelper.Options]{},
}

Defaultopt 默认的可选配置

View Source
var ErrAutoUpdateAlreadyStarted = errors.New("auto update already started")

ErrAutoUpdateAlreadyStarted 已经启动了自动更新任务

View Source
var ErrAutoUpdateNeedUpdatePeriod = errors.New("auto update need update period")

ErrAutoUpdateNeedUpdatePeriod 自动更新需要设置UpdatePeriod

View Source
var ErrLimiterNotAllow = errors.New("limiter not allow")

ErrLimiterNotAllow 限制器不允许执行更新任务

View Source
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

func WithAlwaysRefreshTTL() optparams.Option[Options]

WithAlwaysRefreshTTL设置缓存是否即便没有变化也刷新TTL

func WithAutoRefreshInterval added in v2.0.1

func WithAutoRefreshInterval(autoRefreshInterval string) optparams.Option[Options]

WithAutoRefreshInterval 设置自动刷新过期时间的设置

func WithKey added in v2.0.1

func WithKey(key string) optparams.Option[Options]

WithKey 中间件通用设置,指定使用的键,注意设置后namespace依然有效

func WithLimiter

WithLimiter 设置分布式限制器,限制器的作用是设置一段时间内的最大更新次数

func WithLimiterTimeout

func WithLimiterTimeout(timeout time.Duration) optparams.Option[Options]

WithLimiterTimeout 设置请求限流器的过期时间,默认300毫秒

func WithLock

func WithLock(lock lock.LockInterface) optparams.Option[Options]

WithLock 设置分布式锁防止重复计算,分布式锁的作用是限制最小更新间隔

func WithLockTimeout

func WithLockTimeout(timeout time.Duration) optparams.Option[Options]

WithLockTimeout 设置请求分布式锁的过期时间,默认300毫秒

func WithMaxTTL added in v2.0.1

func WithMaxTTL(maxTTL time.Duration) optparams.Option[Options]

WithMaxTTL 设置token消减间隔时长,单位s

func WithNamespace added in v2.0.1

func WithNamespace(ns ...string) optparams.Option[Options]

WithNamespace 中间件通用设置,指定锁的命名空间

func WithQueryAutoUpdateCacheTimeout

func WithQueryAutoUpdateCacheTimeout(timeout time.Duration) optparams.Option[Options]

WithQueryAutoUpdateCacheTimeout 设置自动更新缓存内容时写入缓存的过期时间,默认300毫秒

func WithSpecifiedKey added in v2.0.1

func WithSpecifiedKey(key string) optparams.Option[Options]

WithSpecifiedKey 中间件通用设置,指定使用的键,注意设置key后namespace将失效

func WithTaskCron added in v2.0.1

func WithTaskCron(taskCron *cron.Cron) optparams.Option[Options]

WithTaskCron 设置定时器

func WithUpdatePeriod

func WithUpdatePeriod(updatePeriod string) optparams.Option[Options]

WithUpdatePeriod 设置定时更新

Types

type Cache

type Cache struct {
	*middlewarehelper.MiddleWareAbc
	// contains filtered or unexported fields
}

Cache 缓存 缓存对象的锁可以和缓存不使用同一个redis客户端,甚至可以不用redis,只要他满足Canlock接口 缓存设置UpdatePeriod后会自动定时同步数据

func New

func New(cli redis.UniversalClient, opts ...optparams.Option[Options]) (*Cache, error)

New 创建一个缓存实例 updatePeriod会取最后设置的非空字符串

func (*Cache) ActiveUpdate

func (c *Cache) ActiveUpdate()

ActiveUpdate 主动更新函数,可以被用作定时主动更新,也可以通过监听外部信号来实现更新

func (*Cache) AutoUpdate

func (c *Cache) AutoUpdate() error

AutoUpdate 自动更新缓存,自动更新缓存内容也受限流器影响,同时锁会用于限制更新程序的执行

func (*Cache) Get

func (c *Cache) Get(ctx context.Context, opt ...optparams.Option[GetOptions]) ([]byte, error)

Get 获取数据 如果缓存中有就从缓存中获取,如果没有则直接从注册的缓存函数中获取,然后将结果更新到缓存 如果cache的key有设置MaxTTL则在获取到缓存的数据是会刷新key的过期时间 @param opt ...optparams.Option[GetOptions] 获取模式设置

func (*Cache) RegistUpdateFunc

func (c *Cache) RegistUpdateFunc(fn Cachefunc) error

RegistUpdateFunc 注册缓存函数到对象

func (*Cache) StopAutoUpdate

func (c *Cache) StopAutoUpdate() error

StopAutoUpdate 取消自动更新缓存

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 Cachefunc

type Cachefunc func() ([]byte, error)

Cachefunc 缓存函数结果

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的配置

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL