gpt4 book ai didi

performance - 缓存高流量站点时处理并发问题

转载 作者:行者123 更新时间:2023-12-04 21:57:41 24 4
gpt4 key购买 nike

我在一次采访中被问到这个问题:

对于高流量网站,有一种方法(比如 getItems())会被频繁调用。为了防止每次都去数据库,结果被缓存。但是,可能有成千上万的用户同时尝试访问缓存,因此锁定资源不是一个好主意,因为如果缓存已过期,则会调用 DB,所有用户都将拥有等待数据库响应。处理这种情况以便用户不必等待的好策略是什么?

我认为这对于当今大多数高流量站点来说是非常常见的情况,但我没有处理这些问题的经验——我有处理数百万条记录的经验,但没有处理数百万用户的经验。

我如何开始学习高流量网站使用的基础知识,以便在 future 的面试中更有信心?通常我会开始一个业余项目来学习一些新技术,但不可能在侧面建立一个高流量的网站:)

最佳答案

你在面试中被问到的问题就是所谓的Cache miss-storm - 许多用户触发缓存的再生,以这种方式击中数据库的场景。

为了防止这种情况,首先你必须设置软和硬到期日期。假设硬到期日期是 1 天,软到期日期是 1 小时。硬是在缓存服务器中实际设置的,软是在缓存值本身中(或在缓存服务器中的另一个键中)。应用程序从缓存中读取,看到软时间已过期,将软时间提前 1 小时并访问数据库。这样下一个请求将看到已经更新的时间,并且不会触发缓存更新——它可能会读取陈旧的数据,但数据本身将处于重新生成的过程中。

下一点是:你应该有缓存预热的程序,例如不是用户触发缓存更新,而是应用程序中预填充新数据的过程。

最坏的情况是例如当您没有任何数据时,重新启动缓存服务器。在这种情况下,您应该尽可能快地填充缓存,并且预热过程可能会起到至关重要的作用。即使您在缓存中没有值,“锁定”缓存(将其标记为正在更新),仅允许对数据库进行一次查询,并通过请求资源在应用程序中进行处理也是一个很好的策略在给定的超时后再次

关于performance - 缓存高流量站点时处理并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com