首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rest :如何处理数千个相同的请求

Rest :如何处理数千个相同的请求
EN

Stack Overflow用户
提问于 2019-01-07 18:55:22
回答 3查看 128关注 0票数 2

我有rest web服务,它基本上需要很长的时间作为一个数字,并提供无论数字是质数或不是,即纯/文本,真或假。

数以百万计的用户正在使用这项服务。

现在有一个用户正在发送非常大的数字,比如(15-20位数字/大数字),我的服务正在花时间来计算这个数字是否为质数。该用户连续发送数以千计的请求,请求的数量相同。那么如何处理同样数以千计的请求。

例如:

在请求中发送101221323232324343个数字,我的服务需要3秒来确定这个数字是否是质数。现在他每秒发送1000个请求。

如何处理此案?

EN

回答 3

Stack Overflow用户

发布于 2019-01-07 20:15:47

您可以利用逐出内存缓存来调整其与最大内存大小或TTL相关的参数。有关一般信息,请查看LFU cache eviction。有许多实现,我推荐Ben Manes的caffeine library,因为它的效率。您可以使用DB,但在这种情况下,它的IO可能比新的计算更昂贵,因此我可能会将缓存限制为仅限于内存。

票数 3
EN

Stack Overflow用户

发布于 2019-01-07 19:08:55

您可以在数据库中存储大于给定位数的值。每当收到这样的数字时,都可以将它是否为质数存储在数据库中。您还可以使用缓存来存储最后n个不同的值,因此,当请求一个数字时,您可以检查它是否太长。如果不是,只需计算。如果它太长,请在缓存中搜索它。如果它在那里,就返回它。如果它不在那里,在数据库中搜索它。如果存在,则将其添加到缓存中(并可能删除最旧的值),然后将其返回给用户。如果它甚至不在数据库中,则计算它,将其存储在数据库中,将其添加到缓存中,并将答案返回给用户。

票数 2
EN

Stack Overflow用户

发布于 2019-01-07 19:57:24

代码语言:javascript
复制
@NotThreadSafe 
public CheckIfPrime extends Servelet  {
    private Long lastNumber;
    private Long isLastNumberPrime;

    public Long operation(ServeletRequest req, ServeletResponse res) {
        if(getNumberFromRequest(req) == lastNumber) {
            return isLastNumberPrime;
        } else {
             return checkForPrimeNumber(getNumberFromRequest);
        }
    }

}

使用同步原语来支持类的不变量和后置条件(一种方法是使用AtomicLong而不是Long)

如果您认为请求的数量可能太大(耗尽内存),请考虑使用分布式缓存。

对于非常高的TPS,请使您的应用程序具有响应性。checkForPrime()操作可以异步完成。为什么阻塞调用线程?

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

https://stackoverflow.com/questions/54072996

复制
相关文章

相似问题

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