如何在Go语言中创建单例缓存

ngynwnxp  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(124)

我在Golang工作,我对Golang很陌生,我偶然发现了两篇有趣的文章:
https://hackernoon.com/in-memory-caching-in-golang
hackernoon的那个真的很好,第一个例子(Simple Map)正是我创建缓存的原因,因为它给出了一个使缓存中的值过期的示例。我很难理解的是,它没有说明实现是否只创建该高速缓存的一个示例,而不是多个副本,这会发生冲突,或者一个副本中有一个值,另一个副本中有一个值,查找将无法正常工作。
在另一个链接https://thedevelopercafe.com/articles/singleton-in-golang-839d8610958b中,它谈到了一个缓存的示例化。
所以,我的问题是,他们都使用同步,所以我可以问一个在Golang有经验的人,告诉我Hackernoon的例子中的函数newlocalcache是否设置了一个单例,如果没有,我需要做什么来添加它?

xytpbqjk

xytpbqjk1#

名为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
}

相关问题