cache2go开源项目的回调方法使用

it2022-05-05  204

cache2go开源项目的回调方法使用

https://github.com/muesli/cache2go

结构体

type CacheTable struct { sync.RWMutex . name string items map[interface{}]*CacheItem cleanupTimer *time.Timer cleanupInterval time.Duration logger *log.Logger // 回调方法定义 loadData func(key interface{}, args ...interface{}) *CacheItem addedItem func(item *CacheItem) aboutToDeleteItem func(item *CacheItem) }

配置回调方法

func (table *CacheTable) SetAddedItemCallback(f func(*CacheItem)) { table.Lock() defer table.Unlock() // 回调方法赋值f函数对象 table.addedItem = f }

添加方法的回调处理

func (table *CacheTable) addInternal(item *CacheItem) { table.log("Adding item with key", item.key, "and lifespan of", item.lifeSpan, "to table", table.name) table.items[item.key] = item expDur := table.cleanupInterval // 获取回调方法内容 addedItem := table.addedItem table.Unlock() // 如果不为空,即已配置回调,执行回调 if addedItem != nil { addedItem(item) } if item.lifeSpan > 0 && (expDur == 0 || item.lifeSpan < expDur) { table.expirationCheck() } }

执行

func main() { cache := cache2go.Cache("myCache") // 配置回调方法 cache.SetAddedItemCallback(func(entry *cache2go.CacheItem) { fmt.Println("Added:", entry.Key(), entry.Data(), entry.CreatedOn()) }) // 添加将执行回调 cache.Add("someKey", 0, "This is a test!") // Added: someKey This is a test! 2018-11-15 15:32:58.226001519 +0800 CST m=+0.000146463 } posted on 2018-11-15 15:05 北京涛子 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/liujitao79/p/9963583.html


最新回复(0)