写出用redis和hashmap统计某个用户调用某个接口的次数的Java代码
时间: 2023-05-31 22:05:54 浏览: 115
redis客户端Java代码实例
以下是使用Redis和HashMap统计某个用户调用某个接口的次数的Java代码:
```java
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;
public class ApiUsageCounter {
private Jedis jedis;
private String redisKeyPrefix = "api_usage:";
public ApiUsageCounter(String redisHost, int redisPort) {
jedis = new Jedis(redisHost, redisPort);
}
public void incrementApiUsage(String userId, String apiName) {
String redisKey = redisKeyPrefix + userId;
Map<String, String> apiUsage = jedis.hgetAll(redisKey);
if (apiUsage == null) {
apiUsage = new HashMap<>();
}
String countStr = apiUsage.getOrDefault(apiName, "0");
int count = Integer.parseInt(countStr) + 1;
apiUsage.put(apiName, Integer.toString(count));
jedis.hmset(redisKey, apiUsage);
}
public int getApiUsageCount(String userId, String apiName) {
String redisKey = redisKeyPrefix + userId;
String countStr = jedis.hget(redisKey, apiName);
return countStr == null ? 0 : Integer.parseInt(countStr);
}
}
```
这个类有两个方法:`incrementApiUsage`方法用来增加某个用户调用某个接口的次数,`getApiUsageCount`方法用来查询某个用户调用某个接口的次数。
这个类用一个Redis的hashmap来存储每个用户调用每个接口的次数。hashmap的key是用户ID,value是另一个hashmap,这个hashmap的key是接口名,value是调用次数。
在`incrementApiUsage`方法中,首先从Redis中获取当前用户调用每个接口的次数,如果之前不存在这个用户的数据,就创建一个新的hashmap。然后从这个hashmap中获取当前接口的调用次数,增加1并保存回Redis中。
在`getApiUsageCount`方法中,直接从Redis中获取当前用户调用当前接口的次数。如果之前没有调用过这个接口,返回0。
使用示例:
```java
ApiUsageCounter counter = new ApiUsageCounter("localhost", 6379);
String userId = "123";
String apiName = "/api/users";
counter.incrementApiUsage(userId, apiName);
int count = counter.getApiUsageCount(userId, apiName);
System.out.println("User " + userId + " called API " + apiName + " " + count + " times");
```
阅读全文