db中的数据每14秒更改一次,但可能会有许多来自客户端的调用,要求在此期间获取相同的数据。因此,在Servlet中,我实现了一个逻辑,如
if(fetchedDataMoreThan3SecondsAgo)
/*a servlet field */ lastFetchedData=fetchData();
return lastFetchedData; 但是,当我测量时,从db中获取数据只需要几毫秒。因此,我所做的事情可能已经由MySql完成了。这是不恰当的优化吗?因为使用我的“优化”,在一些罕见的情况下,客户端接收数据的时间可能比应该的长2-3秒。
发布于 2022-09-18 19:26:38
从架构的角度来看,在您的案例中,缓存是个好主意--您拥有的数据不会不断变化,对DB也没有意义--是昂贵的资源,所以缓存非常有意义。对于可伸缩性来说,这是非常重要的--如果您有数百个请求,那么如果您的应用程序收到了数百万个请求,这可能会导致许多问题而不需要缓存。
正确地实现缓存是个好问题,您提供的代码是最简单的,我可能会实现单独的缓存机制,它将负责在单独的线程中更新并在应用程序级别上共享它-servlet不需要关心更新周期。
实际上,您可以在应用程序中确定何时发生更改--首先将新数据和旧数据与关闭缓存进行比较,当您看到更改时,您可以开始等待13秒,然后关闭缓存,直到再次看到数据更改。在这种情况下,您不会有错误的数据。
https://stackoverflow.com/questions/73765020
复制相似问题