草庐IT

performance - 戈朗 : right way to store map structure in lru cache

coder 2024-07-10 原文

我有一个像这样的结构:map[key]value,我想通过一个字符串将它存储在"github.com/golang/groupcache/lru"中键,例如 cacheKey

这是我的问题:

我发现每当我想更新缓存项时,我都需要先获取:

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缓存的来源。这是我的笔记:

  • 无论您做什么决定,如果您计划在 goroutine 中使用它,请确保对该 LRU 的访问是线程安全的。
  • 您可以存储 *map 而不是普通的 map,这样就无需调用 add。
  • 如果可以使用覆盖添加到 map ,则跳过存在检查(if v, ok...)

话虽如此,它变成了这样:

m sync.Mutex
m.Lock()
defer m.Unlock()
cache.Get(cacheKey)[key] = new_value

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

关于performance - 戈朗 : right way to store map structure in lru cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40302270/

有关performance - 戈朗 : right way to store map structure in lru cache的更多相关文章

  1. ruby-on-rails - Resque - 类的未定义方法 'perform' - 2

    我目前对后台队列不太满意。我正在尝试让Resque工作。我已经安装了redis和Resquegem。Redis正在运行。一个worker正在运行(rakeresque:workQUEUE=simple)。使用Web界面,我可以看到工作人员正在运行并等待工作。当我运行“rakeget_updates”时,作业已排队但失败了。我已经用defself.perform和defperform试过了。发条.raketask:get_updates=>:environmentdoResque.enqueue(GetUpdates)end类文件(app/workers/get_updates.rb)c

  2. ruby-on-rails - rails : Faster way to perform updates on many records - 2

    在我们的Rails3.2.13应用程序(Ruby2.0.0+Heroku上的Postgres)中,我们经常从API中检索大量订单数据,然后我们需要在我们的数据库中更新或创建每个订单,因为以及协会。单个订单创建/更新自身加上大约。10-15个关联对象,我们一次最多导入500个订单。下面的代码可以工作,但问题是它在速度方面一点也不高效。创建/更新500条记录大约需要。1分钟并生成6500多个数据库查询!defadd_details(shop,shopify_orders)shopify_orders.eachdo|shopify_order|order=Order.where(:order

  3. ruby - 是 &method( :method_name) idiom bad for performance in Ruby? - 2

    我最近遇到了&method(:method_name)语法。(这使用Object#method方法-RDoclink)例如,[5,7,8,1].each(&method(:puts))相当于[5,7,8,1].each{|number|putsnumber}在Ruby的各种实现中,与前者相比,后者是否存在性能损失?如果是,实现者是否正在努力提高其性能? 最佳答案 是的,这似乎对性能不利。deftimestart=Time.nowyield"%.6f"%(Time.now-start)enddefdo_nothing(arg)endR

  4. ruby - Sidekiq 如何将参数传递给 perform 方法? - 2

    我有这个Sidekiqworker:classDealNoteWorkerincludeSidekiq::Workersidekiq_optionsqueue::emaildefperform(options={})ifoptions[:type]=="deal_watch_mailer"deal_watchers=DealWatcher.where("deal_id=?",options[:deal_id])deal_note=DealNote.find(options[:deal_note_id])current_user=User.find(options[:current_us

  5. javascript - 检查 Javascript 中的正整数 : performance and security - 2

    我已经编写(并复制)了几行Javascript,它很好地满足了我的目的。但我正试图找出一种更好的方法(跨浏览器和更好的性能)来做到这一点。我从friend那里复制了isInteger函数,但我不明白为什么我们要在以下条件下检查字符串值:if(((c"9")))returnfalse;上述条件工作正常,但当我更改它以检查数值时,功能中断。输入字段开始接受字母字符。这是我更改它时的样子:if(((c9)returnfalse;我试图注释掉部分内容,以便您了解正在发生的事情。此代码中还有任何安全漏洞吗?我读到1innerHTML1方法可以打开一些安全漏洞,因此我们需要用它执行“干净”操作。因

  6. javascript - 是否可以在 headless chrome 中使用 window.performance.memory? - 2

    我想使用window.performance.memory来测量我的headlesschrome测试中是否有任何内存泄漏。在测试中:beforeEach(()=>{$('body').append(initHtml);console.log(window.performance.memory)});结果:MemoryInfo{}在开发控制台中:console.log(window.performance.memory)结果:MemoryInfo{totalJSHeapSize:27600000,usedJSHeapSize:16100000,jsHeapSizeLimit:153000

  7. javascript - Safari 中是否有 window.performance.getEntriesByType 的 polyfill? - 2

    看起来window.performance.getEntries和window.performance.getEntriesByType没有在Safari中定义。是否有针对这些功能的polyfill?还是有人创造了某种替代方案?我想做的是获取页面中加载的所有资源。(所有图片、css和js文件) 最佳答案 由于Safari不以任何JavaScript方式提供该信息,因此不可能为此创建Polyfill。别找了。你不会有运气的:(PS.:小心这个答案。window.performance上的一些功能可以用polyfill实现,但不是我要求

  8. javascript - ES6 模块 : Exporting and importing performance differences - 2

    我的vue项目中有一些组件。我不喜欢importloaderfrom'@/components/someComponent1/someComponent1.vue';因为要写的东西很多而且我必须为每个组件重复一遍。所以我为components文件夹写了一个index.js:export{defaultassomeComponent1}from'./someComponent1/someComponent1.vue';export{defaultassomeComponent2}from'./someComponent2/someComponent2.vue';...这将允许我在一行中导

  9. javascript - window.performance.now() 在 Safari 9 中未定义 - 2

    我在Safari9中使用window.performance.now()时遇到问题。我的操作系统是MacbookProMid2010中的OSXMavericks。Apple为OSXYosemite和Mavericks用户发布了Safari9:http://www.macrumors.com/2015/09/30/apple-releases-safari-9-for-yosemite-users/caniuse.com/#search=performance说在Safari8和9中支持window.performance.now():但我今天才从Safari7更新到Safari9并且非

  10. javascript - Leaflet.js 和 JSON 数据 : optimization and performance - 2

    我目前正在使用Javascript进行我的第一次真正的郊游,以构建我们客户数据的交互式map。到目前为止,我已经掌握了基础知识,但是当我开始使用标记超过500个poi或使用圆形标记超过10,000个时,性能开始下降....如果有人可以就如何优化我的内容提供一些建议'我已经有了,或者也许我最好转移到像mongo这样的合适的数据库来获取json数据,或者用NodeJs做服务器端的工作?任何建议将不胜感激:)varapiKey='BC9A493B41014CAABB98F0471D759707',styleID='108219';//styleID='997';//varmap=L.map(

随机推荐