久久亚洲精品成人_国产精品欧美综合亚洲_亚洲va天堂va欧美ⅴa在线_91色视频在线观看_久久影院亚洲_一级黄色片播放_日韩av在线一区_精品一区二区在线看_老头吃奶性行交视频_日韩免费高清视频_天天操天天爽天天干_日本欧美在线视频

首頁 > 數據庫 > Redis > 正文

Redis整合Spring結合使用緩存實例

2020-02-17 14:53:32
字體:
來源:轉載
供稿:網友

????? 這是一篇關于Redis整合Spring結合使用緩存實例,在本文里介紹了如何在Spring中配置redis,并通過Spring中AOP的思想,將緩存的方法切入到有需要進入緩存的類或方法前面,下面就跟隨武林技術頻道的編輯一起來看看。
什么是Redis?
????? redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。
它有什么特點?
(1)Redis數據庫完全在內存中,使用磁盤僅用于持久性。
(2)相比許多鍵值數據存儲,Redis擁有一套較為豐富的數據類型。
(3)Redis可以將數據復制到任意數量的從服務器。
Redis 優勢?
?(1)異常快速:Redis的速度非???,每秒能執行約11萬集合,每秒約81000+條記錄。
?(2)支持豐富的數據類型:Redis支持最大多數開發人員已經知道像列表,集合,有序集合,散列數據類型。這使得它非常容易解決各種各樣的問題,因為我們知道哪些問題是可以處理通過它的數據類型更好。
(3)操作都是原子性:所有Redis操作是原子的,這保證了如果兩個客戶端同時訪問的Redis服務器將獲得更新后的值。
(4)多功能實用工具:Redis是一個多實用的工具,可以在多個用例如緩存,消息,隊列使用(Redis原生支持發布/訂閱),任何短暫的數據,應用程序,如Web應用程序會話,網頁命中計數等。
Redis 缺點?
(1)單線程
(2)耗內存
二、使用實例
本文使用maven+eclipse+sping
1、引入jar包

  <!--Redis start --> <dependency>   <groupId>org.springframework.data</groupId>   <artifactId>spring-data-redis</artifactId>   <version>1.6.1.RELEASE</version> </dependency> <dependency>   <groupId>redis.clients</groupId>   <artifactId>jedis</artifactId>   <version>2.7.3</version> </dependency>   <!--Redis end --> 

2、配置bean
在application.xml加入如下配置

其中配置文件redis一些配置數據redis.properties如下:

#redis中心 redis.host=10.75.202.11 redis.port=6379 redis.password=123456 redis.maxIdle=100 redis.maxActive=300 redis.maxWait=1000 redis.testOnBorrow=true redis.timeout=100000  # 不需要加入緩存的類 targetNames=xxxRecordManager,xxxSetRecordManager,xxxStatisticsIdentificationManager # 不需要緩存的方法 methodNames=  #設置緩存失效時間 com.service.impl.xxxRecordManager= 60 com.service.impl.xxxSetRecordManager= 60 defaultCacheExpireTime=3600  fep.local.cache.capacity =10000 

要掃這些properties文件,在application.xml加入如下配置

 <!-- 引入properties配置文件 -->   <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">   <property name="locations">     <list>       <value>classpath:properties/*.properties</value>       <!--要是有多個配置文件,只需在這里繼續添加即可 -->     </list>   </property> </bean> 

3、一些工具類
(1)RedisUtil
上面的bean中,RedisUtil是用來緩存和去除數據的實例

