前提:某服务1s内只能被一个用户调用10次,满足条件后用户会被限制使用该项服务
1、用户开始使用该服务,先判断用户是否使用过该服务
get user:24
(nil) # 说明该用户还未使用过该服务
2、开始调用,存入用户数据并设立规矩
setex user:24 1 922...797
# 922...807为Redis可存储数据的最大值,作为调用1次的标志,1表示user:24在Redis中的生命周期只有1s
3、第2次调用(直到调用到第10次,仍为以下操作)
incr user:24
4、第11次调用(以Redis最大数值作为判断条件,可不用每次都判断调用次数是否到10了,提高效率)
incr user:24
# 此时会超出Redis可存的最大数值: 922...807,因此会抛异常,程序识别到异常就终止对该用户的服务
5、实现
public class UserService {
private String id;
private int num;
public UserService(String id, int num) {
this.id = id;
this.num = num;
}
public void serviceOperation() {