首先,感谢所有可以提供有关该问题的反馈或分享有关我的解决方案的想法的人。希望一切都清楚这是我的问题:
在我的项目中,我在特定的路由路径(URL)下有一个控制器操作,该操作使我可以调用第三方Web服务来检索一些外部信息。为了调用第三方Web服务,此控制器操作需要根据登录的用户从数据库中获取一些访问数据。
这时,我需要对控制器操作进行速率限制,以便能够基于必须与访问数据一起使用的可自定义配置来限制外部Web服务API调用。
示例:用户A访问“ / myURL”。控制器操作会识别用户A并从数据库中获取其访问数据,从而使他能够从外部Web服务检索信息。
如果我需要添加一些速率限制配置,例如,这将阻止用户A每秒多次使用那些访问数据,然后调用外部Web服务,那么该配置必须存储在哪里?我应该如何检索和使用这些配置,以提供良好的性能并避免多次访问数据库?
我找到的解决方案:
我将速率限制配置与用户访问数据一起存储在数据库中。我正在缓存相同的速率限制配置以及已完成的请求数。当有新请求遇到控制器操作时,我正在检索和更新缓存中的速率限制数据。这样,我将能够自定义(或让用户自定义)存储在数据库中的速率限制值,并避免在需要使用多个读/写操作时对数据库造成压力。该数据库将仅用于保存速率限制配置,该限制更新后将替换缓存的配置。