package com.mucfc.msm.common;  import java.io.Serializable; import java.util.Set; import java.util.concurrent.TimeUnit;  import org.apache.log4j.Logger; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations;  /**  * redis cache 工具類  *  */ public final class RedisUtil {   private Logger logger = Logger.getLogger(RedisUtil.class);   private RedisTemplate<Serializable, Object> redisTemplate;    /**    * 批量刪除對應的value    *    * @param keys    */   public void remove(final String... keys) {     for (String key : keys) {       remove(key);     }   }    /**    * 批量刪除key    *    * @param pattern    */   public void removePattern(final String pattern) {     Set<Serializable> keys = redisTemplate.keys(pattern);     if (keys.size() > 0)       redisTemplate.delete(keys);   }    /**    * 刪除對應的value    *    * @param key    */   public void remove(final String key) {     if (exists(key)) {       redisTemplate.delete(key);     }   }    /**    * 判斷緩存中是否有對應的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<Serializable, Object> operations = redisTemplate         .opsForValue();     result = operations.get(key);     return result;   }    /**    * 寫入緩存    *    * @param key    * @param value    * @return    */   public boolean set(final String key, Object value) {     boolean result = false;     try {       ValueOperations<Serializable, Object> operations = redisTemplate           .opsForValue();       operations.set(key, value);       result = true;     } catch (Exception e) {       e.printStackTrace();     }     return result;   }    /**    * 寫入緩存    *    * @param key    * @param value    * @return    */   public boolean set(final String key, Object value, Long expireTime) {     boolean result = false;     try {       ValueOperations<Serializable, Object> operations = redisTemplate           .opsForValue();       operations.set(key, value);       redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);       result = true;     } catch (Exception e) {       e.printStackTrace();     }     return result;   }    public void setRedisTemplate(       RedisTemplate<Serializable, Object> redisTemplate) {     this.redisTemplate = redisTemplate;   } } 

(2)MethodCacheInterceptor
切面MethodCacheInterceptor,這是用來給不同的方法來加入判斷如果緩存存在數據,從緩存取數據。否則第一次從數據庫取,并將結果保存到緩存 中去。

