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

分布式緩存技術redis學習系列----深入理解Spring Redis的使用

大數據 分布式 Redis
關于spring redis框架的使用,網上的例子很多很多。但是在自己最近一段時間的使用中,發現這些教程都是入門教程,包括很多的使用方法,與spring redis豐富的api大相徑庭,真是浪費了這么優秀的一個框架。

關于spring redis框架的使用,網上的例子很多很多。但是在自己最近一段時間的使用中,發現這些教程都是入門教程,包括很多的使用方法,與spring redis豐富的api大相徑庭,真是浪費了這么優秀的一個框架。

Spring-data-redis為spring-data模塊中對redis的支持部分,簡稱為“SDR”,提供了基于jedis客戶端API的高度封裝以及與spring容器的整合,事實上jedis客戶端已經足夠簡單和輕量級,而spring-data-redis反而具有“過度設計”的嫌疑。

jedis客戶端在編程實施方面存在如下不足:

1) connection管理缺乏自動化,connection-pool的設計缺少必要的容器支持。

2) 數據操作需要關注“序列化”/“反序列化”,因為jedis的客戶端API接受的數據類型為string和byte,對結構化數據(json,xml,pojo)操作需要額外的支持。

3) 事務操作純粹為硬編碼

4) pub/sub功能,缺乏必要的設計模式支持,對于開發者而言需要關注的太多。

1. Redis使用場景

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。

我們都知道,在日常的應用中,數據庫瓶頸是最容易出現的。數據量太大和頻繁的查詢,由于磁盤IO性能的局限性,導致項目的性能越來越低。

這時候,基于內存的緩存框架,就能解決我們很多問題。例如Memcache,Redis等。將一些頻繁使用的數據放入緩存讀取,大大降低了數據庫的負擔。提升了系統的性能。其實,對于hibernate以及Mybatis的二級緩存,是同樣的道理。利用內存高速的讀寫速度,來解決硬盤的瓶頸。

2. 配置使用redis

項目的整體結構如下:

在applicationContext-dao.xml中配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <beans xmlns="http://www.springframework.org/schema/beans"     
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:context="http://www.springframework.org/schema/context"       
  5.     xmlns:mongo="http://www.springframework.org/schema/data/mongo"     
  6.     xmlns:aop="http://www.springframework.org/schema/aop"   
  7.     xsi:schemaLocation="http://www.springframework.org/schema/beans      
  8.             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd     
  9.             http://www.springframework.org/schema/data/mongo     
  10.             http://www.springframework.org/schema/data/mongo/spring-mongo.xsd   
  11.             http://www.springframework.org/schema/context     
  12.         http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  13.         http://www.springframework.org/schema/aop   
  14.         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">     
  15.    
  16.     <context:property-placeholder location="classpath:database.properties" />   
  17.            
  18.     <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">   
  19.             <property name="maxIdle" value="${redis.maxIdle}" />   
  20.             <property name="maxTotal" value="${redis.maxActive}" />   
  21.             <property name="maxWaitMillis" value="${redis.maxWait}" />   
  22.             <property name="testOnBorrow" value="${redis.testOnBorrow}" />   
  23.         </bean>   
  24.            
  25.     <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">   
  26.          <property name="hostName" value="${redis.host}"/>   
  27.          <property name="port" value="${redis.port}"/>   
  28.          <property name="password" value="${redis.pass}"/>   
  29.          <property name="poolConfig" ref="poolConfig"/>   
  30.     </bean>   
  31.             
  32.         <bean id="stringSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>   
  33.            
  34.         <bean id="hashSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>   
  35.        
  36.     <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">   
  37.             <property name="connectionFactory" ref="connectionFactory" />   
  38.             <property name="keySerializer" ref="stringSerializer"/>   
  39.             <property name="valueSerializer" ref="stringSerializer"/>   
  40.             <property name="hashKeySerializer" ref="stringSerializer" />   
  41.             <property name="hashValueSerializer" ref="hashSerializer"/>   
  42.     </bean>   
  43.    
  44. </beans>   

database.properties配置文件如下:

  1. redis.maxIdle=10   
  2. redis.maxActive=20   
  3. redis.maxWait=10000   
  4. redis.testOnBorrow=true   
  5. redis.host=192.168.1.76   
  6. redis.port=6379   
  7. redis.pass=password1   

