我在 Golang 工作,這是我的新手,我遇到了兩篇有趣的文章:https://hackernoon.com/in-memory-caching-in-golang來自 hackernoon 的那個非常好,第一個示例(簡單地圖)正是我要創建緩存的原因,因為它給出了緩存中過期值的示例。我很難理解的地方是,它沒有說明實現是否只創建緩存的一個實例而不是多個副本,這會發生沖突,或者您在一個副本中有一個值而在另一個副本中有一個值,并且查找不會'無法正常工作。在另一個鏈接https://thedevelopercafe.com/articles/singleton-in-golang-839d8610958b中,它討論了一個緩存的實例化。所以,我的問題是他們都使用同步,所以我可以請有 Golang 經驗的人告訴我來自 Hackernoon 的示例在名為 newlocalcache 的函數中是否設置了一個單例,如果沒有,我需要做什么來添加它?
1 回答

湖上湖
TA貢獻2003條經驗 獲得超2個贊
名為 newlocalcache 的函數設置了一個單例
不,它在每次調用時都會構造并返回一個新的本地緩存。
如果不是,我需要做什么來添加它?
只調用一次。例如:
var localCacheSingleton *localCache
var newLocalCacheOnce sync.Once
func newLocalCache(cleanupInterval time.Duration) *localCache {
newLocalCacheOnce.Do(func() {
lc := &localCache{
users: make(map[int64]cachedUser),
stop: make(chan struct{}),
}
lc.wg.Add(1)
go func(cleanupInterval time.Duration) {
defer lc.wg.Done()
lc.cleanupLoop(cleanupInterval)
}(cleanupInterval)
localCacheSingleton = lc
})
return localCacheSingleton
}
- 1 回答
- 0 關注
- 124 瀏覽
添加回答
舉報
0/150
提交
取消