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

SpringBoot 項目接入 Redis 集群

開發(fā) 項目管理 存儲軟件 Redis
Hello 大家好,我是鴨血粉絲,Redis 想必大家一定不會陌生,平常工作中或多或少都會用到,不管是用來存儲登錄信息還是用來緩存熱點數(shù)據(jù),對我們來說都是很有幫助的。

[[343353]]

本文轉(zhuǎn)載自微信公眾號「Java極客技術(shù)」,作者鴨血粉絲  。轉(zhuǎn)載本文請聯(lián)系Java極客技術(shù)公眾號。 

Hello 大家好,我是鴨血粉絲,Redis 想必大家一定不會陌生,平常工作中或多或少都會用到,不管是用來存儲登錄信息還是用來緩存熱點數(shù)據(jù),對我們來說都是很有幫助的。但是 Redis 的集群估計并不是每個人都會用到,因為很多業(yè)務(wù)場景或者系統(tǒng)都是一些簡單的管理系統(tǒng),并不會需要用到 Redis 的集群環(huán)境。

阿粉之前也是這樣,項目中用的的 Redis 是個單機環(huán)境,但是最近隨著終端量的上升,慢慢的發(fā)現(xiàn)單機已經(jīng)快支撐不住的,所以思考再三決定將 Redis 的環(huán)境升級成集群。下面阿粉給大家介紹一下在升級的過程中項目中需要調(diào)整的地方,這篇文章不涉及集群的搭建和配置,感興趣的同學(xué)自行搜索。

配置參數(shù)

因為這篇文章不介紹 Redis 集群的搭建,這里我們假設(shè)已經(jīng)有了一個 Redis 的集群環(huán)境,我們項目中需要調(diào)整以下幾個部分

  1. 修改配置參數(shù),集群的節(jié)點和密碼配置;
  2. 確保引入的 Jedis 版本支持設(shè)置密碼,spring-data-redis 1.8 以上,SpringBoot 1.5 以上才支持設(shè)置密碼;
  3. 注入 RedisTemplate;
  4. 編寫工具類;

修改配置參數(shù)

  1. ############### Redis 集群配置 ######################### 
  2. spring.custome.redis.cluster.nodes=172.20.0.1:7001,172.20.0.2:7002,172.20.0.3:7003 
  3. spring.custome.redis.cluster.max-redirects=3 
  4. spring.custome.redis.cluster.max-active=500 
  5. spring.custome.redis.cluster.max-wait=-1 
  6. spring.custome.redis.cluster.max-idle=500 
  7. spring.custome.redis.cluster.min-idle=20 
  8. spring.custome.redis.cluster.timeout=3000 
  9. spring.custome.redis.cluster.password=redis.cluster.password 

引入依賴(如果需要)

確保 SpringBoot 的版本大于 1.4.x 如果不是的話,采用如下配置,先排除 SpringBoot 中舊版本 Jedis 和 spring-data-redis,再依賴高版本的 Jedis 和 spring-data-redis。

  1. <dependency> 
  2.             <groupId>org.springframework.boot</groupId> 
  3.             <artifactId>spring-boot-starter-data-redis</artifactId> 
  4.             <!-- 1.4 版本 SpringBoot 中 Jedis 不支持密碼登錄 --> 
  5.             <exclusions> 
  6.                 <exclusion> 
  7.                     <groupId>redis.clients</groupId> 
  8.                     <artifactId>jedis</artifactId> 
  9.                 </exclusion> 
  10.                 <exclusion> 
  11.                     <groupId>org.springframework.data</groupId> 
  12.                     <artifactId>spring-data-redis</artifactId> 
  13.                 </exclusion> 
  14.             </exclusions> 
  15.         </dependency> 
  16.         <!-- 手動依賴 Jedis 和 spring-data-redis--> 
  17.         <dependency> 
  18.             <groupId>redis.clients</groupId> 
  19.             <artifactId>jedis</artifactId> 
  20.             <version>2.9.0</version> 
  21.         </dependency> 
  22.         <dependency> 
  23.             <groupId>org.springframework.data</groupId> 
  24.             <artifactId>spring-data-redis</artifactId> 
  25.             <version>1.8.0.RELEASE</version> 
  26.         </dependency> 

 

