精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

優(yōu)化SpringBoot吞吐量的七個高效策略

開發(fā) 前端
supplyAsync 用于提供返回值的情況,CompletableFuture 還有一個不需要返回值的異步調用方法 runAsync(Runnable runnable),一般我們在優(yōu)化 Controller 時,使用這個方法比較多。

1、異步執(zhí)行

實現(xiàn)方式二種:

  • 使用異步注解 @aysnc、啟動類:添加 @EnableAsync 注解
  • JDK 8 本身有一個非常好用的 Future 類——CompletableFuture
@AllArgsConstructor
public class AskThread implements Runnable{
    private CompletableFuture<Integer> re = null;

    public void run() {
        int myRe = 0;
        try {
            myRe = re.get() * re.get();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(myRe);
    }

    public static void main(String[] args) throws InterruptedException {
        final CompletableFuture<Integer> future = new CompletableFuture<>();
        new Thread(new AskThread(future)).start();
        //模擬長時間的計算過程
        Thread.sleep(1000);
        //告知完成結果
        future.complete(60);
    }
}

在該示例中,啟動一個線程,此時 AskThread 對象還沒有拿到它需要的數(shù)據(jù),執(zhí)行到  myRe = re.get() * re.get() 會阻塞。

我們用休眠 1 秒來模擬一個長時間的計算過程,并將計算結果告訴 future 執(zhí)行結果,AskThread 線程將會繼續(xù)執(zhí)行。

public class Calc {
    public static Integer calc(Integer para) {
        try {
            //模擬一個長時間的執(zhí)行
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return para * para;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        final CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> calc(50))
                .thenApply((i) -> Integer.toString(i))
                .thenApply((str) -> "\"" + str + "\"")
                .thenAccept(System.out::println);
        future.get();
    }
}

CompletableFuture.supplyAsync 方法構造一個 CompletableFuture 實例,在 supplyAsync() 方法中,它會在一個新線程中,執(zhí)行傳入的參數(shù)。

在這里它會執(zhí)行 calc() 方法,這個方法可能是比較慢的,但這并不影響 CompletableFuture 實例的構造速度,supplyAsync() 會立即返回。

而返回的 CompletableFuture 實例就可以作為這次調用的契約,在將來任何場合,用于獲得最終的計算結果。

supplyAsync 用于提供返回值的情況,CompletableFuture 還有一個不需要返回值的異步調用方法 runAsync(Runnable runnable),一般我們在優(yōu)化 Controller 時,使用這個方法比較多。

這兩個方法如果在不指定線程池的情況下,都是在 ForkJoinPool.common 線程池中執(zhí)行,而這個線程池中的所有線程都是 Daemon(守護)線程,所以,當主線程結束時,這些線程無論執(zhí)行完畢都會退出系統(tǒng)。

核心代碼:

CompletableFuture.runAsync(() ->
   this.afterBetProcessor(betRequest,betDetailResult,appUser,id)
);

異步調用使用 Callable 來實現(xiàn):

@RestController  
public class HelloController {

    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

    @Autowired  
    private HelloService hello;

    @GetMapping("/helloworld")
    public String helloWorldController() {
        return hello.sayHello();
    }

    /**
     * 異步調用restful
     * 當controller返回值是Callable的時候,springmvc就會啟動一個線程將Callable交給TaskExecutor去處理
     * 然后DispatcherServlet還有所有的spring攔截器都退出主線程,然后把response保持打開的狀態(tài)
     * 當Callable執(zhí)行結束之后,springmvc就會重新啟動分配一個request請求,然后DispatcherServlet就重新
     * 調用和處理Callable異步執(zhí)行的返回結果, 然后返回視圖
     *
     * @return
     */  
    @GetMapping("/hello")
    public Callable<String> helloController() {
        logger.info(Thread.currentThread().getName() + " 進入helloController方法");
        Callable<String> callable = new Callable<String>() {

            @Override  
            public String call() throws Exception {
                logger.info(Thread.currentThread().getName() + " 進入call方法");
                String say = hello.sayHello();
                logger.info(Thread.currentThread().getName() + " 從helloService方法返回");
                return say;
            }
        };
        logger.info(Thread.currentThread().getName() + " 從helloController方法返回");
        return callable;
    }
}

異步調用的方式 WebAsyncTask:

@RestController  
public class HelloController {

    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

