最近给了我一个项目,REST已经以最基本的方式实现了,这就是请求到app,app点击控制器,查询db,返回响应。
因此,随着数据的大量增长,这一机制开始在响应时间方面产生问题,这是非常明显的。此外,这种方法还通过处理大量占用基础设施。
现在,我熟悉API和非API的缓存机制,但是在API情况下,推荐的方法是什么呢?此外,我们需要在基础设施和代码模块方面添加什么来处理这类事情?
对于任何一个精通的人来说,不同方法的一些测试用例都是很好的。
发布于 2017-10-20 11:15:45
对于REST服务,您通常希望使用web和HTTP协议的可用缓存机制。这意味着在响应中使用缓存指令或实体标签。
在这种情况下,您要做的是完全消除对某些资源的某些请求,或者在收到请求后限制服务器需要完成的工作。
您需要分析您的应用程序,并且:
您应该在网上搜索诸如"REST缓存策略“之类的内容,并查看其他更适合您的情况。
当然,现在缓存并不是单独发生的。你需要实现它。这意味着:
发布于 2017-10-18 19:43:16
通常,这将在Controller和DB之间的一个层中处理(通常是实现Repository模式的层)。在这个存储层中,您将有处理缓存操作的代码。
一个简单的实现可能只是保留了先前请求的列表以及响应的内容;如果一个新的请求与前面请求的内容匹配,那么您将返回相同的响应(而不按DB获取它)。
然后,您将开始改进该实现--可能通过跟踪最后一次从DB获取缓存响应的时间,并决定如果上次缓存的响应比某个时间长一些,则重新捕获它。
您还可以拆分其他缓存失效策略,并对不同的实体使用不同的策略(一些实体可能永远不需要缓存,另一些实体可能根据请求的次数而不是时间而可以缓存,还有一些实体可能需要在与该ID匹配的实体发生写入事件时使其缓存失效.也可能是该类型实体的任何写事件)。
这里的基本内容是,您希望将逻辑从Controller中分离出来,并在理想情况下将其与实际查询数据库的代码分开。
https://softwareengineering.stackexchange.com/questions/359363
复制相似问题