spring-data-redis提供了多種serializer策略,這對使用jedis的開發者而言,實在是非常便捷。sdr提供了4種內置的serializer:

  • JdkSerializationRedisSerializer:使用JDK的序列化手段(serializable接口,ObjectInputStrean,ObjectOutputStream),數據以字節流存儲,POJO對象的存取場景,使用JDK本身序列化機制,將pojo類通過ObjectInputStream/ObjectOutputStream進行序列化操作,最終redis-server中將存儲字節序列,是目前最常用的序列化策略。
  • StringRedisSerializer:字符串編碼,數據以string存儲,Key或者value為字符串的場景,根據指定的charset對數據的字節序列編碼成string,是“new String(bytes, charset)”和“string.getBytes(charset)”的直接封裝。是最輕量級和高效的策略。
  • JacksonJsonRedisSerializer:json格式存儲,jackson-json工具提供了javabean與json之間的轉換能力,可以將pojo實例序列化成json格式存儲在redis中,也可以將json格式的數據轉換成pojo實例。因為jackson工具在序列化和反序列化時,需要明確指定Class類型,因此此策略封裝起來稍微復雜。【需要jackson-mapper-asl工具支持】
  • OxmSerializer:xml格式存儲,提供了將javabean與xml之間的轉換能力,目前可用的三方支持包括jaxb,apache-xmlbeans;redis存儲的數據將是xml工具。不過使用此策略,編程將會有些難度,而且效率***;不建議使用。【需要spring-oxm模塊的支持】

其中JdkSerializationRedisSerializer和StringRedisSerializer是最基礎的序列化策略,其中“JacksonJsonRedisSerializer”與“OxmSerializer”都是基于stirng存儲,因此它們是較為“高級”的序列化(最終還是使用string解析以及構建java對象)。 針對“序列化和發序列化”中JdkSerializationRedisSerializer和StringRedisSerializer是最基礎的策略,原則上,我們可以將數據存儲為任何格式以便應用程序存取和解析(其中應用包括app,hadoop等其他工具),不過在設計時仍然不推薦直接使用“JacksonJsonRedisSerializer”和“OxmSerializer”,因為無論是json還是xml,他們本身仍然是String。如果你的數據需要被第三方工具解析,那么數據應該使用StringRedisSerializer而不是JdkSerializationRedisSerializer。

RedisTemplate中需要聲明4種serializer,默認為“JdkSerializationRedisSerializer”:

1) keySerializer :對于普通K-V操作時,key采取的序列化策略

2) valueSerializer:value采取的序列化策略

3) hashKeySerializer: 在hash數據結構中,hash-key的序列化策略

4) hashValueSerializer:hash-value的序列化策略

無論如何,建議key/hashKey采用StringRedisSerializer。

spring-data-redis針對jedis提供了如下功能:

1. 連接池自動管理,提供了一個高度封裝的“RedisTemplate”類

2. 針對jedis客戶端中大量api進行了歸類封裝,將同一類型操作封裝為operation接口

  • ValueOperations:簡單K-V操作
  • SetOperations:set類型數據操作
  • ZSetOperations:zset類型數據操作
  • HashOperations:針對map類型的數據操作
  • ListOperations:針對list類型的數據操作

3. 提供了對key的“bound”(綁定)便捷化操作API,可以通過bound封裝指定的key,然后進行一系列的操作而無須“顯式”的再次指定Key,即BoundKeyOperations:

  • BoundValueOperations
  • BoundSetOperations
  • BoundListOperations
  • BoundSetOperations
  • BoundHashOperations

3. RedisTemplate的使用

這個類作為一個模版類,提供了很多快速使用redis的api,而不需要自己來維護連接,事務。最初的時候,我創建的BaseRedisDao是繼承自這個類的。繼承的好處是我的每個Dao中,都可以自由的控制序列化器,自由的控制自己是否需要事務,這個先不需要了解,跟著我目前的這種配置方法來即可。template提供了一系列的operation,比如valueOperation,HashOperation,ListOperation,SetOperation等,用來操作不同數據類型的Redis。并且,RedisTemplate還提供了對應的*OperationsEditor,用來通過RedisTemplate直接注入對應的Operation。