注入 RedisTemplate

注入 RedisTemplate 我們需要三個組件,分別是JedisConnectionFactory 、RedisClusterConfiguration、JedisPoolConfig,下面是注入RedisTempalte 的代碼。先根據(jù)配置創(chuàng)建 JedisConnectFactory 同時需要配置 RedisClusterConfiguration、JedisPoolConfig,最后將JedisConnectionFactory 返回用于創(chuàng)建RedisTemplate

  1. import com.fasterxml.jackson.annotation.JsonAutoDetect; 
  2. import com.fasterxml.jackson.annotation.PropertyAccessor; 
  3. import com.fasterxml.jackson.databind.ObjectMapper; 
  4. import org.apache.commons.pool2.impl.GenericObjectPoolConfig; 
  5. import org.springframework.beans.factory.annotation.Value; 
  6. import org.springframework.context.annotation.Bean; 
  7. import org.springframework.context.annotation.Primary
  8. import org.springframework.data.redis.connection.RedisClusterConfiguration; 
  9. import org.springframework.data.redis.connection.RedisNode; 
  10. import org.springframework.data.redis.connection.jedis.JedisClientConfiguration; 
  11. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 
  12. import org.springframework.data.redis.core.RedisTemplate; 
  13. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; 
  14. import org.springframework.data.redis.serializer.StringRedisSerializer; 
  15.  
  16. import java.time.Duration; 
  17. import java.util.ArrayList; 
  18. import java.util.List; 
  19.  
  20. public class RedisClusterConfig { 
  21.  
  22.     @Bean(name = "redisTemplate"
  23.     @Primary 
  24.     public RedisTemplate redisClusterTemplate(@Value("${spring.custome.redis.cluster.nodes}") String host, 
  25.                                      @Value("${spring.custome.redis.cluster.password}") String password
  26.                                      @Value("${spring.custome.redis.cluster.timeout}") long timeout, 
  27.                                      @Value("${spring.custome.redis.cluster.max-redirects}"int maxRedirect, 
  28.                                      @Value("${spring.custome.redis.cluster.max-active}"int maxActive, 
  29.                                      @Value("${spring.custome.redis.cluster.max-wait}"int maxWait, 
  30.                                      @Value("${spring.custome.redis.cluster.max-idle}"int maxIdle, 
  31.                                      @Value("${spring.custome.redis.cluster.min-idle}"int minIdle) { 
  32.  
  33.         JedisConnectionFactory connectionFactory =  jedisClusterConnectionFactory(host, password
  34.                 timeout, maxRedirect, maxActive, maxWait, maxIdle, minIdle); 
  35.         return createRedisClusterTemplate(connectionFactory); 
  36.     } 
  37.  
  38.     private JedisConnectionFactory jedisClusterConnectionFactory(String host, String password
  39.                                                                    long timeout, int maxRedirect, int maxActive, int maxWait, int maxIdle, int minIdle) { 
  40.         RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(); 
  41.         List<RedisNode> nodeList = new ArrayList<>(); 
  42.         String[] cNodes = host.split(","); 
  43.         //分割出集群節(jié)點 
  44.         for (String node : cNodes) { 
  45.             String[] hp = node.split(":"); 
  46.             nodeList.add(new RedisNode(hp[0], Integer.parseInt(hp[1]))); 
  47.         } 
  48.         redisClusterConfiguration.setClusterNodes(nodeList); 
  49.         redisClusterConfiguration.setPassword(password); 
  50.         redisClusterConfiguration.setMaxRedirects(maxRedirect); 
  51.  
  52.         // 連接池通用配置 
  53.         GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); 
  54.         genericObjectPoolConfig.setMaxIdle(maxIdle); 
  55.         genericObjectPoolConfig.setMaxTotal(maxActive); 
  56.         genericObjectPoolConfig.setMinIdle(minIdle); 
  57.         genericObjectPoolConfig.setMaxWaitMillis(maxWait); 
  58.         genericObjectPoolConfig.setTestWhileIdle(true); 
  59.         genericObjectPoolConfig.setTimeBetweenEvictionRunsMillis(300000); 
  60.  
  61.         JedisClientConfiguration.DefaultJedisClientConfigurationBuilder builder = (JedisClientConfiguration.DefaultJedisClientConfigurationBuilder) JedisClientConfiguration 
  62.                 .builder(); 
  63.         builder.connectTimeout(Duration.ofSeconds(timeout)); 
  64.         builder.usePooling(); 
  65.         builder.poolConfig(genericObjectPoolConfig); 
  66.         JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisClusterConfiguration, builder.build()); 
  67.         // 連接池初始化 
  68.         connectionFactory.afterPropertiesSet(); 
  69.  
  70.         return connectionFactory; 
  71.     } 
  72.  
  73.     private RedisTemplate createRedisClusterTemplate(JedisConnectionFactory redisConnectionFactory) { 
  74.         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); 
  75.         redisTemplate.setConnectionFactory(redisConnectionFactory); 
  76.  
  77.         Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); 
  78.         ObjectMapper om = new ObjectMapper(); 
  79.         om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 
  80.         om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); 
  81.         jackson2JsonRedisSerializer.setObjectMapper(om); 
  82.  
  83.         StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); 
  84.         // key采用String的序列化方式 
  85.         redisTemplate.setKeySerializer(stringRedisSerializer); 
  86.         // hash的key也采用String的序列化方式 
  87.         redisTemplate.setHashKeySerializer(stringRedisSerializer); 
  88.         // value序列化方式采用jackson 
  89.         redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); 
  90.         // hash的value序列化方式采用jackson 
  91.         redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); 
  92.         redisTemplate.afterPropertiesSet(); 
  93.  
  94.         return redisTemplate; 
  95.     } 

