redis实现按次结算的服务控制
业务场景
人工智能领域的语义识别与自动对话将是未来服务业机器人应答呼叫体系中的重要技术,百度自研用户评价语义识别服务,免费开放给企业试用,同时训练百度自己的模型,现对试用用户的使用行为进行限速,限制每个用户每分钟最多发起10次调用
解决方案
-
设计计数器,记录调用次数,用于控制业务执行次数。以用户id为key,使用次数作为value
-
在调用前获取次数,判断是否超过限定次数
- 不超过次数的情况下,每次调用计数+1
- 业务调用失败,计数-1
-
为计数器设置生命周期为指定周期,例如一秒/分钟,自动清空周期内使用次数
解决方案改良(一种思路)
-
取消最大值的判定,利用incr操作超过最大值抛出异常的形式替代每次判断是否大于最大值
-
判断是否为nil
- 如果是,设置为Max-次数
- 如果不是,计数+1
- 业务调用失败,计数-1
-
遇到异常即+操作超过上限,视为使用达到上限