目录
前言:
实现示例:
讲解:
前言:
java语言调用第三方接口,我会把调用的记录做入库处理并设置缓存时间,在查询有效期内就查入库的数据,过了缓存时间就查询第三方接口
实现示例:
public class ThirdPartyApi {
public static String getData(String param) {
// 第三方接口调用代码
return "data from third party api";
}
}
public class CacheUtil {
private static final long CACHE_TIME = 60 * 60 * 1000; // 缓存时间为1个小时
private static Map<String, CacheData> cacheMap = new ConcurrentHashMap<>();
public static String getDataFromCache(String param) {
CacheData cacheData = cacheMap.get(param);
if (cacheData != null && System.currentTimeMillis() - cacheData.getTimestamp() <= CACHE_TIME) {
// 缓存未过期,返回缓存数据
return cacheData.getData();
} else {
// 缓存已过期或不存在,查询第三方接口并更新缓存
String data = ThirdPartyApi.getData(param);
cacheMap.put(param, new CacheData(data, System.currentTimeMillis()));
return data;
}
}
private static class CacheData {
private String data;
private long timestamp;
public CacheData(String data, long timestamp) {
this.data = data;
this.timestamp = timestamp;
}
public String getData() {
return data;
}
public long getTimestamp() {
return timestamp;
}
}
}
public class Main {
public static void main(String[] args) {
String param = "test";
String data = CacheUtil.getDataFromCache(param);
System.out.println(data);
}
}
讲解:
ThirdPartyApi
类模拟了一个第三方接口的调用,CacheUtil
类实现了缓存的逻辑。使用ConcurrentHashMap
存储缓存数据,CacheData
类表示缓存数据的结构,包括数据和时间戳。在查询数据时,先判断缓存是否存在并且未过期,如果是则直接返回缓存数据,否则调用第三方接口获取数据并更新缓存。这个上面代码还可以使用 数据库去缓存, 然后在查询的时候 就先走查库,查询参数设置查询时间, 命中到缓存时间就有数据,没有命中数据 就走第三方接口