    @Autowired  
    private HelloService hello;

    /**
     * 帶超時時間的異步請求 通過WebAsyncTask自定義客戶端超時間
     * @return
     */  
    @GetMapping("/world")
    public WebAsyncTask<String> worldController() {
        logger.info(Thread.currentThread().getName() + " 進入helloController方法");

        // 3s鐘沒返回,則認為超時
        WebAsyncTask<String> webAsyncTask = new WebAsyncTask<>(3000, new Callable<String>() {

            @Override  
            public String call() throws Exception {
                logger.info(Thread.currentThread().getName() + " 進入call方法");
                String say = hello.sayHello();
                logger.info(Thread.currentThread().getName() + " 從helloService方法返回");
                return say;
            }
        });
        logger.info(Thread.currentThread().getName() + " 從helloController方法返回");

        webAsyncTask.onCompletion(new Runnable() {

            @Override  
            public void run() {
                logger.info(Thread.currentThread().getName() + " 執(zhí)行完畢");
            }
        });

        webAsyncTask.onTimeout(new Callable<String>() {

            @Override  
            public String call() throws Exception {
                logger.info(Thread.currentThread().getName() + " onTimeout");
                // 超時的時候,直接拋異常,讓外層統(tǒng)一處理超時異常
                throw new TimeoutException("調用超時");
            }
        });
        return webAsyncTask;
    }

    /**
     * 異步調用,異常處理,詳細的處理流程見MyExceptionHandler類
     * @return
     */  
    @GetMapping("/exception")
    public WebAsyncTask<String> exceptionController() {
        logger.info(Thread.currentThread().getName() + " 進入helloController方法");
        Callable<String> callable = new Callable<String>() {

            @Override  
            public String call() throws Exception {
                logger.info(Thread.currentThread().getName() + " 進入call方法");
                throw new TimeoutException("調用超時!");
            }
        };
        logger.info(Thread.currentThread().getName() + " 從helloController方法返回");
        return new WebAsyncTask<>(20000, callable);
    }
}


2、增加內嵌 Tomcat 的最大連接數(shù)

代碼如下:

@Configuration
public class TomcatConfig {
    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory tomcatFactory = new TomcatServletWebServerFactory();
        tomcatFactory.addConnectorCustomizers(new MyTomcatConnectorCustomizer());
        tomcatFactory.setPort(8005);
        tomcatFactory.setContextPath("/api-g");
        return tomcatFactory;
    }
    class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer {
        public void customize(Connector connector) {
            Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
            //設置最大連接數(shù)
            protocol.setMaxConnections(20000);
            //設置最大線程數(shù)
            protocol.setMaxThreads(2000);
            protocol.setConnectionTimeout(30000);
        }
    }
}

3、使用 @ComponentScan()

使用 @ComponentScan() 定位掃包比 @SpringBootApplication 掃包更快。

4、默認 Tomcat 容器改為 Undertow

默認 Tomcat 容器改為 Undertow(Jboss 下的服務器,Tomcat 吞吐量 5000,Undertow 吞吐量 8000)

<exclusions>
  <exclusion>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-tomcat</artifactId>
  </exclusion>
</exclusions>

改為:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

5、使用 BufferedWriter 進行緩沖

這里不給大家舉例,可自行嘗試。

6、Deferred 方式實現(xiàn)異步調用

代碼如下:

@RestController
public class AsyncDeferredController {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private final LongTimeTask taskService;

    @Autowired
    public AsyncDeferredController(LongTimeTask taskService) {
        this.taskService = taskService;
    }

