我有一个类似map[key]value的结构,我想通过一个字符串键"github.com/golang/groupcache/lru"将它存储在cacheKey中。

这是我的问题:

我发现每当我想要更新缓存的项目时,都需要先对其进行Get编码:

item := cache.Get(cacheKey)
if v, ok := item[key]; ok{
    item[key]=new_value
    cache.Add(cacheKey, item)
}

这是正确的方法吗?

或者,正如某些人建议的那样,我需要重新设计我的结构,以确保每当我要更新它时就可以执行cache.Add(cacheKey, item)

或者,我什至应该使用cacheKey_key之类的组合键来存储该项目?

最佳答案

上面的代码将起作用。我查看了您引用的LRU缓存的来源。这是我的笔记:

  • 不管您做出什么决定,如果打算在goroutines中使用它,请确保对该LRU的访问是线程安全的。
  • 您可以存储*map而不是普通的map,这将消除调用add的需要。
  • 如果可以通过覆盖添加到 map 中,则跳过状态检查(if v, ok...)

  • 话虽如此,这变成了:
    m sync.Mutex
    m.Lock()
    defer m.Unlock()
    cache.Get(cacheKey)[key] = new_value
    

    如果您要详细说明计划存储的数据类型,我们可能会尝试提出一种替代解决方案。

    07-28 12:44