接着上篇嘮!Google Guava 配合 List分頁工具類進行接口優化改造。
接上篇,你可以在項目初始化或者通過定時任務把從MySQL查詢出來的幾乎不會改變的大量的數據放到Cache中,
然後配合工具類進行模擬MySQL的分頁查詢,速度比MySQL快很多
不廢話貼代碼
/**
* @author bo bo
* @date 2019/12/16 9:23
* @desc list集合工具類
*/
public class ListPagerUtils {
/**
* @param pageIndex 當前頁碼
* @param pageSize 當前頁面大小
* @param list 需要分頁的集合
* @return
*/
public static List Pager( int pageIndex, int pageSize, List list) {
//使用list 中的sublist方法分頁
List<T> dataList = null;
// 每頁顯示多少條記錄
int currentPage; //當前第幾頁數據
int totalRecord = list.size(); // 一共多少條記錄
int totalPage = totalRecord % pageSize; // 一共多少頁
if (totalPage > 0) {
totalPage = totalRecord / pageSize + 1;
} else {
totalPage = totalRecord / pageSize;
}
System.out.println("總頁數:" + totalPage);
// 當前第幾頁數據
currentPage = totalPage < pageIndex ? totalPage : pageIndex;
// 起始索引
int fromIndex = pageSize * (currentPage - 1);
// 結束索引
int toIndex = pageSize * currentPage > totalRecord ? totalRecord : pageSize * currentPage;
try {
dataList = list.subList(fromIndex, toIndex);
} catch (IndexOutOfBoundsException e) {
e.printStackTrace();
}
return dataList;
}
}
實際優化的業務部分代碼
//今天的訂單
if (type.equals("1")) {
Object cacheOrder = GuavaCacheUtil.get("todayWecharOrder");
if (cacheOrder != null) {
List<WecharOrderVo> orderList = (List<WecharOrderVo>) cacheOrder;
for (WecharOrderVo order : orderList) {
if (order.getTenantId().equals(map.get("tenantId"))) {
neworderList.add(order);
}
}
List pagerList = ListPagerUtils.Pager(format.getIndex(), format.getLimit(), neworderList);
respMap.put("orderList", pagerList);
respMap.put("count", neworderList.size());
}
}
最後來個結果圖,效果還不錯,幾乎速度都是在50ms左右
優化前:線上版本
優化後:沒分頁
優化後:有分頁
當然這可能不是最優優化。也希望你能給我你的建議,一起交流學習