package com.mucfc.msm.common;  import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties;  import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.apache.log4j.Logger;   public class MethodCacheInterceptor implements MethodInterceptor {   private Logger logger = Logger.getLogger(MethodCacheInterceptor.class);   private RedisUtil redisUtil;   private List<String> targetNamesList; // 不加入緩存的service名稱   private List<String> methodNamesList; // 不加入緩存的方法名稱   private Long defaultCacheExpireTime; // 緩存默認的過期時間   private Long xxxRecordManagerTime; //   private Long xxxSetRecordManagerTime; //    /**    * 初始化讀取不需要加入緩存的類名和方法名稱    */   public MethodCacheInterceptor() {     try {        File f = new File("D://lunaJee-workspace//msm//msm_core//src//main//java//com//mucfc//msm//common//cacheConf.properties");         //配置文件位置直接被寫死,有需要自己修改下        InputStream in = new FileInputStream(f);  //     InputStream in = getClass().getClassLoader().getResourceAsStream( //         "D://lunaJee-workspace//msm//msm_core//src//main//java//com//mucfc//msm//common//cacheConf.properties");       Properties p = new Properties();       p.load(in);       // 分割字符串       String[] targetNames = p.getProperty("targetNames").split(",");       String[] methodNames = p.getProperty("methodNames").split(",");        // 加載過期時間設置       defaultCacheExpireTime = Long.valueOf(p.getProperty("defaultCacheExpireTime"));       xxxRecordManagerTime = Long.valueOf(p.getProperty("com.service.impl.xxxRecordManager"));       xxxSetRecordManagerTime = Long.valueOf(p.getProperty("com.service.impl.xxxSetRecordManager"));       // 創建list       targetNamesList = new ArrayList<String>(targetNames.length);       methodNamesList = new ArrayList<String>(methodNames.length);       Integer maxLen = targetNames.length > methodNames.length ? targetNames.length           : methodNames.length;       // 將不需要緩存的類名和方法名添加到list中       for (int i = 0; i < maxLen; i++) {         if (i < targetNames.length) {           targetNamesList.add(targetNames[i]);         }         if (i < methodNames.length) {           methodNamesList.add(methodNames[i]);         }       }     } catch (Exception e) {       e.printStackTrace();     }   }    @Override   public Object invoke(MethodInvocation invocation) throws Throwable {     Object value = null;      String targetName = invocation.getThis().getClass().getName();     String methodName = invocation.getMethod().getName();     // 不需要緩存的內容     //if (!isAddCache(StringUtil.subStrForLastDot(targetName), methodName)) {     if (!isAddCache(targetName, methodName)) {       // 執行方法返回結果       return invocation.proceed();     }     Object[] arguments = invocation.getArguments();     String key = getCacheKey(targetName, methodName, arguments);     System.out.println(key);      try {       // 判斷是否有緩存       if (redisUtil.exists(key)) {         return redisUtil.get(key);       }       // 寫入緩存       value = invocation.proceed();       if (value != null) {         final String tkey = key;         final Object tvalue = value;         new Thread(new Runnable() {           @Override           public void run() {             if (tkey.startsWith("com.service.impl.xxxRecordManager")) {               redisUtil.set(tkey, tvalue, xxxRecordManagerTime);             } else if (tkey.startsWith("com.service.impl.xxxSetRecordManager")) {               redisUtil.set(tkey, tvalue, xxxSetRecordManagerTime);             } else {               redisUtil.set(tkey, tvalue, defaultCacheExpireTime);             }           }         }).start();       }     } catch (Exception e) {       e.printStackTrace();       if (value == null) {         return invocation.proceed();       }     }     return value;   }    /**    * 是否加入緩存    *    * @return    */   private boolean isAddCache(String targetName, String methodName) {     boolean flag = true;     if (targetNamesList.contains(targetName)         || methodNamesList.contains(methodName)) {       flag = false;     }     return flag;   }    /**    * 創建緩存key    *    * @param targetName    * @param methodName    * @param arguments    */   private String getCacheKey(String targetName, String methodName,       Object[] arguments) {     StringBuffer sbu = new StringBuffer();     sbu.append(targetName).append("_").append(methodName);     if ((arguments != null) && (arguments.length != 0)) {       for (int i = 0; i < arguments.length; i++) {         sbu.append("_").append(arguments[i]);       }     }     return sbu.toString();   }    public void setRedisUtil(RedisUtil redisUtil) {     this.redisUtil = redisUtil;   } } 

4、配置需要緩存的類或方法
在application.xml加入如下配置,有多個類或方法可以配置多個

<!-- 需要加入緩存的類或方法 --> <bean id="methodCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" >    <property name="advice" >      <ref local="methodCacheInterceptor" />    </property>    <property name="patterns" >      <list>       <!-- 確定正則表達式列表 -->        <value>com/.mucfc/.msm/.service/.impl/...*ServiceImpl.*</value >      </list>    </property> </bean > 

5、執行結果:
寫了一個簡單的單元測試如下:

@Test public void getSettUnitBySettUnitIdTest() {   String systemId = "CES";   String merchantId = "133";   SettUnit configSettUnit = settUnitService.getSettUnitBySettUnitId(systemId, merchantId, "ESP");   SettUnit configSettUnit1 = settUnitService.getSettUnitBySettUnitId(systemId, merchantId, "ESP");   boolean flag= (configSettUnit == configSettUnit1);   System.out.println(configSettUnit);   logger.info("查找結果" + configSettUnit.getBusinessType());    // localSecondFIFOCache.put("configSettUnit", configSettUnit.getBusinessType());  // String string = localSecondFIFOCache.get("configSettUnit");    logger.info("查找結果" + string); } 

這是第一次執行單元測試的過程:
MethodCacheInterceptor這個類中打了斷點,然后每次查詢前都會先進入這個方法

依次運行,發現沒有緩存,所以會直接去查數據庫

打印了出來的SQL語句:

第二次執行:
因為第一次執行時,已經寫入緩存了。所以第二次直接從緩存中取數據

3、取兩次的結果進行地址的對比:
發現兩個不是同一個對象,沒錯,是對的。如果是使用ehcache的話,那么二者的內存地址會是一樣的。那是因為redis和ehcache使用的緩存機制是不一樣的。ehcache是基于本地電腦的內存使用緩存,所以使用緩存取數據時直接在本地電腦上取。轉換成java對象就會是同一個內存地址,而redis它是在裝有redis服務的電腦上(一般是另一臺電腦),所以取數據時經過傳輸到本地,會對應到不同的內存地址,所以用==來比較會返回false。但是它確實是從緩存中去取的,這點我們從上面的斷點可以看到。

以上就是Redis整合Spring結合使用緩存實例,希望對大家的學習有所幫助,更多精彩內容,盡在https://js.Vevb.com。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲私人黄色宅男| 久久久久一区二区| 亚洲综合清纯丝袜自拍| 韩国理伦片一区二区三区在线播放| 国产第一页浮力| www.好吊操| 好看的日韩精品| 5566成人精品视频免费| 日韩在线视频免费观看| 五月天婷婷社区| 亚洲图片在线视频| 97在线观看免费高| 亚洲激情 欧美| 久热精品在线播放| 成人免费毛片网| 中文字幕综合在线观看| 久久久综合香蕉尹人综合网| 国产精品欧美日韩久久| 97久久久免费福利网址| 欧美成人午夜影院| 宅男66日本亚洲欧美视频| 精品久久久久久久久久久久久久久 | 国产无码精品一区二区| 日本五十肥熟交尾| 中文字幕第10页| 日本一二三区在线| 天天干天天操天天做| 青青草av网站| 波多结衣在线观看| 成人日韩在线视频| 免费黄色特级片| 久久久国产91| 色综合亚洲精品激情狠狠| 精品处破学生在线二十三| 亚洲观看高清完整版在线观看| 久久精品国产69国产精品亚洲| 欧美日韩在线电影| 欧洲精品一区二区| 在线日韩一区二区| 欧美这里有精品| 色悠久久久久综合欧美99| 亚洲电影中文字幕在线观看| 又紧又大又爽精品一区二区| 九九热精品视频在线| 久久高清免费视频| www.日本精品| 二区视频在线观看| 一区两区小视频| 国产富婆一级全黄大片| 欧美一级特黄aaaaaa| www.成人在线观看| 婷婷视频在线观看| 极品美女销魂一区二区三区免费| 国产一区二区三区在线观看免费| 国产成人在线看| 久久久久久久网| 亚洲男人天堂一区| 色94色欧美sute亚洲线路一ni | 久久爱av电影| 日韩在线导航| 日本精品一区在线观看| 三级黄色片免费看| av资源在线免费观看| 九九视频免费看| 91无套直看片红桃| 久久机这里只有精品| 99国产精品国产精品久久| 亚洲视频狠狠干| 欧美日韩在线三区| 色婷婷综合成人| 国产精品99一区| 美女亚洲精品| 手机看片福利日韩| 亚洲av毛片基地| 日韩黄色一级视频| 国产做受高潮漫动| 欧美不卡一区二区三区四区| 自拍偷拍亚洲区| 国产成人黄色av| 欧美中日韩一区二区三区| 久久99久久99精品| 变态另类丨国产精品| 一级成人黄色片| 久久99精品久久久久久动态图| 久久精品一级爱片| 欧美乱妇15p| 欧美国产视频日韩| 久久久一本精品99久久精品66| 欧美国产亚洲一区| 日本成人免费在线观看| 国产男男gay体育生白袜| 成人黄色av网站在线| 欧美日韩亚洲高清| 色偷偷av一区二区三区| 99re在线观看视频| 亚洲**2019国产| 2020国产精品久久精品不卡| www.国产二区| jizz中文字幕| 人妻91麻豆一区二区三区| 国产午夜精品一区二区三区嫩草| 亚洲妇女屁股眼交7| 在线观看亚洲区| 亚洲xxxx在线| 在线观看国产福利| 久久久久久少妇| 极品少妇xxxx精品少妇| 亚洲国产wwwccc36天堂| 久久精品99久久香蕉国产色戒| 久久久久久久久一区二区| 可以看污的网站| 国产字幕在线观看| 久久久久国产免费免费| 欧美精品一区二区三区很污很色的 | jizz国产在线观看| 久久精品日产第一区二区 | 99久久综合精品| 欧美日韩一区在线观看| 欧美亚洲另类激情另类| 91porny九色| 欧美婷婷精品激情| 欧美精品与人动性物交免费看| 欧美成人精品福利| 中文字幕高清不卡| 中文字幕人妻精品一区| 亚洲精品在线视频播放| 中文字幕国内自拍| 日韩免费电影一区二区| 蜜桃精品一区二区| 免费观看日韩电影| 欧美日韩亚洲国产综合| 91网站在线看| 国产草草浮力影院| 蜜臀av一级做a爰片久久| 欧美日产国产精品| 国产精品国产一区二区| 欧美xxxxx精品| 久久国产人妖系列| 亚洲国产黄色片| 色一情一乱一伦一区二区三区丨| 欧美老女人性生活视频| 成人的网站免费观看| 亚洲午夜色婷婷在线| 黄色一级片av| 日韩欧美国产另类| 婷婷久久综合九色综合绿巨人 | 欧美精品一区二区三区四区五区| 右手影院亚洲欧美| 国产精品一级片| 国产一二三精品| 欧美一级理论片| 免费成人深夜夜行视频| 亚洲熟女少妇一区二区| 久久久一区二区三区| 久久精品国产亚洲精品2020| 国产中文字幕在线免费观看| 国产精品区在线观看| 色成年激情久久综合| 国产精品12| 亚洲国产成人精品综合99| 日本一区二区三区四区| 性色av香蕉一区二区| 永久看看免费大片| 国产一区二区精品久久91| 中文字幕亚洲图片| 欧美成人乱码一二三四区免费| 午夜影院在线视频| 九九九久久久| 久久精品99久久香蕉国产色戒| 91黄色在线看| 人妻中文字幕一区| 亚洲激情视频在线| 黄色一级片播放| 天天色棕合合合合合合合| 亚洲国产精品美女| 黄色成人在线免费观看| av中文字幕播放| 亚洲福利在线看| 亚洲中文字幕久久精品无码喷水| 免费一区二区视频| 久久久成人精品视频| 国产xxx在线观看| 2017欧美狠狠色| 91在线高清视频| 日韩成人免费在线观看| 欧美色视频在线| 色综合久久久久久中文网| 制服丝袜中文字幕第一页| 久久成人免费网| 欧美丰满少妇xxxxx| 日本少妇色视频| 久久97超碰国产精品超碰| 欧美一区二区三区爱爱| 在线观看成人免费| 肥臀熟女一区二区三区| 亚洲精品国产品国语在线| 欧美日韩中文在线视频| 国产精品一区二区视频| 久久久亚洲精选| 一级黄色片网址| 亚洲成a人v欧美综合天堂下载 | 欧美一区三区二区| 国产a级一级片| 日本高清不卡免费| 午夜国产精品影院在线观看| 天天做天天爱天天高潮| 美国毛片一区二区三区| 国产精品va在线播放| 久久国产精品系列| 亚洲乱亚洲乱妇无码| 欧美黑人欧美精品刺激| 精品久久久久久中文字幕大豆网 | 日本在线观看网址| 欧美色视频在线| 宅男噜噜噜66国产免费观看| 亚洲va天堂va国产va久| 麻豆av一区| 免费国产黄色片| 午夜在线成人av| 亚洲成年人影院| 日韩在线视频中文字幕| 国产高清www| 国产69精品一区二区亚洲孕妇| 成人国产精品免费观看视频| 91国偷自产一区二区三区成为亚洲经典 | 欧美高跟鞋交xxxxhd| 另类小说色综合| 26uuu亚洲综合色| 日韩av最新在线观看| 99国产在线观看| 九九热精品在线播放| 亚洲成色www.777999| 国产日韩欧美中文字幕| 人妻丰满熟妇av无码久久洗澡| 久久免费激情视频| 亚洲精品一区二区三区不卡| 国产剧情av麻豆香蕉精品| 国产午夜亚洲精品羞羞网站| 欧洲色大大久久| 欧美在线视频免费播放| 日韩精品免费在线视频| 久草免费福利在线| 欧美人妇做爰xxxⅹ性高电影| 国产极品在线视频| 首页国产欧美久久| 日韩欧美国产精品一区| www.18av.com| 视频在线观看91| 全国精品久久少妇| 亚洲精品一区二区三区99| 亚洲午夜精品久久久中文影院av| 在线观看国产亚洲| 欧美在线免费观看亚洲| 日韩电影大全在线观看| 亚洲av无码国产综合专区 | 欧美成人精品激情在线视频| 91婷婷韩国欧美一区二区| 色婷婷综合久久久久| 中文字幕乱码在线人视频| 在线观看一区二区视频| 久久久久久久av| 亚洲高清在线播放| 国产欧美一区二区三区不卡高清| 国产主播第一页| 国产一级二级三级精品| 日韩欧美不卡一区| 久久精品国产精品国产精品污| 国产一区二区三区四| 熟女视频一区二区三区| 亚洲九九爱视频| 91性高潮久久久久久久| 欧美精品一区在线观看| 国产亚洲精品久久久久久| 国产精品熟妇一区二区三区四区| 国产精品免费看片| 欧美精品成人一区二区三区四区| 久久久极品av| 日韩高清专区| 国产乱码精品一区二区三区五月婷| 成年人小视频网站| 欧美黑人一区二区三区| av一区二区三区黑人| 内射毛片内射国产夫妻| 国产日韩在线看| 中文乱码人妻一区二区三区视频| 色狠狠综合天天综合综合| 久久久影院一区二区三区| 欧美电影影音先锋| 老**午夜毛片一区二区三区 | 亚洲国产欧美一区二区丝袜黑人 | 亚洲www在线| 在线一区二区视频| 久久中文字幕一区二区三区| 亚洲五月六月| 国产成人精品无码高潮| 蜜臀久久99精品久久久酒店新书| 国产夫绿帽单男3p精品视频| 欧美大肥婆大肥bbbbb| 日韩免费视频网站| 日本一区二区在线免费播放| 2020国产精品| 美女搡bbb又爽又猛又黄www| 日本一区二区高清| 久久精品国产亚洲AV熟女| 91国内产香蕉| 91天堂素人约啪| 国产精品福利视频| 国产精品国产馆在线真实露脸| 四虎国产精品成人免费入口| 国产成人一区二区三区| 国产精品无遮挡| 欧美日韩偷拍视频| 久久精品国产精品国产精品污| 精品国产精品自拍| 日韩欧美在线观看免费| 日本在线一区| 欧美xxx久久| 天堂av在线一区| 中文字幕国产免费| 91成人在线播放| 亚洲视频在线一区观看| 1级黄色大片儿| 青草全福视在线| 亚洲精品国产拍免费91在线| xxxx黄色片| 91免费版网站在线观看| 日韩欧美一区视频| 国产高清视频免费| www.久久91| 欧洲美女7788成人免费视频| 中文字幕一区二区三区乱码在线| 国产精品999久久久| 亚洲一卡二卡三卡四卡无卡网站在线看 | 国产熟妇搡bbbb搡bbbb| 国产一区红桃视频| 欧美中文一区二区三区| 亚洲av综合色区无码一区爱av | 亚洲欧美另类自拍| 精品一区在线看| 高清国产在线观看| 日韩影院一区| 综合国产在线视频| 国产欧美日韩一区二区三区在线观看 | 亚洲一区二区三区网站| 国产二区视频在线播放| 欧美日韩国产91| 亚洲一区二区三区在线播放| 在线视频你懂得| 日韩av自拍偷拍| 亚洲一区二区三区xxx视频| 久久综合综合久久综合| 污污污www精品国产网站| 国产在线精品一区| 日韩精品在线免费观看视频| 久久久噜噜噜久久人人看 | ,亚洲人成毛片在线播放| 91人人澡人人爽人人精品| 国产精品欧美日韩久久| 欧美一区二区三区免费| 成人自拍视频在线观看| 日干夜干天天干| 中文av免费观看| 欧美午夜一区二区| 国产精品99久久久久久久vr | 毛片av中文字幕一区二区| 天天操中文字幕| 超碰人人干人人| 国产污在线观看| www日韩视频| 日韩精品综合在线| 韩国一区二区三区美女美女秀| 色男人天堂av| 免费观看成年人视频| 韩国av一区二区三区| 美女视频黄免费的亚洲男人天堂| 日韩a∨精品日韩在线观看| 欧美亚洲第一页| 中文字幕日韩高清| 精品免费视频.| 日韩一区二区三区高清免费看看| 色综合色综合色综合色综合色综合 | 99在线免费视频观看| 一二三级黄色片| 日韩在线视频在线| 三区精品视频| 欧美福利一区二区三区| 国产亚洲自拍偷拍| 国产福利久久精品| 亚洲一区二区三区乱码aⅴ| 国产精品偷伦免费视频观看的| 日本欧美一二三区| 欧美在线观看网址综合| 国内精品一区二区三区| 九九九热精品免费视频观看网站| x99av成人免费| 久久天天躁狠狠躁夜夜躁2014| 丝袜美腿精品国产二区| 最近2019中文字幕在线高清| 无码人妻丰满熟妇区毛片蜜桃精品 | 国产男男gay体育生网站| 青青草av在线播放| 国产区在线观看视频| 久久久蜜桃一区二区| 欧美视频xxxx| 国产免费高清视频| 涩多多在线观看| 精品国自产拍在线观看| 午夜精品久久久久久久99樱桃| 亚洲美女视频网站| 5566中文字幕一区二区|