首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在分布式web服务中保持缓存预热

在分布式web服务中保持缓存预热
EN

Stack Overflow用户
提问于 2013-01-15 05:07:45
回答 1查看 100关注 0票数 2

我一直在思考在高负载web服务中可能遇到的一个问题,其中许多进程可以处理请求,并且具有中央缓存。

问题是,在数据库中修改即将过期的缓存项的值时,可能会对性能产生巨大的影响。如果多个请求同时请求一个刚刚过期的条目,则每个请求都将命中数据库一次。

您可以在每次更新数据库时更新缓存以避免这种情况,但现在您有一个竞争条件。

你将如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2013-01-15 05:14:54

我自己也遇到过这种情况。这里的解决方案不是使缓存过期,而是更新它。当使用新内容更新数据库时,请更新缓存。瞧,没有竞态条件。如果更新失败(或需要几秒钟),您的数据库将不会因为尝试获取未缓存的数据而遭受重创,因为它将有旧的缓存可供回退。:)

编辑:

要解决线程之间相互竞争的问题,您需要合并某种mutex lock。你会很自然地使用一些适用于你的语言的东西。

基本上,这是一种互斥。

您锁定了逻辑的一部分,而其他线程必须等待。这避免了数据损坏。

这里有一个例子:

某个线程想要更新数据库:

添加互斥锁。更新database.

  • Update cache.

  • Unlock
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14326666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档