編寫工具類

其實到這里基本上已經(jīng)完成了,我們可以看到 SpringBoot 項目接入 Redis 集群還是比較簡單的,而且如果之前單機環(huán)境就是采用RedisTemplate 的話,現(xiàn)在也就不需要編寫工具類,之前的操作依舊有效。不過作為貼心的阿粉,我還是給大家準(zhǔn)備了一個工具類,代碼太長,我只貼部分,需要完成代碼的可以到公眾號回復(fù)【源碼倉庫】獲取。

  1. /** 
  2.      *  刪除KEY 
  3.      * @param key 
  4.      * @return 
  5.      */ 
  6.     public boolean delete(String key) { 
  7.         try { 
  8.             return getTemplate().delete(key); 
  9.         } catch (Exception e) { 
  10.             log.error("redis hasKey() is error"); 
  11.             return false
  12.         } 
  13.     } 
  14.  
  15.     /** 
  16.      * 普通緩存獲取 
  17.      * 
  18.      * @param key 鍵 
  19.      * @return 值 
  20.      */ 
  21.     public Object get(String key) { 
  22.  
  23.         return key == null ? null : getTemplate().opsForValue().get(key); 
  24.     } 
  25.  
  26.     /** 
  27.      * 普通緩存放入 
  28.      * 
  29.      * @param key   鍵 
  30.      * @param value 值 
  31.      * @return true成功 false失敗 
  32.      */ 
  33.     public boolean set(String key, Object value) { 
  34.  
  35.         try { 
  36.             getTemplate().opsForValue().set(key, value); 
  37.             return true
  38.         } catch (Exception e) { 
  39.             log.error("redis set() is error"); 
  40.             return false
  41.         } 
  42.  
  43.     } 
  44.  
  45.     /** 
  46.      * 普通緩存放入并設(shè)置時間 
  47.      * 
  48.      * @param key   鍵 
  49.      * @param value 值 
  50.      * @param time  時間(秒) time要大于0 如果time小于等于0 將設(shè)置無限期 
  51.      * @return true成功 false 失敗 
  52.      */ 
  53.     public boolean set(String key, Object value, long time) { 
  54.         try { 
  55.             if (time > 0) { 
  56.                 getTemplate().opsForValue().set(key, value, time, TimeUnit.SECONDS); 
  57.             } else { 
  58.                 set(key, value); 
  59.             } 
  60.             return true
  61.         } catch (Exception e) { 
  62.             log.error("redis set() is error"); 
  63.             return false
  64.         } 
  65.     } 
  66.  
  67.     /** 
  68.      * 計數(shù)器 
  69.      * 
  70.      * @param key 鍵 
  71.      * @return 值 
  72.      */ 
  73.     public Long incr(String key) { 
  74.  
  75.         return getTemplate().opsForValue().increment(key); 
  76.     } 
  77.  
  78.     public Long incrBy(String key, long step) { 
  79.  
  80.         return getTemplate().opsForValue().increment(key, step); 
  81.     } 
  82.  
  83.     /** 
  84.      * HashGet 
  85.      * 
  86.      * @param key  鍵 不能為null 
  87.      * @param item 項 不能為null 
  88.      * @return 值 
  89.      */ 
  90.     public Object hget(String key, String item) { 
  91.  
  92.         return getTemplate().opsForHash().get(key, item); 
  93.     } 
  94.  
  95.     /** 
  96.      * 獲取hashKey對應(yīng)的所有鍵值 
  97.      * 
  98.      * @param key 鍵 
  99.      * @return 對應(yīng)的多個鍵值 
  100.      */ 
  101.     public Map<Object, Object> hmget(String key) { 
  102.  
  103.         return getTemplate().opsForHash().entries(key); 
  104.     } 
  105.  
  106.     /** 
  107.      * 獲取hashKey對應(yīng)的批量鍵值 
  108.      * @param key 
  109.      * @param values 
  110.      * @return 
  111.      */ 
  112.     public List<Object> hmget(String key, List<String> values) { 
  113.  
  114.         return getTemplate().opsForHash().multiGet(keyvalues); 
  115.     } 