    @GetMapping("/deferred")
    public DeferredResult<String> executeSlowTask() {
        logger.info(Thread.currentThread().getName() + "進入executeSlowTask方法");
        DeferredResult<String> deferredResult = new DeferredResult<>();
        // 調用長時間執(zhí)行任務
        taskService.execute(deferredResult);
        // 當長時間任務中使用deferred.setResult("world");這個方法時,會從長時間任務中返回,繼續(xù)controller里面的流程
        logger.info(Thread.currentThread().getName() + "從executeSlowTask方法返回");
        // 超時的回調方法
        deferredResult.onTimeout(new Runnable(){

   @Override
   public void run() {
    logger.info(Thread.currentThread().getName() + " onTimeout");
    // 返回超時信息
    deferredResult.setErrorResult("time out!");
   }
  });

        // 處理完成的回調方法,無論是超時還是處理成功,都會進入這個回調方法
        deferredResult.onCompletion(new Runnable(){

   @Override
   public void run() {
    logger.info(Thread.currentThread().getName() + " onCompletion");
   }
  });

        return deferredResult;
    }
}

7、異步調用可以使用 AsyncHandlerInterceptor 進行攔截

代碼如下:

@Component
public class MyAsyncHandlerInterceptor implements AsyncHandlerInterceptor {

 private static final Logger logger = LoggerFactory.getLogger(MyAsyncHandlerInterceptor.class);

 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
   throws Exception {
  return true;
 }

 @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
   ModelAndView modelAndView) throws Exception {
// HandlerMethod handlerMethod = (HandlerMethod) handler;
  logger.info(Thread.currentThread().getName()+ "服務調用完成,返回結果給客戶端");
 }

 @Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
   throws Exception {
  if(null != ex){
   System.out.println("發(fā)生異常:"+ex.getMessage());
  }
 }

 @Override
 public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
   throws Exception {

  // 攔截之后,重新寫回數(shù)據(jù),將原來的hello world換成如下字符串
  String resp = "my name is chhliu!";
  response.setContentLength(resp.length());
  response.getOutputStream().write(resp.getBytes());

  logger.info(Thread.currentThread().getName() + " 進入afterConcurrentHandlingStarted方法");
 }
}


責任編輯:武曉燕 來源: 一安未來
相關推薦

2024-06-24 10:31:46

2024-11-06 14:26:40

2025-11-19 07:59:57

2024-09-09 14:12:38

2024-09-12 15:24:29

2025-09-11 02:00:00

2025-08-04 07:20:00

多云戰(zhàn)略應用組合管理APM

2009-02-16 16:49:53

DBA經驗

2022-04-14 10:40:11

領導者IT團隊遠程團隊

2023-11-07 15:11:46

Kafka技巧

2023-08-03 14:18:29

Rust阻塞函數(shù)

2010-09-01 09:39:07

CSS

2022-08-17 09:54:57

Java性能優(yōu)化

2024-05-23 16:41:40

2013-04-19 09:45:20

AMPLabHadoopHDFS

2021-10-18 13:26:15

大數(shù)據(jù)數(shù)據(jù)分析技術

2020-03-23 10:59:52

CISO網絡安全漏洞

2019-08-20 00:20:47

TCPHOL吞吐量

2025-05-28 05:10:00

策略Spring性能

2023-02-09 08:57:11

Callable異步java
點贊
收藏

51CTO技術棧公眾號

