需求:数据库内共有 10 万个资源,限制每用户每小时最多访问其中 100 个。
目前的思路:redis 里针对每个用户生成一个数组储存该用户已访问过的资源的 id ,每次请求时判断 ID 是否在数组中。
另外因为需求是限制访问资源种类而不是资源数量(比如实际上允许用户多次请求同一资源,只要不是不同资源就不会加以限制),且访问是与用户挂钩,所以似乎不太适合在业务前实现。
问题:
1 、感觉这种方式效率比较低,不是很优雅。
2 、限制有 1 小时时限,如何在数据超过期限后自动从数组中清除也是没啥太好办法。
这种需求有什么通用方案吗?
1
Livid MOD |
2
dayeye2006199 2022-02-26 13:15:37 +08:00 via Android 2
实现一个令牌桶算法怎么样?一小时发 100 个令牌,每次请求一个新的资源类型需要消耗一个令牌
https://www.cnblogs.com/bossma/p/how-to-implement-token-bucket-algorithm-using-redis.html |