上面隨機列了幾個方法,更多方案等待你的探索。

 

 

 

總結(jié)

今天阿粉給大家介紹了一下 SpringBoot 項目如何接入 Redis 集群,需要的朋友可以參考一下,不過阿粉還是要說一下,系統(tǒng)的設(shè)計不能過于冗余,如果短期內(nèi)還能支撐業(yè)務(wù)的發(fā)展,那就暫時不要考慮太復(fù)雜,畢竟系統(tǒng)的架構(gòu)是需要不斷的完善的,不可能剛開始的時候就設(shè)計出一套很完善的系統(tǒng)框架。隨著業(yè)務(wù)的不斷發(fā)展,當(dāng)真正發(fā)現(xiàn)單機Redis 已經(jīng)無法滿足業(yè)務(wù)需求的時候再接入也不遲!

 

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2021-03-23 08:39:27

SpringBootRedis管道技術(shù)

2025-04-25 09:30:41

RancherKubernetes集群

2024-11-04 15:49:43

Redis?數(shù)據(jù)遷移

2021-01-07 10:18:03

Redis數(shù)據(jù)庫環(huán)境搭建

2024-03-07 16:03:56

RedisDocker

2022-02-02 21:58:43

Redis集群Undermoon

2019-10-23 09:20:11

Redis集群主從復(fù)制

2023-09-26 01:07:34

2023-09-27 06:26:07

2021-08-09 06:27:04

Gulp項目工具

2025-04-29 01:30:00

Redis集群節(jié)點

2025-11-18 09:44:55

2025-02-24 10:07:09

Redis節(jié)點遷移集群

2021-07-11 07:05:28

RedisSpringBoot用法

2024-09-11 20:05:56

2021-10-07 20:36:45

Redis集群場景

2022-02-09 15:36:49

Redis主從模式哨兵模式

2020-01-10 15:42:13

SpringBootRedis數(shù)據(jù)庫

2022-05-31 08:04:03

Redis高可用集群

2019-09-16 16:05:13

Redis集群模式
點贊
收藏

51CTO技術(shù)棧公眾號