核心代碼:

  1. package com.npf.dao.impl;   
  2.    
  3. import java.util.ArrayList;   
  4. import java.util.List;   
  5. import java.util.Map;   
  6. import java.util.Map.Entry;   
  7.    
  8. import javax.annotation.Resource;   
  9.    
  10. import org.springframework.beans.factory.annotation.Autowired;   
  11. import org.springframework.data.redis.core.HashOperations;   
  12. import org.springframework.data.redis.core.RedisTemplate;   
  13. import org.springframework.stereotype.Repository;   
  14.    
  15. import com.npf.dao.StudentDao;   
  16. import com.npf.model.Student;   
  17.    
  18. @Repository   
  19. public class StudentDaoImpl implements StudentDao{   
  20.    
  21.     @Autowired   
  22.     private RedisTemplate<String,Student> redisTemplate;   
  23.        
  24.     @Resource(name="redisTemplate")   
  25.     private HashOperations<String,String,Student> opsForHash;   
  26.        
  27.     public static final String STUDENT = "student";   
  28.        
  29.     @Override   
  30.     public void save(Student student) {   
  31.         opsForHash.put(STUDENT, student.getId(), student);   
  32.     }   
  33.    
  34.     @Override   
  35.     public Student find(String id) {   
  36.         Student student = opsForHash.get(STUDENT, id);   
  37.         return student;   
  38.     }   
  39.    
  40.     @Override   
  41.     public void delete(String id) {   
  42.         opsForHash.delete(STUDENT, id);   
  43.     }   
  44.    
  45.     @Override   
  46.     public void update(Student student) {   
  47.         opsForHash.put(STUDENT, student.getId(), student);   
  48.     }   
  49.    
  50.     @Override   
  51.     public List<Student> findAll() {   
  52.         Map<String, Student> entries = opsForHash.entries(STUDENT);   
  53.         List<Student> stuList = new ArrayList<Student>();   
  54.         for(Entry<String, Student> entry : entries.entrySet()){   
  55.             stuList.add(entry.getValue());   
  56.         }   
  57.         return stuList;   
  58.     }   
  59. }   

控制層代碼如下:

  1. package com.npf.controller;   
  2.    
  3. import java.util.List;   
  4. import java.util.UUID;   
  5.    
  6. import org.springframework.beans.factory.annotation.Autowired;   
  7. import org.springframework.stereotype.Controller;   
  8. import org.springframework.ui.Model;   
  9. import org.springframework.web.bind.annotation.RequestMapping;   
  10. import org.springframework.web.bind.annotation.RequestParam;   
  11.    
  12. import com.npf.model.Student;   
  13. import com.npf.service.StudentService;   
  14.    
  15. @Controller   
  16. public class StudentController {   
  17.    
  18.     @Autowired   
  19.     private StudentService studentService;   
  20.        
  21.     @RequestMapping("/student/save")   
  22.     public String saveStudent(Student student){   
  23.         String id = UUID.randomUUID().toString();   
  24.         System.out.println(id);   
  25.         student.setId(id);   
  26.         studentService.save(student);   
  27.         return "redirect:/student/find/all";   
  28.     }   
  29.        
  30.     @RequestMapping("/student/update")   
  31.     public String updateStudent(Student student){   
  32.         studentService.update(student);   
  33.         return "redirect:/student/find/all";   
  34.     }   
  35.        
  36.     @RequestMapping("/student/to/save/form")   
  37.     public String toSaveStudentForm(){   
  38.         return "save";   
  39.     }   
  40.        
  41.     @RequestMapping("/student/delete")   
  42.     public String deleteStudent(@RequestParam("id") String id){   
  43.         studentService.delete(id);   
  44.         return "redirect:/student/find/all";   
  45.     }   
  46.        
  47.     @RequestMapping("/student/to/update/form")   
  48.     public String toUpdateStudentForm(@RequestParam("id") String id,Model model){   
  49.         Student stu = studentService.find(id);   
  50.         model.addAttribute("stu", stu);   
  51.         return "update";   
  52.     }   
  53.        
  54.     @RequestMapping("/student/find/all")   
  55.     public String findStudents(Model model){   
  56.         List<Student> stuList = studentService.findAll();   
  57.         model.addAttribute("stuList", stuList);   
  58.         return "list";   
  59.     }   
  60. }   
責任編輯:武曉燕 來源: 博客園
相關推薦

2021-01-12 14:56:40

Redis分布式鎖工具

2018-01-26 14:47:04

分布式緩存

2020-09-23 10:00:26

Redis數據庫命令

2019-02-18 11:16:12

Redis分布式緩存

2024-05-10 08:18:16

分布式數據庫

2022-09-19 08:17:09

Redis分布式

2019-07-04 15:13:16

