首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >缓存放置项并发性和吞吐量

缓存放置项并发性和吞吐量
EN

Stack Overflow用户
提问于 2017-12-20 12:06:08
回答 1查看 57关注 0票数 1

大多数CDN服务器对经常访问的内容使用缓存。

场景:允许假设有人上传了一张非常流行的图片,许多用户(1000)从同一个位置试图访问该图片。

问题:让说,secs服务器首先接收请求,然后检查它的缓存,然后为该图片找到内容缺失,然后从CDN.If中提取内容,让checks和服务器获得更多的请求,同时对相同的内容进行检索。

服务器是否会从服务器获取更多的内容999 (因为服务器仍然在提取数据并且缓存中没有数据)并更新缓存?

如果不是,服务器实现什么样的方案来避免这种情况。

EN

回答 1

Stack Overflow用户

发布于 2017-12-20 15:00:45

您可以在服务器端设置一个锁,以避免对CDN的太多请求。

当服务器收到请求时:

  1. 工作线程检查密钥是否存在。如果键存在,则返回值。
  2. 如果键不存在,即缓存丢失,则工作线程试图锁定互斥锁。
  3. 如果锁定成功,则此工作线程从CDN获取数据、更新缓存并解除互斥锁。
  4. 如果此线程无法锁定互斥对象,即其他线程正在向CDN发送请求,则它会休眠一段时间,例如1秒,然后进入步骤1重试整个进程。

如果您有许多服务器,并且缓存在这些服务器之间共享,即多个进程。您可以使用分布式锁,例如Redis‘SETNX

但是,在这种情况下,您需要小心使用步骤3:如果服务器成功锁定,但在解锁之前崩溃。其他服务器将永远等待。因此,您还需要设置锁的过期时间。

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

https://stackoverflow.com/questions/47905718

复制
相关文章

相似问题

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