Documentation
¶
Index ¶
Constants ¶
View Source
const ( UpdateActionSet = 1 UpdateActionDel = 2 )
View Source
const ( CacheTypeLocal = 1 CacheTypeRemote = 2 )
View Source
const EnumDefault = 0
Variables ¶
Functions ¶
This section is empty.
Types ¶
type Cache ¶
type Cache struct { // 远程cache实体 RemoteCache Cacher // 远程cache缓存TTL RemoteTTL time.Duration // 当调用Get的时候,远程cache命中了,会回调这个函数 RemoteHit CacheCallback // 当调用Get的时候,远程cache miss,会回调这个函数 RemoteMiss CacheCallback // 本地cache实体,在分布式应用中,本地cache一般用于 // 缓存一些访问热度较高的key(hotkey). 以减轻远程cache // 的压力. 但是在更新数据的时候,本地cache的数据不会 // 被修改. 因此本地cache的TTL应该设置地很短. 并且只有 // 短期内大量访问的key才应该被缓存到本地. LocalCache Cacher // 本地cache过期时间 LocalTTL time.Duration // 当调用Get的时候,本地cache命中了,回调该函数 LocalHit CacheCallback // 当调用Get的时候,本地cache miss,回调该函数 LocalMiss CacheCallback // 数据库实体. 用于从数据库获取真实数据. 当缓存全部miss的时候 // 会从数据库fetch数据并入缓存. 另外可选地,当数据被更新或删除 // 的时候,除了更新缓存,也会调用数据库的相关接口触发数据库更新 // 以防止数据不一致的情况 Database Database // 调用更新之后,更新完数据库之后是否异步更新缓存. 如果为true, // 则Update函数更新完数据库后会立即返回,异步更新缓存. // 因为更新缓存一般不需要同步完成, 建议设置为true. UpdateCacheAsync bool // 当调用Update之后,缓存的行为. 有以下几种选择: // UpdateActionSet: 调用Update之后更新缓存为最新数据 // UpdateActionDel: 调用Update之后删除缓存 // 在不指定的情况下,默认远程缓存为UpdateActionSet // 本地缓存为UpdateActionDel RemoteCacheUpdateAction int LocalCacheUpdateAction int // 调用Get的时候缓存miss回调函数 CacheMiss CacheCallback // 调用Get的时候命中缓存,并且数据存在的回调函数 CacheHitFound CacheCallback // 调用Get的时候命中缓存,但是数据在数据库不存在的回调函数 CacheHitNotFound CacheCallback // 调用Get的时候更新缓存失败回调函数 GetSetCacheFail CacheErrCallback // 调用Update的时候更新缓存失败回调函数 UpdateSetCacheFail CacheErrCallback // 调用Remove的时候更新缓存失败回调函数 RemoveSetCacheFail CacheErrCallback // 分布式锁,如果运行在分布式环境,请务必设置该对象 // 这样可以保证获取数据的时候不会获取到脏数据 // 关于分布式锁的实现,请见cache-lock相关文档 Lock Locker // 是否使用proto对对象进行序列化和反序列化 // 默认情况下Cache会自动判断是否使用proto // 你也可以手动指定 IsProto bool // 是否启动单机hotkey检测 // 这个检测仅针对本机情况,在分布式环境中,无法 // 监听到其它实体的hotkey HotKeyEnable bool // 当认为某个key为hotkey时,是否自动将其加到 // 本地缓存中去. // 如果设为true,为了防止本地缓存导致脏数据 // 建议将本地缓存过期时间设地短一点 HotKeySaveToLocal bool // 当某个key被标记为hotkey时,会回调这个函数 HotKeyCallback CacheCallback // 标记hotkey的阈值,在HotKeyFlushTime内如果某个key被访问 // 的次数超过这个值,该key会被标记为hotkey HotKeyThreshold int // 刷新hotkey的时间间隔. 也是监听hotkey的单位时间 // 在这个时间内访问次数超过阈值会被标记为hotkey, 当 // 过了这个时间,hotkey和访问次数都会被全部清空 HotKeyFlushTime time.Duration // 当某个key被标记为hotkey,需要对其做一些操作, 如果 // 操作失败,回调这个函数 HotKeyErrCallback CacheErrCallback // contains filtered or unexported fields }
Cache 用于缓存某个对象实体. 提供基于对象的缓存操作. Cache一般用于分布式应用中,即一个对象可能有多个Cache实体运行在不同的机器中. 可以设置两层缓存:本地缓存和远程缓存. 其中远程缓存会被实时更新,本地缓存 一般通过hotkey规则触发或是手动触发. 一般用于分摊远程缓存的压力. 注意Database是必须提供的,它用于从最底层的数据源来获取数据. 注意在使用前调用Init()函数初始化
func (*Cache) AddLocalCache ¶
type CacheCallback ¶
type CacheCallback func(key Keyer)
type CacheErrCallback ¶
type Cacher ¶
type Cacher interface { // 设置缓存, ttl表示缓存的过期时间 Set(key Keyer, data []byte, ttl time.Duration) error // 获取缓存,如果没有找到缓存,请返回ErrCacheMiss错误 Get(key Keyer) ([]byte, error) // 删除缓存 Del(key Keyer) error }
Cacher 定义了一个缓存后台的基本操作. 它可以是一个Redis的客户端,也可以 是一个本地LRU缓存. 注意该接口的所有方法都可能会被异步调用,请确保它们是 并发安全的.
func NewLocalCacher ¶
func NewRedisClusterCacher ¶
func NewRedisSingleCacher ¶
type Keyer ¶
type Keyer interface { // 以string的形式返回key. String() string // 以对象的形式返回key. Value() interface{} }
Keyer 用于获取唯一的cache实体. 注意每个cache实体的key应该是唯一的, 具体为,它们返回的String都是不一样的. 如果有多个cache实体使用同一个缓存后台,例如它们共享Redis,则强烈建议 String()的返回值前面加上prefix,不然可能导致不同维度key冲突问题. 例如,User实体和Product实体均使用id作为key,那么如果有一个user的id 等于另一个product的id,它们虽然是不同的实体,但是实际上缓存在了一起. 所以强烈建议加上诸如 "user.", "product." 这样的前缀.
type LocalCacher ¶
type LocalCacher struct { Prefix string // contains filtered or unexported fields }
func (*LocalCacher) Del ¶
func (c *LocalCacher) Del(key Keyer) error
type RedisCacher ¶
type RedisCacher struct { Prefix string // contains filtered or unexported fields }
func (*RedisCacher) Del ¶
func (r *RedisCacher) Del(key Keyer) error
type TypeNotMatchErr ¶
type TypeNotMatchErr struct {
// contains filtered or unexported fields
}
func (*TypeNotMatchErr) Error ¶
func (t *TypeNotMatchErr) Error() string
Click to show internal directories.
Click to hide internal directories.