使用Java提供⼀个Cache⽅法,Cache缓存最近⼀天访问次数最多的10条数,并且代码带有注释
时间: 2023-05-22 07:06:55 浏览: 249
当然可以,下面是代码:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CacheUtil {
private static final long ONE_DAY = 24 * 60 * 60 * 1000;
private static Map<String, List<String>> cacheMap = new HashMap<>();
/**
* 添加缓存
* @param key 缓存键
* @param value 缓存值
*/
public static void addCache(String key, String value) {
List<String> list = cacheMap.get(key);
if (list == null) {
list = new ArrayList<>();
cacheMap.put(key, list);
}
list.add(value);
}
/**
* 获取最近一天访问次数最多的10条数
* @param key 缓存键
* @return 最近一天访问次数最多的10条数
*/
public static List<String> getTop10(String key) {
List<String> list = cacheMap.get(key);
if (list == null || list.isEmpty()) {
return new ArrayList<>();
}
long now = System.currentTimeMillis();
List<String> result = new ArrayList<>();
Map<String, Integer> countMap = new HashMap<>();
for (String s : list) {
String[] arr = s.split(",");
long time = Long.parseLong(arr[0]);
if (now - time > ONE_DAY) { // 如果超过一天没访问,就不算
continue;
}
String data = s.substring(13);
if (countMap.containsKey(data)) {
countMap.put(data, countMap.get(data) + 1);
} else {
countMap.put(data, 1);
}
}
List<Map.Entry<String, Integer>> countList = new ArrayList<>(countMap.entrySet());
countList.sort((o1, o2) -> o2.getValue() - o1.getValue());
int size = Math.min(countList.size(), 10);
for (int i = 0; i < size; i++) {
result.add(countList.get(i).getKey());
}
return result;
}
}
这个类可以用来添加缓存和获取最近一天访问次数最多的10条数。我们可以定义一个缓存键,然后往里面添加数据,缓存值是一个字符串,它的格式为"timestamp,data",其中timestamp是时间戳,data是需要缓存的数据。然后当我们需要获取最近一天访问次数最多的10条数的时候,传入缓存键即可。这个方法会返回一个List,里面包含最近一天访问次数最多的10条数据。
阅读全文