<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot實戰(zhàn):整合Redis、mybatis,封裝RedisUtils工具類等(附源碼)

          共 14065字,需瀏覽 29分鐘

           ·

          2021-01-18 18:53

          作者:陳彥斌

          cnblogs.com/chenyanbin/p/13515268.html

          創(chuàng)建SpringBoot項目

          在線創(chuàng)建方式

          網(wǎng)址:https://start.spring.io/

          然后創(chuàng)建Controller、Mapper、Service包

          SpringBoot整合Redis

          引入Redis依賴


          <dependency>
          ????<groupId>org.springframework.bootgroupId>
          ????<artifactId>spring-boot-starter-data-redisartifactId>
          dependency>

          完整pom.xml


          <project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          ????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?https://maven.apache.org/xsd/maven-4.0.0.xsd">

          ????<modelVersion>4.0.0modelVersion>
          ????<parent>
          ????????<groupId>org.springframework.bootgroupId>
          ????????<artifactId>spring-boot-starter-parentartifactId>
          ????????<version>2.3.3.RELEASEversion>
          ????????<relativePath/>?
          ????parent>
          ????<groupId>com.cybgroupId>
          ????<artifactId>chenyb-mobile-redisartifactId>
          ????<version>0.0.1-SNAPSHOTversion>
          ????<name>chenyb-mobile-redisname>
          ????<description>Demo?project?for?Spring?Bootdescription>

          ????<properties>
          ????????<java.version>1.8java.version>
          ????properties>

          ????<dependencies>
          ????????<dependency>
          ????????????<groupId>org.springframework.bootgroupId>
          ????????????<artifactId>spring-boot-starter-webartifactId>
          ????????dependency>

          ????????<dependency>
          ????????????<groupId>org.springframework.bootgroupId>
          ????????????<artifactId>spring-boot-starter-testartifactId>
          ????????????<scope>testscope>
          ????????????<exclusions>
          ????????????????<exclusion>
          ????????????????????<groupId>org.junit.vintagegroupId>
          ????????????????????<artifactId>junit-vintage-engineartifactId>
          ????????????????exclusion>
          ????????????exclusions>
          ????????dependency>
          ????????<dependency>
          ????????????<groupId>io.projectreactorgroupId>
          ????????????<artifactId>reactor-testartifactId>
          ????????????<scope>testscope>
          ????????dependency>
          ????????
          ????????<dependency>
          ????????????<groupId>org.springframework.bootgroupId>
          ????????????<artifactId>spring-boot-starter-data-redisartifactId>
          ????????dependency>
          ????dependencies>

          ????<build>
          ????????<plugins>
          ????????????<plugin>
          ????????????????<groupId>org.springframework.bootgroupId>
          ????????????????<artifactId>spring-boot-maven-pluginartifactId>
          ????????????plugin>
          ????????plugins>
          ????build>

          project>

          設(shè)置Redis的Template

          RedisConfig.java

          package?com.cyb.mobile.config;

          import?org.springframework.context.annotation.Bean;
          import?org.springframework.context.annotation.Configuration;
          import?org.springframework.data.redis.connection.RedisConnectionFactory;
          import?org.springframework.data.redis.core.RedisTemplate;
          import?org.springframework.data.redis.serializer.RedisSerializer;
          import?org.springframework.data.redis.serializer.StringRedisSerializer;

          /**
          ?*?@ClassName:RedisConfig
          ?*?@Description:Redis配置類
          ?*?@Author:chenyb
          ?*?@Date:2020/8/16 11:48 下午
          ?*?@Versiion:1.0
          ?*/

          @Configuration?//當(dāng)前類為配置類
          public?class?RedisConfig?{
          ????@Bean?//redisTemplate注入到Spring容器
          ????public?RedisTemplate?redisTemplate(RedisConnectionFactory?factory){
          ????????RedisTemplate?redisTemplate=new?RedisTemplate<>();
          ????????RedisSerializer?redisSerializer?=?new?StringRedisSerializer();
          ????????redisTemplate.setConnectionFactory(factory);
          ????????//key序列化
          ????????redisTemplate.setKeySerializer(redisSerializer);
          ????????//value序列化
          ????????redisTemplate.setValueSerializer(redisSerializer);
          ????????//value?hashmap序列化
          ????????redisTemplate.setHashKeySerializer(redisSerializer);
          ????????//key?hashmap序列化
          ????????redisTemplate.setHashValueSerializer(redisSerializer);
          ????????return?redisTemplate;
          ????}
          }

          設(shè)置Redis連接信息

          #?連接的那個數(shù)據(jù)庫
          spring.redis.database=0
          #?redis服務(wù)的ip地址
          spring.redis.host=192.168.199.142
          #?redis端口號
          spring.redis.port=6379
          #?redis的密碼,沒設(shè)置過密碼,可為空
          spring.redis.password=12345678

          Redis工具類

          redisTemplate API

          1. opsForValue ==》String

          2. opsForSet ==》Set

          3. opsForHash ==》hash

          4. opsForZset ==》SortSet

          5. opsForList ==》list隊列

          RedisUtils.java

          package?com.cyb.mobile.utils;

          import?org.springframework.beans.factory.annotation.Autowired;
          import?org.springframework.data.redis.core.*;
          import?org.springframework.stereotype.Service;

          import?java.io.Serializable;
          import?java.util.List;
          import?java.util.Set;
          import?java.util.concurrent.TimeUnit;

          /**
          ?*?@ClassName:RedisUtils
          ?*?@Description:Redis工具類
          ?*?@Author:chenyb
          ?*?@Date:2020/8/17 12:05 上午
          ?*?@Versiion:1.0
          ?*/

          @Service
          public?class?RedisUtils?{
          ????@Autowired
          ????private?RedisTemplate?redisTemplate;

          ????private?static?double?size?=?Math.pow(2,?32);


          ????/**
          ?????*?寫入緩存
          ?????*
          ?????*?@param?key
          ?????*?@param?offset???位?8Bit=1Byte
          ?????*?@return
          ?????*/

          ????public?boolean?setBit(String?key,?long?offset,?boolean?isShow)?{
          ????????boolean?result?=?false;
          ????????try?{
          ????????????ValueOperations?operations?=?redisTemplate.opsForValue();
          ????????????operations.setBit(key,?offset,?isShow);
          ????????????result?=?true;
          ????????}?catch?(Exception?e)?{
          ????????????e.printStackTrace();
          ????????}
          ????????return?result;
          ????}

          ????/**
          ?????*?寫入緩存
          ?????*
          ?????*?@param?key
          ?????*?@param?offset
          ?????*?@return
          ?????*/

          ????public?boolean?getBit(String?key,?long?offset)?{
          ????????boolean?result?=?false;
          ????????try?{
          ????????????ValueOperations?operations?=?redisTemplate.opsForValue();
          ????????????result?=?operations.getBit(key,?offset);
          ????????}?catch?(Exception?e)?{
          ????????????e.printStackTrace();
          ????????}
          ????????return?result;
          ????}


          ????/**
          ?????*?寫入緩存
          ?????*
          ?????*?@param?key
          ?????*?@param?value
          ?????*?@return
          ?????*/

          ????public?boolean?set(final?String?key,?Object?value)?{
          ????????boolean?result?=?false;
          ????????try?{
          ????????????ValueOperations?operations?=?redisTemplate.opsForValue();
          ????????????operations.set(key,?value);
          ????????????result?=?true;
          ????????}?catch?(Exception?e)?{
          ????????????e.printStackTrace();
          ????????}
          ????????return?result;
          ????}

          ????/**
          ?????*?寫入緩存設(shè)置時效時間
          ?????*
          ?????*?@param?key
          ?????*?@param?value
          ?????*?@return
          ?????*/

          ????public?boolean?set(final?String?key,?Object?value,?Long?expireTime)?{
          ????????boolean?result?=?false;
          ????????try?{
          ????????????ValueOperations?operations?=?redisTemplate.opsForValue();
          ????????????operations.set(key,?value);
          ????????????redisTemplate.expire(key,?expireTime,?TimeUnit.SECONDS);
          ????????????result?=?true;
          ????????}?catch?(Exception?e)?{
          ????????????e.printStackTrace();
          ????????}
          ????????return?result;
          ????}

          ????/**
          ?????*?批量刪除對應(yīng)的value
          ?????*
          ?????*?@param?keys
          ?????*/

          ????public?void?remove(final?String...?keys)?{
          ????????for?(String?key?:?keys)?{
          ????????????remove(key);
          ????????}
          ????}


          ????/**
          ?????*?刪除對應(yīng)的value
          ?????*
          ?????*?@param?key
          ?????*/

          ????public?void?remove(final?String?key)?{
          ????????if?(exists(key))?{
          ????????????redisTemplate.delete(key);
          ????????}
          ????}

          ????/**
          ?????*?判斷緩存中是否有對應(yīng)的value
          ?????*
          ?????*?@param?key
          ?????*?@return
          ?????*/

          ????public?boolean?exists(final?String?key)?{
          ????????return?redisTemplate.hasKey(key);
          ????}

          ????/**
          ?????*?讀取緩存
          ?????*
          ?????*?@param?key
          ?????*?@return
          ?????*/

          ????public?Object?get(final?String?key)?{
          ????????Object?result?=?null;
          ????????ValueOperations?operations?=?redisTemplate.opsForValue();
          ????????result?=?operations.get(key);
          ????????return?result;
          ????}

          ????/**
          ?????*?哈希?添加
          ?????*
          ?????*?@param?key
          ?????*?@param?hashKey
          ?????*?@param?value
          ?????*/

          ????public?void?hmSet(String?key,?Object?hashKey,?Object?value)?{
          ????????HashOperations?hash?=?redisTemplate.opsForHash();
          ????????hash.put(key,?hashKey,?value);
          ????}

          ????/**
          ?????*?哈希獲取數(shù)據(jù)
          ?????*
          ?????*?@param?key
          ?????*?@param?hashKey
          ?????*?@return
          ?????*/

          ????public?Object?hmGet(String?key,?Object?hashKey)?{
          ????????HashOperations?hash?=?redisTemplate.opsForHash();
          ????????return?hash.get(key,?hashKey);
          ????}

          ????/**
          ?????*?列表添加
          ?????*
          ?????*?@param?k
          ?????*?@param?v
          ?????*/

          ????public?void?lPush(String?k,?Object?v)?{
          ????????ListOperations?list?=?redisTemplate.opsForList();
          ????????list.rightPush(k,?v);
          ????}

          ????/**
          ?????*?列表獲取
          ?????*
          ?????*?@param?k
          ?????*?@param?l
          ?????*?@param?l1
          ?????*?@return
          ?????*/

          ????public?List?lRange(String?k,?long?l,?long?l1)?{
          ????????ListOperations?list?=?redisTemplate.opsForList();
          ????????return?list.range(k,?l,?l1);
          ????}

          ????/**
          ?????*?集合添加
          ?????*
          ?????*?@param?key
          ?????*?@param?value
          ?????*/

          ????public?void?add(String?key,?Object?value)?{
          ????????SetOperations?set?=?redisTemplate.opsForSet();
          ????????set.add(key,?value);
          ????}

          ????/**
          ?????*?集合獲取
          ?????*
          ?????*?@param?key
          ?????*?@return
          ?????*/

          ????public?Set?setMembers(String?key)?{
          ????????SetOperations?set?=?redisTemplate.opsForSet();
          ????????return?set.members(key);
          ????}

          ????/**
          ?????*?有序集合添加
          ?????*
          ?????*?@param?key
          ?????*?@param?value
          ?????*?@param?scoure
          ?????*/

          ????public?void?zAdd(String?key,?Object?value,?double?scoure)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????zset.add(key,?value,?scoure);
          ????}

          ????/**
          ?????*?有序集合獲取
          ?????*
          ?????*?@param?key
          ?????*?@param?scoure
          ?????*?@param?scoure1
          ?????*?@return
          ?????*/

          ????public?Set?rangeByScore(String?key,?double?scoure,?double?scoure1)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????redisTemplate.opsForValue();
          ????????return?zset.rangeByScore(key,?scoure,?scoure1);
          ????}


          ????//第一次加載的時候?qū)?shù)據(jù)加載到redis中
          ????public?void?saveDataToRedis(String?name)?{
          ????????double?index?=?Math.abs(name.hashCode()?%?size);
          ????????long?indexLong?=?new?Double(index).longValue();
          ????????boolean?availableUsers?=?setBit("availableUsers",?indexLong,?true);
          ????}

          ????//第一次加載的時候?qū)?shù)據(jù)加載到redis中
          ????public?boolean?getDataToRedis(String?name)?{

          ????????double?index?=?Math.abs(name.hashCode()?%?size);
          ????????long?indexLong?=?new?Double(index).longValue();
          ????????return?getBit("availableUsers",?indexLong);
          ????}

          ????/**
          ?????*?有序集合獲取排名
          ?????*
          ?????*?@param?key?集合名稱
          ?????*?@param?value?值
          ?????*/

          ????public?Long?zRank(String?key,?Object?value)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????return?zset.rank(key,value);
          ????}


          ????/**
          ?????*?有序集合獲取排名
          ?????*
          ?????*?@param?key
          ?????*/

          ????public?Set>?zRankWithScore(String?key,?long?start,long?end)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????Set>?ret?=?zset.rangeWithScores(key,start,end);
          ????????return?ret;
          ????}

          ????/**
          ?????*?有序集合添加
          ?????*
          ?????*?@param?key
          ?????*?@param?value
          ?????*/

          ????public?Double?zSetScore(String?key,?Object?value)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????return?zset.score(key,value);
          ????}


          ????/**
          ?????*?有序集合添加分?jǐn)?shù)
          ?????*
          ?????*?@param?key
          ?????*?@param?value
          ?????*?@param?scoure
          ?????*/

          ????public?void?incrementScore(String?key,?Object?value,?double?scoure)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????zset.incrementScore(key,?value,?scoure);
          ????}


          ????/**
          ?????*?有序集合獲取排名
          ?????*
          ?????*?@param?key
          ?????*/

          ????public?Set>?reverseZRankWithScore(String?key,?long?start,long?end)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????Set>?ret?=?zset.reverseRangeByScoreWithScores(key,start,end);
          ????????return?ret;
          ????}

          ????/**
          ?????*?有序集合獲取排名
          ?????*
          ?????*?@param?key
          ?????*/

          ????public?Set>?reverseZRankWithRank(String?key,?long?start,?long?end)?{
          ????????ZSetOperations?zset?=?redisTemplate.opsForZSet();
          ????????Set>?ret?=?zset.reverseRangeWithScores(key,?start,?end);
          ????????return?ret;
          ????}
          }

          控制層

          RedisController.java

          package?com.cyb.mobile.controller;

          import?com.cyb.mobile.utils.RedisUtils;
          import?org.springframework.beans.factory.annotation.Autowired;
          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.RestController;

          /**
          ?*?@ClassName:TestController
          ?*?@Description:Redis控制器
          ?*?@Author:chenyb
          ?*?@Date:2020/8/17 12:07 上午
          ?*?@Versiion:1.0
          ?*/

          @RestController
          public?class?RedisController?{
          ????@Autowired
          ????private?RedisUtils?redisUtils;
          ????@RequestMapping("setAndGet")
          ????public?String?test(String?k,String?v){
          ????????redisUtils.set(k,v);
          ????????return?(String)?redisUtils.get(k);
          ????}
          }

          測試

          SpringBoot整合Mybatis

          添加依賴


          <dependency>
          ????<groupId>org.mybatis.spring.bootgroupId>
          ????<artifactId>mybatis-spring-boot-starterartifactId>
          ????<version>2.1.3version>
          dependency>

          <dependency>
          ????<groupId>mysqlgroupId>
          ????<artifactId>mysql-connector-javaartifactId>
          dependency>

          <dependency>
          ????<groupId>com.alibabagroupId>
          ????<artifactId>druidartifactId>
          ????<version>1.1.23version>
          dependency>

          完整pom.xml


          <project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          ????xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?https://maven.apache.org/xsd/maven-4.0.0.xsd">

          ????<modelVersion>4.0.0modelVersion>
          ????<parent>
          ????????<groupId>org.springframework.bootgroupId>
          ????????<artifactId>spring-boot-starter-parentartifactId>
          ????????<version>2.3.3.RELEASEversion>
          ????????<relativePath/>?
          ????parent>
          ????<groupId>com.cybgroupId>
          ????<artifactId>chenyb-mobile-redisartifactId>
          ????<version>0.0.1-SNAPSHOTversion>
          ????<name>chenyb-mobile-redisname>
          ????<description>Demo?project?for?Spring?Bootdescription>

          ????<properties>
          ????????<java.version>1.8java.version>
          ????properties>

          ????<dependencies>
          ????????<dependency>
          ????????????<groupId>org.springframework.bootgroupId>
          ????????????<artifactId>spring-boot-starter-webartifactId>
          ????????dependency>

          ????????<dependency>
          ????????????<groupId>org.springframework.bootgroupId>
          ????????????<artifactId>spring-boot-starter-testartifactId>
          ????????????<scope>testscope>
          ????????????<exclusions>
          ????????????????<exclusion>
          ????????????????????<groupId>org.junit.vintagegroupId>
          ????????????????????<artifactId>junit-vintage-engineartifactId>
          ????????????????exclusion>
          ????????????exclusions>
          ????????dependency>
          ????????<dependency>
          ????????????<groupId>io.projectreactorgroupId>
          ????????????<artifactId>reactor-testartifactId>
          ????????????<scope>testscope>
          ????????dependency>
          ????????
          ????????<dependency>
          ????????????<groupId>org.springframework.bootgroupId>
          ????????????<artifactId>spring-boot-starter-data-redisartifactId>
          ????????dependency>
          ????????
          ????????<dependency>
          ????????????<groupId>org.mybatis.spring.bootgroupId>
          ????????????<artifactId>mybatis-spring-boot-starterartifactId>
          ????????????<version>2.1.3version>
          ????????dependency>
          ????????
          ????????<dependency>
          ????????????<groupId>mysqlgroupId>
          ????????????<artifactId>mysql-connector-javaartifactId>
          ????????dependency>
          ????????
          ????????<dependency>
          ????????????<groupId>com.alibabagroupId>
          ????????????<artifactId>druidartifactId>
          ????????????<version>1.1.23version>
          ????????dependency>
          ????dependencies>

          ????<build>
          ????????<plugins>
          ????????????<plugin>
          ????????????????<groupId>org.springframework.bootgroupId>
          ????????????????<artifactId>spring-boot-maven-pluginartifactId>
          ????????????plugin>
          ????????plugins>
          ????build>

          project>

          設(shè)置配置文件

          application.properties

          #?連接的那個數(shù)據(jù)庫
          spring.redis.database=0
          #?redis服務(wù)的ip地址
          spring.redis.host=192.168.199.142
          #?redis端口號
          spring.redis.port=6379
          #?redis的密碼,沒設(shè)置過密碼,可為空
          spring.redis.password=12345678
          #?端口號
          server.port=8081
          #?========================數(shù)據(jù)庫相關(guān)配置=====================
          spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
          spring.datasource.url=jdbc:mysql://localhost:3306/nba?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
          spring.datasource.username=root
          spring.datasource.password=root
          #?使用阿里巴巴druid數(shù)據(jù)源,默認(rèn)使用自帶
          spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
          #開啟控制臺打印sql
          mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
          #?mybatis?下劃線轉(zhuǎn)駝峰配置,兩者都可以
          #?mybatis.configuration.mapUnderscoreToCamelCase=true
          mybatis.configuration.map-underscore-to-camel-case=true
          #?配置掃描
          mybatis.mapper-locations=classpath:mapper/*.xml
          #?實體類所在的包別名
          mybatis.type-aliases-package=com.cyb.mobile.domain

          啟動類上添加掃描路徑

          NbaPlayer.java(實體類)

          NbaPlayerMapper.xml


          mapper
          ????????PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"
          ????????"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
          <mapper?namespace="com.cyb.mobile.mapper.NbaPlayerMapper">
          ????<select?id="ListNbaPlayer"?resultType="NbaPlayer">
          ????????SELECT?*?FROM?nba_player
          ????select>
          mapper>

          NbaPlayerMapper.java

          NbaPlayerService.java

          NbaPlayerServiceImpl.java

          控制器(Controller)

          測試

          redis作為mybatis緩存

          1. 用戶第一次訪問的時候獲取數(shù)據(jù)庫的值,再次訪問時直接從緩存中獲取數(shù)據(jù)

          2. 設(shè)置緩存過期時間

          ? ?練手項目,學(xué)習(xí)強化,點擊這里

          代碼演示

          添加FastJSON依賴


          <dependency>
          ????<groupId>com.alibabagroupId>
          ????<artifactId>fastjsonartifactId>
          ????<version>1.2.73version>
          dependency>

          ~

          @RequestMapping("test")
          public?Object?test(){
          ????//step1?先從redis中取
          ????String?strJson=(String)?redisUtils.get("nbaPlayerCache");
          ????if?(strJson==null){
          ????????System.out.println("從db取值");
          ????????//?step2如果拿不到則從DB取值
          ???????List?listNbaPlayer=nbaPlayerService.ListNbaPlayer();
          ???????//?step3?DB非空情況刷新redis值
          ???????if?(listNbaPlayer!=null){
          ???????????redisUtils.set("nbaPlayerCache",?JSON.toJSONString(listNbaPlayer));
          ???????????return?listNbaPlayer;
          ???????}
          ???????return?null;
          ????}else
          ????{
          ????????System.out.println("從redis緩存取值");
          ????????return?JSONObject.parseArray(strJson,NbaPlayer.class);
          ????}
          }

          注意

          項目8080是對外端口(向外部暴露的端口),區(qū)別于內(nèi)部進(jìn)程號,查內(nèi)部端口用ps -ef|grep port,查外部端口用lsof -i:port



          壓測工具

          上面我們已經(jīng)SpringBoot整合Redis和Mybatis,但是無法知道具體QPS多少,此時我們可以使用壓測工具來測壓,參考:

          https://www.cnblogs.com/chenyanbin/p/13332068.html

          資料下載

          鏈接:?https://pan.baidu.com/s/1d4xwXVfA6dYHvLFxha59Kg?? 密碼:?bff7


          點擊閱讀全文前往微服務(wù)電商教程
          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    国产女人看国产在线女人 | 国产免费色网站视频 | 波多野结衣乱码无码视频 | 无不卡无码高清视频在线观看 | 亚洲AV高清 |