我有一个用户表,其中有一个api键列和总学分/用过的学分列。
用户获得一个API密钥,使用该密钥,他们可以使用我的API,但只有在used credits<=total credits的情况下。
因为,这是一个API,所以我可能很容易每秒处理数十个请求。这样就排除了在某种API中间件中每次调用时直接从DB中读取/写入数据的可能性。
那么,正确的方法是什么呢?
api-key:remaining credits存储为redis中的键值对,并在每个API调用中使用它?如果有多个服务器节点,并且一个节点从redis读取一个信用并开始执行API调用,那么会发生什么情况?但是在中间,另一个节点将剩余的信用设置为零?(即,奇怪的并发边缘情况)通常,我需要该解决方案具有高度的可伸缩性,并且支持高并发性(每个实例>100 reqs/sec,并且说>100 month调用/月)。
有什么想法吗?
发布于 2020-11-18 09:33:19
差不多吧。您也可以按键限制事务处理数秒。但这是可选的。
https://stackoverflow.com/questions/64890023
复制相似问题