欧美最猛性xxxxx亚洲精品| 欧美精品一区二区三区四区| 亚洲人成人77777线观看| 国产精品尤物视频| 亚洲激情五月| 亚洲国产天堂久久国产91| 一本大道熟女人妻中文字幕在线 | 日韩精品视频三区| 亚洲人辣妹窥探嘘嘘| h网站久久久| 不卡视频在线看| 国产成人精品久久久| 精品国产国产综合精品| 福利电影一区 | 性生活三级视频| 久久久精品网| 久久久久久成人精品| 三上悠亚影音先锋| 精品中文字幕一区二区三区| 色噜噜夜夜夜综合网| 日本黄xxxxxxxxx100| 欧美在线观看在线观看| 国产一区不卡精品| 国产成人精品av在线| 精品视频一区二区在线观看| 成人在线电影在线观看视频| 亚洲国产天堂网精品网站| 无尽裸体动漫2d在线观看| 国产精选在线| 亚洲制服丝袜av| 在线视频一区观看| 岛国在线视频| 99国产精品久| 国产精品一区二区av| 97人妻人人澡人人爽人人精品 | 国产欧美激情视频| 欧美xnxx| 一本一道综合狠狠老| 欧美一级片免费播放| 伊人精品影院| 亚洲三级免费电影| 一区二区三区免费看| 国产一二三在线观看| 91在线观看污| 国产一区免费| 色网站免费观看| 成人高清伦理免费影院在线观看| 92国产精品视频| 97人妻精品一区二区三区软件| 日本不卡一二三区黄网| 日韩美女福利视频| 中文字幕精品三级久久久| 136国产福利精品导航网址| 九色精品美女在线| 久久久久久久福利| 欧美视频成人| 午夜精品久久久99热福利| 久久一二三四区| 亚洲一级一区| 91国内精品久久| 久久黄色精品视频| 国产一区91| 日韩美女在线观看一区| 天堂av免费在线观看| 日日骚欧美日韩| 国产精品成人va在线观看| 精品久久久久久久久久久国产字幕| 亚洲欧美日韩视频二区| 国产91在线播放精品91| 国产一级精品毛片| a级片在线免费| 国产成人手机高清在线观看网站| 精品国产亚洲在线| 伊人影院在线观看视频| 亚洲精品一区二区三区在线| 678五月天丁香亚洲综合网| 福利片一区二区三区| 欧美一区二区三区婷婷| 在线播放中文字幕一区| 欧美污在线观看| www.成人网| 精品一区精品二区| 精品人伦一区二区| 97偷自拍亚洲综合二区| 欧美成人免费va影院高清| 久久综合加勒比| 国产视频亚洲| 国产欧美亚洲视频| 成人毛片在线免费观看| 久久嫩草精品久久久精品一| 亚洲欧洲日本国产| 污视频网站在线免费| 欧美日韩亚洲激情| 中文字幕22页| 色88888久久久久久影院| 亚洲天堂男人天堂| 在线免费观看亚洲视频| 国产日韩欧美三级| 91精品国产综合久久香蕉922| 亚洲国产精品久久久久爰性色| 久久久综合九色合综国产精品| 亚洲天堂电影网| 国产丝袜在线观看视频| 在线观看欧美日本| 韩国黄色一级片| 国产日产精品_国产精品毛片| 欧美xxxx14xxxxx性爽| 综合激情网五月| 国产麻豆日韩欧美久久| 欧美色图亚洲自拍| 女子免费在线观看视频www| 色中色一区二区| 国产精品91av| 精品一区二区三区在线| 久久久免费精品视频| 一区两区小视频| 91丨porny丨最新| 国产免费一区二区三区四在线播放| 高清在线视频不卡| 91精品国产丝袜白色高跟鞋| 黄色aaa视频| 国内精品久久久久久久97牛牛| 日本高清+成人网在线观看| 99热这里只有精品99| 国产色婷婷亚洲99精品小说| 免费毛片网站在线观看| 日本伊人久久| 日韩在线小视频| 欧美一级淫片免费视频黄| 高清成人在线观看| 中国老女人av| 色8久久久久| 亚洲视频一区二区| 国产又爽又黄的视频| 国产v日产∨综合v精品视频| 最新不卡av| 日韩免费在线电影| 一本久久综合亚洲鲁鲁| 中文字幕免费观看| 久久久久久久久99精品| 北条麻妃在线视频观看| 加勒比色综合久久久久久久久| 美日韩精品免费观看视频| 影音先锋国产在线| 国产视频911| 在线观看免费成人av| 欧美人与牛zoz0性行为| 秋霞av国产精品一区| 亚洲av片一区二区三区| 偷拍一区二区三区| 中文字幕在线播放一区| 夜久久久久久| 久久国产精品久久| 在线男人天堂| 亚洲性av在线| 中文永久免费观看| 国产精品女同一区二区三区| 视频二区在线播放| 国产精品7m凸凹视频分类| 91久久在线观看| 国产精品一区二区三区视频网站| 91精品国产色综合久久不卡蜜臀 | 黑人糟蹋人妻hd中文字幕 | 亚洲欧美日产图| 国产精品原创视频| 久久综合免费视频| av天堂一区二区三区| 亚洲一区二区三区不卡国产欧美| caopor在线| 亚洲免费婷婷| 神马影院午夜我不卡影院| 国外成人福利视频| 欧美伦理91i| 国产精品最新在线观看| 国产精品久久久久久久龚玥菲 | 亚洲男女性事视频| 波多野结衣黄色| 亚洲欧洲另类国产综合| 亚洲妇女无套内射精| 精品123区| √…a在线天堂一区| 一级黄色特级片| 91精品亚洲| 动漫精品视频| 最新欧美色图| 日韩网站免费观看| 人妻无码中文字幕| 神马香蕉久久| 欧美激情18p| 男女av在线| 欧美日韩免费观看一区二区三区| 澳门黄色一级片| 91麻豆文化传媒在线观看| www.涩涩涩| 亚洲国产清纯| 亚洲欧洲另类精品久久综合| 北条麻妃在线一区二区免费播放| 国产91精品最新在线播放| 看黄网站在线观看| 亚洲精品网站在线播放gif| 91片黄在线观看喷潮| 午夜电影网一区| 2017亚洲天堂| 97se亚洲国产综合自在线不卡| www.com操| 亚洲少妇一区| 国产a级黄色大片| 教室别恋欧美无删减版| 99中文字幕| 久久久加勒比| 日韩av快播网址| а√天堂8资源在线| 不卡av日日日| 91激情在线| 亚洲天堂成人在线视频| 日韩在线视频第一页| 6080日韩午夜伦伦午夜伦| 综合网在线观看| 亚洲成人福利片| www.色小姐com| 国产精品毛片大码女人| 三上悠亚ssⅰn939无码播放| 处破女av一区二区| а 天堂 在线| 看片网站欧美日韩| 男女曰b免费视频| 亚洲视频播放| 国产精品又粗又长| 欧美日韩理论| 日本a级片在线观看| 国产精品精品| 亚洲国产精品毛片| 国产一区二区精品久| 久久精品一区二区三区不卡免费视频| 中文字幕日韩在线| 亚洲影院在线看| 国产精品久久久久久久久久辛辛 | swag国产精品一区二区| 亚洲va欧美va国产综合剧情| 欧美特黄色片| 国产精品一区久久| 成人深夜福利| 国产精品一区二区三区在线播放| 97成人超碰| 国产精品一香蕉国产线看观看 | 欧美日韩色一区| 在线观看色网站| 欧美三片在线视频观看| 中文字幕 欧美激情| 欧美丝袜自拍制服另类| 最近中文字幕在线观看| 在线观看欧美日本| 中文有码在线播放| 91.com视频| 精品国产无码一区二区| 91精品国产一区二区三区| 亚洲高清视频网站| 精品国产凹凸成av人网站| 国产91久久久| 日韩精品在线视频美女| 精品电影在线| 久久久精品视频成人| 黄色成人影院| 久久频这里精品99香蕉| 第一福利在线视频| 国产精品白嫩美女在线观看| 四虎国产精品永久在线国在线 | www.久久伊人| 精品国产成人在线影院| 午夜在线视频观看| 国产亚洲精品久久久久久牛牛| 98在线视频| 欧美美最猛性xxxxxx| 超免费在线视频| 日韩av手机在线| 香蕉久久一区| 国产一区二区三区奇米久涩| 天天操综合520| 亚洲一卡二卡区| 永久亚洲成a人片777777| 国产乱淫av片杨贵妃| 午夜亚洲精品| 亚洲日本黄色片| jlzzjlzz国产精品久久| 黄免费在线观看| 一二三区精品福利视频| 中文字幕一区在线播放| 欧美精品在线观看播放| 日韩中文字幕观看| 色婷婷**av毛片一区| 96av在线| 成人国产精品久久久| 成人自拍在线| 一区精品在线| 亚洲欧美日本日韩| 国产伦理在线观看| 久久蜜桃av一区精品变态类天堂| 国产黄色小视频网站| 日韩欧美一区二区三区| 精品久久国产视频| 亚洲视频狠狠干| av中文字幕在线免费观看| 欧美在线黄色| 女人床在线观看| 国产亚洲午夜| 亚洲男人天堂2021| 久久精品无码一区二区三区| 丁香花五月激情| 很黄的网站在线观看| 欧美这里有精品| www五月婷婷| 在线播放日韩专区| free性欧美16hd| 成人两性免费视频| 九九精品在线| 日韩xxxx视频| 国产一区二区三区蝌蚪| 无码人妻精品一区二区中文| 91午夜精品| 久久综合狠狠综合久久综青草 | 日韩av电影免费在线| 欧美日韩国产在线一区| 污网站在线免费| 亚洲国产精品传媒在线观看| 五月天综合激情| 欧美不卡123| av理论在线观看| 91亚洲精华国产精华| 久久国产亚洲| 一道本视频在线观看| 久久久久久亚洲综合影院红桃| 日韩乱码在线观看| 欧美不卡一区二区三区| 最新国产露脸在线观看| 成人网欧美在线视频| 婷婷综合在线| av在线网址导航| 1区2区3区国产精品| 亚洲网站在线免费观看| 亚洲性xxxx| 国产成人免费| 日韩一二三区不卡在线视频| 久热综合在线亚洲精品| 亚洲天堂视频一区| 色丁香久综合在线久综合在线观看| 天天综合在线视频| 韩剧1988免费观看全集| 欧美中文一区| 东京热加勒比无码少妇| 91美女蜜桃在线| 波多野结衣mp4| 一区二区三区亚洲| 精品福利在线| 成人手机视频在线| 国产精品影视在线| 黄色一级视频在线观看| 精品国产一区二区三区四区四 | 色综合久久久久网| 韩国免费在线视频| 国产精品美女在线观看| 欧美日中文字幕| 中文 日韩 欧美| 夜夜揉揉日日人人青青一国产精品| 国产成人久久精品77777综合| 欧美国产在线电影| 天美av一区二区三区久久| 激情五月婷婷久久| 亚洲天堂av一区| 日韩在线视频观看免费| 国产精品xxx视频| 亚洲天堂一区二区三区四区| 日韩黄色一区二区| 色综合天天天天做夜夜夜夜做| 国产69精品久久app免费版| 国产综合久久久久| 在线观看视频日韩| 亚洲第一成人网站| 在线播放一区二区三区| 爱情岛论坛亚洲品质自拍视频网站| 久久99蜜桃综合影院免费观看| 久久先锋影音| 国产精品国产三级国产专播精品人| 国产九色91回来了| 亚洲香蕉成视频在线观看| 亚洲精品成人一区| 国产欧美久久久久| 久久久九九九九| 国产婷婷在线视频| 69国产精品成人在线播放| 日韩理论电影院| 欧洲熟妇的性久久久久久| 91福利精品视频| 先锋成人av| 日韩久久久久久久久久久久久| 国产一区在线观看视频| 国产一级18片视频| 欧美老女人xx| av中文字幕一区二区| 欧美做受高潮中文字幕 | 欧美国产亚洲一区|