Documentation
¶
Index ¶
- Constants
- Variables
- func GenKey(args ...interface{}) string
- func GetRedisPool(conf *RedisConf) (*redis.Pool, error)
- func LogDebug(s ...interface{})
- func LogDebugF(f string, s ...interface{})
- func LogErr(s ...interface{})
- func LogErrF(f string, s ...interface{})
- func LogInfo(s ...interface{})
- func LogInfoF(f string, s ...interface{})
- func NewUUID() (string, error)
- func RedisDelKey(key string, pool *redis.Pool) error
- func RedisGetString(key string, pool *redis.Pool) (string, error)
- func RedisPublish(channel, message string, pool *redis.Pool) error
- func RedisSetString(key, value string, ttl int, pool *redis.Pool) error
- type ChannelMeta
- type Entry
- type FreeCache
- type Harsher
- type HitStatistics
- type Job
- type LoadDataSourceFunc
- type LocalCache
- type LoggerInterface
- type MultiCache
- type OutCache
- type PubSub
- type RedisCache
- func (r *RedisCache) Close()
- func (r *RedisCache) Del(key string) error
- func (r *RedisCache) DistributedEnable() bool
- func (r *RedisCache) Get(key string, obj interface{}) (*Entry, bool, error)
- func (r *RedisCache) Publish(gid, key string, action int8, value *Entry) error
- func (r *RedisCache) Set(key string, obj *Entry) error
- func (r *RedisCache) Subscribe(ch chan<- *ChannelMeta) error
- type RedisConf
- type WorkerPool
Constants ¶
View Source
const ( SetPublishType int8 = iota // 存入数据类型 DelPublishType // 删除数据类型 )
Entry expire is UnixNano
Variables ¶
View Source
var ( CacheKeyEmpty = errors.New("cache key is empty") CacheObjNil = errors.New("cache object is nil") LoadDataSourceFuncNil = errors.New("cache load func is nil") LocalStorageClose = errors.New("local storage close !!! ") OutStorageClose = errors.New("out storage close !!! ") CacheClose = errors.New("g2cache close !!! ") DataSourceLoadNil = errors.New("data source load nil") OutStorageLoadNil = errors.New("out storage load nil") CacheNotImplementPubSub = errors.New("cache not implement pubsub interface") )
View Source
var ( CacheDebug bool // 是否开启Debug模式,debug日志输出 CacheMonitor bool // 缓存监视器,负责监视缓存是否过期 OutCachePubSub bool // 缓存数据源,发布订阅模式是否开启 CacheMonitorSecond = 5 // 监视器默认扫描时间5秒 DefaultGPoolWorkerNum = 200 // 默认工作协程数目 DefaultGPoolJobQueueChanLen = 1000 // 默认工作协程任务数量 )
View Source
var (
DefaultFreeCacheSize = 50 * 1024 * 1024 // 50MB
)
View Source
var DefaultPubSubRedisChannel = "g2cache-pubsub-channel"
View Source
var (
EntryLazyFactor = 32
)
Functions ¶
Types ¶
type ChannelMeta ¶
type Entry ¶
type Entry struct { Value interface{} `json:"value"` // 数据 TtlSecond int `json:"ttl"` // 过期时间段,x秒 Obsolete int64 `json:"obsolete"` // 失效时间,本地缓存使用 Expiration int64 `json:"expiration"` // 过期时间,外部数据源使用 }
func (*Entry) GetObsoleteTTL ¶
GetObsoleteTTL 获取失效时间
type FreeCache ¶
type FreeCache struct {
// contains filtered or unexported fields
}
func NewFreeCache ¶
func NewFreeCache() *FreeCache
type HitStatistics ¶
type HitStatistics struct { HitOutStorageTotalRate float64 `json:"hit_out_storage_total_rate"` // 命中外部数据源速率 HitDataSourceTotalRate float64 `json:"hit_data_source_total_rate"` // 命中普通数据源速率 HitLocalStorageTotalRate float64 `json:"hit_local_storage_total_rate"` // 命中本地缓存速率 HitDataSourceTotal int64 `json:"hit_data_source_total"` // 命中普通数据源次数 HitLocalStorageTotal int64 `json:"hit_local_storage_total"` // 命中本地缓存次数 HitOutStorageTotal int64 `json:"hit_out_storage_total"` // 命中外部数据源次数 AccessGetTotal int64 `json:"access_get_total"` // 获取数据总数 }
var HitStatisticsOut HitStatistics // 统计变量
func (*HitStatistics) StatisticsDataSource ¶
func (h *HitStatistics) StatisticsDataSource()
StatisticsDataSource 计算外部数据源命中率
func (*HitStatistics) StatisticsLocalStorage ¶
func (h *HitStatistics) StatisticsLocalStorage()
StatisticsLocalStorage 计算本地数据源命中率
func (*HitStatistics) StatisticsOutStorage ¶
func (h *HitStatistics) StatisticsOutStorage()
StatisticsOutStorage 计算缓存数据源命中率
func (*HitStatistics) String ¶
func (h *HitStatistics) String() string
type LoadDataSourceFunc ¶
type LoadDataSourceFunc func() (interface{}, error)
LoadDataSourceFunc 外部数据源(mysql),兜底策略
type LocalCache ¶
type LocalCache interface { Get(key string, obj interface{}) (*Entry, bool, error) // 返回真实数据 Set(key string, e *Entry) error // 本机缓存需要设置过期时间 Del(key string) error // 删除指定Key对应数据 Close() // 关闭本机缓存 }
LocalCache 本地缓存数据源
type LoggerInterface ¶
type LoggerInterface interface { LogInfoF(f string, s ...interface{}) LogInfo(s ...interface{}) LogDebug(s ...interface{}) LogDebugF(f string, s ...interface{}) LogErr(s ...interface{}) LogErrF(f string, s ...interface{}) }
LoggerInterface 外部调用者可实现此日志接口用于将日志导出
var (
Logger LoggerInterface = &sysLogger{}
)
type MultiCache ¶
type MultiCache struct { CacheID string // 缓存唯一GID // contains filtered or unexported fields }
func New ¶
func New(out OutCache, local LocalCache) (g *MultiCache, err error)
func (*MultiCache) Del ¶
func (g *MultiCache) Del(key string, wait bool) (err error)
Del 删除数据 key 数据删除数据的key wait 是否同步删除
func (*MultiCache) Get ¶
func (g *MultiCache) Get(key string, ttlSecond int, obj interface{}, fn LoadDataSourceFunc) error
Get 获取数据 key 数据对应key ttlSecond 超时时间 obj 赋值对象,外部传入obj,obj会被深拷贝为对于的数据 fn 加载数据的函数
type OutCache ¶
type OutCache interface { Get(key string, obj interface{}) (*Entry, bool, error) // 返回真实数据 Set(key string, e *Entry) error // 外部缓存需要设置过期时间 Del(key string) error // 删除指定Key对应数据 Close() // 关闭缓存数据源 }
OutCache 缓存数据源,如Redis
type PubSub ¶
type PubSub interface { Subscribe(data chan<- *ChannelMeta) error Publish(cacheID, key string, action int8, data *Entry) error }
PubSub 缓存数据源发布订阅接口
type RedisCache ¶
type RedisCache struct {
// contains filtered or unexported fields
}
func NewRedisCache ¶
func NewRedisCache() (*RedisCache, error)
func (*RedisCache) Close ¶
func (r *RedisCache) Close()
func (*RedisCache) Del ¶
func (r *RedisCache) Del(key string) error
func (*RedisCache) DistributedEnable ¶
func (r *RedisCache) DistributedEnable() bool
func (*RedisCache) Get ¶
func (r *RedisCache) Get(key string, obj interface{}) (*Entry, bool, error)
func (*RedisCache) Publish ¶
func (r *RedisCache) Publish(gid, key string, action int8, value *Entry) error
func (*RedisCache) Subscribe ¶
func (r *RedisCache) Subscribe(ch chan<- *ChannelMeta) error
Subscribe Redis实现的发布订阅获取数据函数
type WorkerPool ¶
type WorkerPool struct {
// contains filtered or unexported fields
}
func NewPool ¶
func NewPool(numWorkers int, jobQueueLen int) *WorkerPool
NewPool 创建缓存池 numWorkers 创建的工作线程数量 queueLen 阻塞时能接受多少任务
func (*WorkerPool) SendJobWithDeadline ¶
func (p *WorkerPool) SendJobWithDeadline(job func(), t time.Time) bool
SendJobWithDeadline 运行任务,在期限内完成,没有完成则返回false
func (*WorkerPool) SendJobWithTimeout ¶
func (p *WorkerPool) SendJobWithTimeout(job func(), t time.Duration) bool
SendJobWithTimeout 运行任务,在t时间内没有完成则返回false
Source Files
¶
Click to show internal directories.
Click to hide internal directories.