一周工作问题总结
- [1. 接口调用频率](#1. 接口调用频率)
- [2. 汉字在数据库中占用字节问题](#2. 汉字在数据库中占用字节问题)
- [3. Map在循环中修改自己的key与value](#3. Map在循环中修改自己的key与value)
- [4. Group BY](#4. Group BY)
- 5.递归同步数据
- 6.代码移动Idea飘红
1. 接口调用频率
供应商给的接口可以每秒调用5-10次,那么我为了保险每秒调用5次,为了防止过度调用接口,可以在每次递归调用之间使用Thread.sleep()
方法来休眠一段时间。每次调用之间的休眠时间设置为200毫秒(即每秒调用5次),以确保在接口的限制范围内。
java
public void recursiveAPICall() {
// 递归调用的逻辑代码
// 每次调用之后休眠200毫秒
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 继续递归调用
recursiveAPICall();
}
2. 汉字在数据库中占用字节问题
如下图一个汉字占用1个字节。
MYSQL建表常用字段以及所占用字节大小
字段类型 | 字节 |
---|---|
bigint unsigned | 8 |
varchar(32) | 32 |
varchar(255) | 255 |
int unsigned | 4 |
tinyint unsigned | 1 |
timestamp | 4 |
smallint unsigned | 2 |
text | 可变长度文本,占用的字节数取决于实际存储的内容长度 |
datetime | 8 |
3. Map在循环中修改自己的key与value
见以前写过的一篇文章Map在循环中修改自己的key与value
4. Group BY
这个brush_face表中每个人每天有多条记录,要拿到最新的记录,就需要group by name并且指定获取max(time)时间的。
sql
SELECT name, date, max( time ) AS time
FROM
brush_face
WHERE
date = '2023-12-21'
AND NAME IN ( '小范24914', '北京斯卡小梁翠' )
GROUP BY name;
见文章 http://t.csdnimg.cn/SNtbO
还要注意GROUP BY虽然是分组,但是注意要搭配聚合函数使用
5.递归同步数据
java
/**
* 同步订单
*
* @param param GaodeSyncOrderParam
* @return Long
*/
private Long syncXXXXXXOrderList(GaodeSyncOrderParam param, Long totalItemNum) {
// 无法提供数据总数量,所以需要中间变量pageNo
Integer pageNo = param.getPageNo();
// 同订单请求参数
OrderListReq orderListReq = new OrderListReq();
orderListReq.setPageNo(pageNo);
orderListReq.set...
log.info("======>[XXXXXServiceImpl::syncXXXXXXOrderList] 递归同步订单数据异常,post请求参数:{}", JSONObject.toJSONString(orderListReq));
List<OrderListItem> ItemList = null;
try {
ItemList = gaodeClient.orderList(orderListReq);
} catch (Exception e) {
log.error("======>[XXXXXServiceImpl::syncXXXXXXOrderList] 同步订单数据异常,递归参数:{},错误:{}", JSONObject.toJSONString(orderListReq), e.getMessage(), e);
return 0L;
}
// 第一页查询不到数据返回
if (pageNo.equals(1) && (null == ItemList || ItemList.isEmpty())) {
return 0L;
}
// 存储/更新订单数据
if (!ItemList.isEmpty()) {
saveOrUpdateOrderData(ItemList, param);
}
// 订单总数加1,分页加1
totalItemNum += ItemList.size();
pageNo += 1;
// 每页查询每次查询100条记录
if (ItemList.size() == param.getPageSize()) {
param.setPageNo(pageNo);
// 每秒调用5次,每次休眠200毫秒
DateUtils.milliSleep(param.getCallApiSleep());
log.info("======>[XXXXXServiceImpl::syncXXXXXXOrderList] 递归同步订单列表,第{}页,每次同步:{}条,已同步{}条", pageNo, param.getPageSize(), totalItemNum);
syncXXXXXXOrderList(param, totalItemNum);
}
return totalItemNum;
}
6.代码移动Idea飘红
代码中有些层级错误的,我手动移动之后,代码直接飘红,我重启idea不行,把某个类删除重新写一遍还是不行。通过Reload All from Disk
还是不行。
最后我通过Invalidate Caches...
清理了无效缓存并重启就好了!