尤物yw193can在线观看| 国产色综合视频| 国产午夜精品全部视频播放| 国产99久久九九精品无码| 亚洲色图狠狠干| 久久超碰97中文字幕| 欧美激情精品久久久| 一区二区精品免费| 精品视频在线观看免费观看| 欧美日韩国产一区在线| 国产精品夜夜夜爽张柏芝| 欧美理论在线观看| 国产aⅴ精品一区二区三区色成熟| 日本久久中文字幕| 青娱乐国产精品| 日本一本不卡| 亚洲精品白浆高清久久久久久| www.夜夜爽| 美女的胸无遮挡在线观看| √…a在线天堂一区| 久久久一本精品99久久精品66| 国产美女精品视频国产| 日韩中文字幕av电影| 韩国精品久久久999| 日韩在线一卡二卡| 亚洲免费专区| 亚洲成人久久一区| 青娱乐国产精品视频| 欧美国产日韩电影| 欧美日韩综合视频网址| av在线com| 99福利在线| 1000精品久久久久久久久| 色就是色欧美| 国产在线播放av| 26uuu国产电影一区二区| 99九九电视剧免费观看| 国产美女精品视频国产| 久久99热这里只有精品| 国产精品久久久久国产a级| 黄瓜视频在线免费观看| 99在线观看免费视频精品观看| 久久99国产精品自在自在app| www.97视频| 婷婷伊人综合| 久久综合国产精品台湾中文娱乐网| 中文字幕免费高清| 国产亚洲一区| 亚洲欧洲第一视频| 亚洲AV无码片久久精品| 日本在线中文字幕一区| 日韩电影中文 亚洲精品乱码| 亚洲少妇18p| 国产色噜噜噜91在线精品| 日韩一卡二卡三卡国产欧美| 爽爽爽在线观看| 中文字幕日本一区| 欧美一区午夜视频在线观看 | 好男人香蕉影院| 国产美女撒尿一区二区| 亚洲精品美女网站| 五级黄高潮片90分钟视频| 精品一区毛片| 一本色道久久88亚洲综合88| 中国女人特级毛片| 久久人体视频| 欧美国产极速在线| 日本一二三区不卡| 男人的天堂亚洲在线| 国产97在线|亚洲| 在线免费av片| 国产成人精品免费看| 国产伦精品一区二区三区高清| 丰满人妻av一区二区三区| jvid福利写真一区二区三区| 欧美一区国产一区| www.亚洲资源| 一区二区三区在线观看国产| 99久久国产综合精品五月天喷水| 樱花草涩涩www在线播放| 日本丰满少妇一区二区三区| 日韩精品视频一二三| 日韩综合一区二区三区| 日韩大陆欧美高清视频区| 国产在线观看h| 偷拍欧美精品| 26uuu另类亚洲欧美日本一| 精人妻无码一区二区三区| 精品在线观看免费| 精品国产_亚洲人成在线| 触手亚洲一区二区三区| 一区二区三区四区五区视频在线观看 | 精品理论电影| 欧美日韩成人在线观看| www.色国产| 国产麻豆欧美日韩一区| 开心色怡人综合网站| 免费观看在线午夜影视| 精品久久久香蕉免费精品视频| 欧美三级午夜理伦三级富婆| 999久久久精品一区二区| 国产亚洲一区二区在线| 久久久国产精品黄毛片| 男女男精品视频网| 久久99九九| 中文字幕在线观看网站| 欧美性猛交xxxx偷拍洗澡| 亚洲男人天堂2021| 国产成人av| 久久久久久成人| 国产精品国产av| 久久久不卡网国产精品二区| 国产a级黄色大片| 成人自拍视频网| 日韩av中文在线| 欧美成人aaa片一区国产精品| 日韩中文字幕区一区有砖一区| 高清不卡日本v二区在线| 1区2区3区在线观看| 日韩欧美中文字幕在线观看 | 久久综合九色综合97婷婷女人| 欧美日韩一级在线| 欧美国产日韩电影| 亚洲女人天堂视频| 国产成人精品一区二三区| 国产精品综合久久| 一级黄色免费在线观看| 日本成人伦理电影| 日韩精品中文字幕久久臀| 国产福利久久久| 国产精品中文字幕一区二区三区| 亚洲精品日韩在线观看| 亚洲第一影院| 亚洲欧美日韩中文在线| 成人午夜视频在线播放| caoporen国产精品视频| 亚洲精品蜜桃久久久久久| 欧美黄视频在线观看| 久久精品成人欧美大片| 一级黄色片在线播放| 国产精品青草综合久久久久99| 日本男人操女人| 国产一区日韩| 国产精品成人播放| 国产午夜精品一区理论片| 色综合色狠狠天天综合色| 国产精品无码毛片| 性xx色xx综合久久久xx| 久久久综合香蕉尹人综合网| 午夜裸体女人视频网站在线观看| 亚洲精品一区在线观看| 黄色小说在线观看视频| 99精品欧美一区二区三区小说| r级无码视频在线观看| 牛牛精品成人免费视频| 91精品国产免费久久久久久 | 久久精品国产一区二区电影| 97超视频在线观看| 亚洲精品视频一区二区| 香蕉久久久久久av成人| 亚洲精品美女| 欧美污视频久久久| 成人国产精选| 久久视频这里只有精品| 成 人片 黄 色 大 片| 一区二区三区久久| 日韩精品视频一区二区| 丝袜亚洲另类欧美| 一区二区不卡在线观看| 日韩欧美一级| 88xx成人精品| 中文字幕在线观看日本| 欧美一级二级三级乱码| 国产精品18p| 久久久久久久久久久久久久久99| 亚洲欧美日韩综合网| 欧美激情成人在线| 久久国产精品一区二区三区四区| 亚洲电影有码| 欧美黄色免费网站| 黄色在线免费观看大全| 88在线观看91蜜桃国自产| 日本黄色片视频| 欧美国产日韩在线观看| 亚洲精品久久一区二区三区777| 99亚洲一区二区| 中文字幕制服丝袜在线| 免费看久久久| 国产在线精品一区免费香蕉| 91九色在线看| www.亚洲男人天堂| 天堂网在线观看视频| 欧美日韩免费观看一区三区| 久久精品国产亚洲av无码娇色| 久久先锋影音av鲁色资源| 亚洲欧美日本一区二区| 丝袜美腿亚洲综合| 又大又硬又爽免费视频| 日韩欧美精品| 久中文字幕一区| 在线观看视频一区二区三区| 国产精品久久久久久久久久99| 欧美精品videosex| 色综合伊人色综合网站| 亚洲av电影一区| 91精品国产一区二区人妖| 老熟妇仑乱一区二区av| 亚洲综合色在线| 美国一级片在线观看| 91免费视频观看| 99国产精品免费视频| 男人的j进女人的j一区| 国内性生活视频| 亚洲调教视频在线观看| 一区一区视频| 激情五月综合| 欧美久久久久久久| 日韩高清三区| 国产精品制服诱惑| 亚洲日本va午夜在线电影| 国产精品一区二区久久久| 欧美成人精品一区二区男人小说| 欧美激情免费在线| av在线free| 久久天天躁日日躁| www 日韩| 国产亚洲精品久久久优势| 视频国产在线观看| 亚洲精品美女久久久| 神马午夜一区二区| 精品av久久707| 亚洲av无码片一区二区三区| 日韩一区二区三区观看| 91片黄在线观看喷潮| 欧美日韩免费高清一区色橹橹| 337p粉嫩色噜噜噜大肥臀| 欧美性videos高清精品| 天天操夜夜操视频| 色系网站成人免费| 在线观看日本视频| 91精品福利视频| 久久精品偷拍视频| 欧美亚洲一区二区在线| 无码人妻丰满熟妇精品区| 在线亚洲一区观看| 国产偷人爽久久久久久老妇app| 色女孩综合影院| 最好看的日本字幕mv视频大全| 欧美又粗又大又爽| 在线观看毛片视频| 欧美二区乱c少妇| 国产成人三级在线播放| 亚洲第一中文字幕| 外国精品视频在线观看| 亚洲欧洲在线视频| 91美女视频在线| 色偷偷av一区二区三区| 成人欧美在线| 亚洲91精品在线| 中文字幕人成乱码在线观看 | 国产日韩一级二级三级| www.日本高清视频| 亚洲色图制服诱惑| 精品亚洲永久免费| 欧美午夜视频一区二区| 中文字幕一二三四| 日韩欧美国产精品一区| 三级小视频在线观看| 亚洲人成在线一二| 黄av在线免费观看| 97av视频在线| 久久亚洲人体| 成人在线资源网址| 久久99性xxx老妇胖精品| 影音先锋欧美在线| 国产一区久久| 天天干在线影院| 国产成人亚洲精品狼色在线 | 色噜噜一区二区三区| 亚洲男人天天操| av网站免费在线观看| 欧美亚洲国产视频小说| 亚洲色图图片| 久久er99热精品一区二区三区| 精品美女久久久| 亚洲小视频在线播放| 久久不射2019中文字幕| 8x8x成人免费视频| 91在线你懂得| 男女性高潮免费网站| 精品久久久久久久久久久| 在线观看免费观看在线| 日韩av在线天堂网| 草莓福利社区在线| 国产精品777| 91亚洲无吗| 致1999电视剧免费观看策驰影院| 亚洲精选国产| 欧美视频亚洲图片| 久久久精品综合| 国产亚洲精品码| 欧美精品日韩一区| 国产在线视频网| 久久久久久久久亚洲| 色综合视频一区二区三区日韩| 国模一区二区三区私拍视频| 欧美.日韩.国产.一区.二区| 国产成人无码av在线播放dvd| 国产91丝袜在线18| 又嫩又硬又黄又爽的视频| 日韩欧美精品中文字幕| 成人午夜精品福利免费| 久久久999精品| 成人在线免费电影网站| 欧美一区三区二区在线观看| 亚洲国产日韩欧美一区二区三区| 三级黄色片免费看| 国产精品天天看| 波多野结衣黄色网址| 亚洲精品久久视频| missav|免费高清av在线看| 亚洲xxxxx| 婷婷综合激情| 999在线精品视频| 中文字幕一区二区三区不卡 | 妺妺窝人体色www婷婷| 正在播放亚洲一区| 欧美三级理伦电影| 国产免费一区二区三区在线能观看| 免费精品国产| 波多野结衣家庭教师视频| 99re亚洲国产精品| 亚洲欧美在线视频免费| 欧美精品一区二区三区蜜臀| 欧美高清另类hdvideosexjaⅴ| 91在线视频导航| 自拍欧美日韩| 亚洲色图欧美自拍| 亚洲黄网站在线观看| www.久久成人| 欧美交受高潮1| 蜜臀av一区| 欧美牲交a欧美牲交aⅴ免费真| www成人在线观看| 中文字幕黄色片| 中文字幕无线精品亚洲乱码一区| 电影亚洲精品噜噜在线观看| 日韩在线观看电影完整版高清免费| 老牛影视一区二区三区| 在线观看亚洲大片短视频| 欧美日韩五月天| 搞黄网站在线观看| 91网免费观看| 亚洲日本视频| 国产精品高清无码在线观看| 91国产福利在线| 日本www在线观看视频| 成人在线国产精品| 国产主播一区| 三叶草欧洲码在线| 91福利视频网站| 国产在线激情| 国产伦精品一区二区三区免| 亚洲尤物在线| 蜜桃视频最新网址| 欧美不卡激情三级在线观看| 久热在线观看视频| 日韩三级电影网站| 国产一区二区免费看| 日韩精品一区二区不卡| 亚洲色图激情小说| 国产精品久久久久久久久久辛辛| 精品国产一区二区三区无码| 久久亚洲综合av| 92久久精品一区二区| 97精品国产97久久久久久| 国产欧美日韩一区二区三区四区| 污污网站在线观看视频| 亚洲一区二区视频在线| 久草福利在线视频| 91亚洲精品视频| 久久国产88| 欧美日韩成人免费观看| 亚洲免费视频网站| 亚洲我射av| 欧美牲交a欧美牲交aⅴ免费真 | 青青草成人av| 日韩一区二区精品视频| 天堂俺去俺来也www久久婷婷| 爱豆国产剧免费观看大全剧苏畅 | 中文字幕av一区二区三区免费看 | 国产精品免费无遮挡无码永久视频| 日韩中文娱乐网| 日韩人体视频| 免费高清视频在线观看| 欧美最新大片在线看| 国产亚洲成av人片在线观看| 一区二区三区久久网| 91视频国产资源| 亚洲精品久久久狠狠狠爱|