分布式緩存Redis

2024-12-09 09:35:00

2019-06-19 15:40:06

分布式鎖RedisJava

2023-01-13 07:39:07

2015-06-17 14:10:34

Redis分布式系統協調

2024-04-01 05:10:00

Redis數據庫分布式鎖

2024-10-07 10:07:31

2018-02-07 10:46:20

數據存儲

2020-07-15 16:50:57

Spring BootRedisJava

2022-08-22 08:04:25

Spring事務Atomicity

2025-01-23 08:53:15

2019-02-12 14:24:14

緩存高并發網絡

2018-11-28 16:00:41

2018-12-12 15:20:27

點贊
收藏

51CTO技術棧公眾號

99九九电视剧免费观看| 久久成人精品一区二区三区| 青青在线免费观看视频| 日韩美女网站| 成人美女视频在线观看18| 欧美一级淫片丝袜脚交| 色偷偷男人天堂| jizz国产精品| 欧美日韩一区高清| 免费看黄在线看| 幼a在线观看| 91影院在线观看| 国产日韩专区在线| 欧美 日韩 精品| 综合久久十次| 国产一区二区三区久久精品| 韩国三级与黑人| 亚洲日本在线观看视频| 亚洲va欧美va天堂v国产综合| 亚洲不卡一卡2卡三卡4卡5卡精品| 国产又粗又猛视频| 蜜桃av综合| 欧美激情国产高清| 潘金莲一级黄色片| 一区二区小说| 亚洲精品mp4| 真实乱偷全部视频| 成人日韩av| 日本精品视频一区二区| 免费人成自慰网站| caopon在线免费视频| 国产欧美一区二区精品性色超碰| 国产精品一区二区三区免费观看| 一二三区中文字幕| 日韩国产在线观看| 欧美一区在线直播| 日韩精品国产一区二区| 中文字幕一区二区三区乱码图片| 日韩在线中文视频| 性欧美精品男男| 杨幂一区二区三区免费看视频| 欧美v日韩v国产v| 一区二区三区国产好的精华液| 天然素人一区二区视频| 日本韩国精品在线| 日韩视频在线免费看| www.日韩| 91国偷自产一区二区使用方法| 免费成人在线视频网站| 黄色软件视频在线观看| 亚洲成人免费看| 欧美深夜福利视频| 韩国精品一区| 色综合视频在线观看| 免费av网址在线| 色婷婷综合久久久中字幕精品久久 | 精品视频在线一区二区| 最新成人av在线| 亚洲欧美日韩不卡| 色a资源在线| 亚洲国产视频一区二区| 黄色成人在线看| 九色porny视频在线观看| 欧美日韩精品中文字幕| 黄色a级片免费| yy6080久久伦理一区二区| 欧美日韩久久久一区| 激情五月婷婷基地| 精品久久国产一区| 亚洲国产欧美自拍| 欧美熟妇激情一区二区三区| 日韩欧美视频| 精品自在线视频| 欧美一级视频免费观看| 日本网站在线观看一区二区三区| 国产欧美日韩专区发布| 国产视频aaa| av网站一区二区三区| 久久另类ts人妖一区二区| 国产裸舞福利在线视频合集| 国产精品毛片大码女人| 国产欧美123| 亚洲欧洲日本韩国| 91精品国产色综合久久| 亚洲国产第一区| 91麻豆国产自产在线观看亚洲 | 校园春色 亚洲| 激情六月综合| 国产精品美女网站| 高潮毛片7777777毛片| 91在线观看一区二区| 亚洲国产另类久久久精品极度| 国产美女在线观看| 粉嫩av一区二区三区免费野| 日本超碰在线观看| 欧美亚洲国产日韩| 久久久999国产精品| 国产精品999在线观看| 蜜乳av一区二区| 国产麻豆日韩| 日本蜜桃在线观看| 欧美日韩国产一区在线| 午夜精品久久久久久久99热影院| 女同另类激情重口| 久久视频在线看| 区一区二在线观看| 成人免费高清视频在线观看| 亚洲欧美丝袜| 久久r热视频| 欧美mv日韩mv国产网站| 免费看一级黄色| 天堂午夜影视日韩欧美一区二区| 成人黄视频免费| 在线观看免费高清完整| 欧美性猛交xxxx免费看久久久| 在线免费黄色小视频| 俺要去色综合狠狠| 欧美在线视频观看| 日本高清视频www| 亚洲欧美一区二区三区国产精品 | 亚洲人a成www在线影院| 久久久久亚洲av成人片| 久久av中文字幕片| 五月天婷亚洲天综合网鲁鲁鲁| 国产中文在线播放| 精品国产亚洲在线| 欧美极品视频在线观看| 狠狠网亚洲精品| 亚洲国产日韩欧美| 亚洲成人va| 亚洲午夜激情免费视频| 圆产精品久久久久久久久久久| 夫妻av一区二区| 国产一区二区三区播放| 亚洲青青一区| 久久亚洲精品毛片| 国产黄色片网站| 亚洲精品视频在线观看免费| 污污网站免费观看| 久久精品不卡| 国产日本欧美一区二区三区| av资源在线观看免费高清| 色婷婷综合久色| 丰腴饱满的极品熟妇| 男女精品视频| 日韩av电影免费在线| 欧美大片1688| 亚洲一二三在线| 69xxxx国产| 日本一区二区三区在线观看| 免费看a级黄色片| 成久久久网站| 国产精品久久久久久久一区探花 | 亚洲丁香日韩| 日韩免费不卡av| 春暖花开成人亚洲区| 欧美性videosxxxxx| 欧美乱大交做爰xxxⅹ小说| 日本欧美在线看| 自拍偷拍99| 秋霞影院一区| 97视频免费观看| 毛片免费在线| 欧美老肥妇做.爰bbww| 亚洲二区在线播放| 国产成+人+日韩+欧美+亚洲| 青青青青在线视频| 小说区图片区色综合区| 国产成人精品日本亚洲| 欧美极品视频| 欧美成人性福生活免费看| 黄色片视频网站| 国产欧美日韩在线视频| 亚洲图片 自拍偷拍| 伊人影院久久| 日本一区二区免费看| 亚洲精品aaa| 久久久久日韩精品久久久男男| 三级黄视频在线观看| 欧美无砖专区一中文字| 久久久久久久久毛片| 久久众筹精品私拍模特| 中文av字幕在线观看| 亚洲视频狠狠| 亚洲成人在线视频网站| www.久久东京| 国产精品吊钟奶在线| 欧美大片黄色| 亚洲午夜性刺激影院| 国产片高清在线观看| 欧美视频在线看| 啪啪一区二区三区| www.成人网.com| 亚洲高清免费在线观看| 最新日韩在线| 一级做a爰片久久| 日韩人体视频| 999在线观看免费大全电视剧| 黑人巨大精品欧美一区二区桃花岛| 久久成人人人人精品欧| 国产高清在线看| 精品伦理精品一区| 一级黄色录像大片| 欧美视频免费在线| 久久久综合久久| 亚洲欧洲日韩一区二区三区| 草草地址线路①屁屁影院成人| 国产精品 日产精品 欧美精品| 国产性生交xxxxx免费| 国产主播一区| 手机在线视频你懂的| 欧美欧美黄在线二区| 国产厕所精品在线观看| 亚洲精品第一| 国产精品久久久久久久电影| 韩日毛片在线观看| 欧美成人精品一区二区三区| 午夜国产福利在线| 亚洲欧美一区二区激情| 免费a级片在线观看| 欧美一区日韩一区| 亚洲字幕av一区二区三区四区| 黑人巨大精品欧美一区二区| 国产在线成人精品午夜| 亚洲日本欧美天堂| 99精品全国免费观看| 久久蜜臀精品av| 亚洲精品视频大全| 风间由美性色一区二区三区| 欧美国产日韩在线视频| 久久99国产精品久久| 亚洲成色www.777999| 久久欧美肥婆一二区| 国产无套内射久久久国产| 亚洲视频www| 国产九九九九九| 亚洲激情欧美| 久久精品视频16| 99国产精品自拍| 99精品人妻少妇一区二区| 日韩视频精品在线观看| 欧美变态另类刺激| 国产精品毛片在线| 免费在线激情视频| 久久久国产亚洲精品| 91av俱乐部| 日本人妖一区二区| 在线黄色免费看| 国产成人午夜片在线观看高清观看| 日本女人黄色片| 高清视频一区二区| 亚洲黄色免费在线观看| 久久久三级国产网站| 亚洲黄色小说视频| 中文一区二区完整视频在线观看| 欧美巨胸大乳hitomi| 国产精品第一页第二页第三页| 免费看一级大片| 亚洲一区二区三区四区在线免费观看| 中文字幕第28页| 色婷婷精品久久二区二区蜜臀av| 亚洲图片欧美日韩| 7777精品伊人久久久大香线蕉的| av免费观看网址| 亚洲精品97久久| 99re热久久这里只有精品34| 久久久精品2019中文字幕神马| caoporn免费在线| 91精品国产色综合久久不卡98口| www.精品| 91丝袜美腿美女视频网站| 97久久综合精品久久久综合| 久久精品aaaaaa毛片| 日本久久综合| 日韩黄色片在线| 久久视频一区| 亚洲五月激情网| 91麻豆精东视频| 曰本女人与公拘交酡| 精品高清一区二区三区| 制服丝袜在线一区| 日韩欧美123| 国产日本在线| 欧美激情图片区| 欧美暴力调教| 国产精品毛片va一区二区三区| 国产精品入口久久| 免费看日b视频| 日本亚洲三级在线| av av在线| 国产精品欧美一区喷水| 日韩精品一卡二卡| 欧美日韩久久一区二区| 污污网站在线免费观看| www.日韩.com| 成人线上视频| 成人羞羞视频免费| 日韩毛片视频| 人妻熟妇乱又伦精品视频| 国产酒店精品激情| 亚洲国产天堂av| 午夜久久久影院| 99久久精品无免国产免费| 国产午夜精品一区二区三区| 日本h片在线观看| 成人av在线天堂| 精品久久不卡| 黄色免费视频大全| 丁香网亚洲国际| 91高清免费观看| 欧美日韩成人综合天天影院| 亚洲 欧美 激情 另类| 欧美成人自拍视频| 亚洲日本中文| 亚洲aⅴ天堂av在线电影软件| 亚洲在线免费| 国产精品一区二区无码对白| 亚洲精品国产无天堂网2021| 伊人网av在线| 在线视频亚洲欧美| 色戒汤唯在线观看| 国产精品一区免费观看| 午夜亚洲福利| 国内精品国产三级国产aⅴ久| 国产精品色在线观看| 日本黄色中文字幕| 亚洲人成在线播放| 亚洲淫成人影院| 久久影视中文粉嫩av| 国产日韩欧美三级| 久久人人爽人人爽人人片| 亚洲一区二区三区视频在线播放| 99久久精品国产色欲| 另类专区欧美制服同性| 国产精品1区在线| 国内外成人激情免费视频| 麻豆国产精品一区二区三区| 人妻少妇无码精品视频区| 在线日韩一区二区| 国产精品二线| 国产精品视频网站| 四虎成人精品永久免费av九九| 国产aaaaa毛片| 亚洲国产精品99久久久久久久久| 在线观看国产区| 社区色欧美激情 | 中文字幕综合| 久久av高潮av| 成人av在线资源| 欧美精品二区三区| 亚洲欧美另类自拍| 国精品产品一区| 亚洲AV无码成人精品一区| 国产在线观看一区二区| 青青草偷拍视频| 亚洲精品成人久久电影| 一二三四视频在线中文| 色综合视频二区偷拍在线| 2021国产在线| 亚洲欧美激情一区| 国产极品一区| 国产一二三四五| 高清不卡一区二区在线| 国产成人在线播放视频| 亚洲天堂第一页| 巨大黑人极品videos精品| 日本免费黄色小视频| 成人av电影在线观看| 免费无码国产精品| 久久精品色欧美aⅴ一区二区| 亚洲精品在线播放| 91国视频在线| 国产精品久久久久久久久免费丝袜 | av资源在线观看免费高清| 亚洲淫片在线视频| 国产精品腿扒开做爽爽爽挤奶网站| 国产毛片欧美毛片久久久| 欧美高清视频一二三区| cao在线视频| 亚洲精品一区二区毛豆| 国产成a人无v码亚洲福利| 无码一区二区三区| 欧美激情视频给我| 欧美色就是色| 亚洲av成人精品一区二区三区| 欧美综合久久久| 欧美1234区| 亚洲国产婷婷香蕉久久久久久99 | 精品人妻互换一区二区三区| 欧美日韩精品一区视频| 麻豆视频在线观看免费网站黄| 天天综合色天天综合色hd| 成人高清免费观看| 亚洲视频一区在线播放| 91精品国产高清久久久久久久久 | 少妇人妻无码专区视频| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲AV无码成人精品区明星换面| 欧美一级日韩不卡播放免费| 奇米777日韩|