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

MyBatis緩存你了解多少?會用嗎?

存儲 存儲軟件
我的mybatis bean是由spring 來管理的,已經屏蔽了sqlSession這個東西了?那怎么的一次操作才算是一次sqlSession呢?

[[416832]]

本文轉載自微信公眾號「三不猴子」,作者sanbuhouzi。轉載本文請聯系三不猴子公眾號。

MyBatis緩存你了解多少?會用嗎?

MyBatis緩存介紹

正如大多數持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持

  1. 一級緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲作用域為 Session,當 Session flush 或 close 之后,該Session中的所有 Cache 就將清空。
  2. 二級緩存與一級緩存其機制相同,默認也是采用 PerpetualCache,HashMap存儲,不同在于其存儲作用域為 Mapper(Namespace),并且可自定義存儲源,如 Ehcache。
  3. 對于緩存數據更新機制,當某一個作用域(一級緩存Session/二級緩存Namespaces)的進行了 C/U/D 操作后,默認該作用域下所有 select 中的緩存將被clear。

mybatis的相關概念

  1. SqlSession : 代表和數據庫的一次會話,向用戶提供了操作數據庫的方法。
  2. MappedStatement: 代表要發往數據庫執行的指令,可以理解為是Sql的抽象表示。
  3. Executor: 具體用來和數據庫交互的執行器,接受MappedStatement作為參數。
  4. 映射接口: 在接口中會要執行的Sql用一個方法來表示,具體的Sql寫在映射文件中。
  5. 映射文件: 可以理解為是Mybatis編寫Sql的地方,通常來說每一張單表都會對應著一個映射文件,在該文件中會定義Sql語句入參和出參的形式。

一級緩存

  • MyBatis的一級查詢緩存(也叫作本地緩存)是基于org.apache.ibatis.cache.impl.PerpetualCache 類的 HashMap本地緩存,其作用域是SqlSession
  • 在同一個SqlSession中兩次執行相同的 sql 查詢語句,第一次執行完畢后,會將查詢結果寫入到緩存中,第二次會從緩存中直接獲取數據,而不再到數據庫中進行查詢,這樣就減少了數據庫的訪問,從而提高查詢效率。
  • 當一個 SqlSession 結束后,該 SqlSession 中的一級查詢緩存也就不存在了。
  • myBatis 默認一級查詢緩存是開啟狀態,且不能關閉。
  • 增刪改會清空緩存,無論是否commit 當SqlSession關閉和提交時,會清空一級緩存

可能你會有疑惑,我的mybatis bean是由spring 來管理的,已經屏蔽了sqlSession這個東西了?那怎么的一次操作才算是一次sqlSession呢?

  • spring整合mybatis后,非事務環境下,每次操作數據庫都使用新的sqlSession對象。因此mybatis的一級緩存無法使用(一級緩存針對同一個sqlsession有效)
  • 在開啟事物的情況之下,spring使用threadLocal獲取當前資源綁定同一個sqlSession,因此此時一級緩存是有效的 在開啟以及緩存的時候查詢得到的對象是同一個對象。這種情況下會出現一個問題。我們先看一下代碼。
  1. public void listMybatisModel() { 
  2.         List<MybatisModel> mybatisModels = mapper.listMybatisModel(); 
  3.         List<MybatisModel> mybatisModelsOther = mapper.listMybatisModel(); 
  4.         System.out.println(mybatisModels == mybatisModelsOther); 
  5.         System.out.println("list count: " + mybatisModels.size()); 
  6.     } 
  1. System.out.println(mybatisModels == mybatisModelsOther); 

輸出結果竟然是true,這樣說來是同一個對象。會出現這種場景,第一次查出來的對象然后修改了,第二次查出來的就是修改后的對象。

一級緩存實現

對SqlSession的操作mybatis內部都是通過Executor來執行的。Executor的生命周期和SqlSession是一致的。Mybatis在Executor中創建了一級緩存,基于PerpetualCache 類的 HashMap

二級緩存

  • MyBatis的二級緩存是mapper范圍級別的
  • SqlSession關閉后才會將數據寫到二級緩存區域
  • 增刪改操作,無論是否進行提交commit(),均會清空一級、二級緩存
  • 二級緩存是默認開啟的。(想開啟就不必做任何配置)
  • 二級緩存會使用 Least Recently Used (LRU,最近最少使用的)算法來收回。
  • 根據時間表(如 no Flush Interval ,沒有刷新間隔),緩存不會以任何時間順序來刷新 。
  • 緩存會存儲集合或對象(無論查詢方法返回什么類型的值)的 1024 個引用。
  • 緩存會被視為 read/write (可讀/可寫)的,意味著對象檢索不是共享的,而且可以安全地被調用者修改,而不干擾其他調用者或線程所做的潛在修改 。

用下面這張圖描述一級緩存和二級緩存的關系。

配置二級緩存

在保證二級緩存的全局配置開啟的情況下,給某個xml開啟二級緩存只需要在xml中添加即可

  1. // mybatis-config.xml 中配置 
  2. <settings> 
  3.     默認值為 true。即二級緩存默認是開啟的 
  4.     <setting name="cacheEnabled" value="true"/> 
  5. </settings> 
  6.  
  7. // 具體mapper.xml 中配置 
  8. <mapper namespace="cn.itcast.mybatis.mapper.UserMapper"
  9.  <!-- 開啟本mapper的namespace下的二級緩存 
  10.  type:指定cache接口的實現類的類型,mybatis默認使用PerpetualCache 
  11.  要和ehcache整合,需要配置type為ehcache實現cache接口的類型--> 
  12.  
  13.  <cache /> 
  14.  
  15. </mapper> 

 

如果想要設置增刪改操作的時候不清空二級緩存的話,可以在其insert或delete或update中添加屬性flushCache=”false”,默認為 true。

  1. <delete id="deleteStudent" flushCache="false"
  2.     DELETE FROM user where id=#{id} 
  3. </delete

 

通過以下一些配置可以修改一些緩存參數。

  1. <cache 
  2.     eviction= "FIFO" 
  3.     flushlnterval="600000" 
  4.     size="512" 
  5.     readOnly="true" /> 

配置創建了一個FIFO緩存,并每隔 60 秒刷新一次,存儲集合或對象的512個引用, 而且返回的對象被認為是只讀的,因此在不同線程中的調用者之間修改它們會導致沖突。cache可以配置的屬性如下。eviction (收回策略)

LRU (最近最少使用的: 移除最長時間不被使用的對象,這是默認值 。FIFO (先進先出〉 :按對象進入緩存的順序來移除它們 。SOFT (軟引用) :移除基于垃圾回收器狀態和軟引用規則的對象 。WEAK (弱引用) :更積極地移除基于垃圾收集器狀態和弱引用規則的對象

  • flushinterval(刷新間隔)。可以被設置為任意的正整數,而且它們代表一個合理 的毫秒形式的時間段。默認情況不設置,即沒有刷新間隔,緩存僅僅在調用語句時刷新。
  • size (引用數目)。可以被設置為任意正整數,要記住緩存的對象數目和運行環境的可用內存資源數目。默認值是 1024 。
  • readOnly (只讀)。屬性可以被設置為 true 或 false 。只讀的緩存會給所有調用者 返回緩存對象的相同實例,因此這些對象不能被修改,這提供了很重要的性能優勢。可讀寫的緩存會通過序列化返回緩存對象的拷貝,這種方式會慢一些,但是安全,因此默認是false。

當只使用注解方式配置二級緩存時,如果在Mapper接口中,則需要增加如下配置 。

  1. @CacheNamespace ( 
  2. eviction = FifoCache.class , 
  3. flushinterval = 60000 , 
  4. size = 512 , 
  5. readWrite = true
  6. public interface Mapper { 
  7.      

括號內的內容是配置緩存屬性。

Mapper 接口和對應的 XML 文件是相同的命名空間,想使用二級緩存,兩者必須同時配置(如果接口不存在使用注解方式的方法,可以只在 XML 中配置〉,因此按照上面的方 式進行配置就會出錯 , 這個時候應該使用參照緩存。在 Mapper 接口中,參照緩存配置如下 。

  1. @CacheNarnespaceRef(RoleMapper.class) 
  2. public interface RoleMapper { 

因為想讓 RoleMapper 接口中的注解方法和 XML中的方法使用相同的緩存,因此使用參照緩存配置RoleMapper.class,這樣就會使用命名空間為xx.xxx.xxx.xxx.RoleMapper的緩存配置,即RoleMapper.xml 中配置的緩存 。Mapper 接口可以通過注解引用XML 映射文件或者其他接口的緩存,在 XML 中也可以配置參照緩存,如可以在 RoleMapper.xml 中進行如下修改 。

  1. <cache-ref narnespace="xxx.xxx.xxx.xxx.RoleMapper"/> 

這樣配置后XML 就會引用 Mapper 接口中配置的二級緩存,同樣可以避免同時配置二級緩存導致的沖突。MyBatis 中很少會同時使用 Mapper 接口注解方式和XML映射文件,所以參照緩存并不是為了解決這個問題而設計的。參照緩存除了能夠通過引用其他緩存減少配置外,主要的作用是解決臟讀。

MyBatis使用SerializedCache(org.apache.ibaits.cache.decorators.SerializedCache)序列化緩存來實現可讀寫緩存類,井通過序列化和反序列化來保證通過緩存獲取數據時,得到的是一個新的實例。因此,如果配置為只讀緩存,MyBatis就會使用Map來存儲緩存值,這種情況下,從緩存中獲取的對象就是同一個實例。因為使用可讀寫緩存,可以使用SerializedCache序列化緩存。這個緩存類要求所有被序列化的對象必須實現 Serializable (java.io.Serializable)接口 雖然使用序列化得到的對象都是不一樣的對象修改時都是互不影響,但是還是不安全的。

臟讀的產生

Mybatis的二級緩存是和命名空間綁定的,所以通常情況下每一個Mapper映射文件都有自己的二級緩存,不同的mapper的二級緩存互不影響。

  • 引起臟讀的操作通常發生在多表關聯操作中,比如在兩個不同的mapper中都涉及到同一個表的增刪改查操作,當其中一個mapper對這張表進行查詢操作,此時另一個mapper進行了更新操作刷新緩存,然后第一個mapper又查詢了一次,那么這次查詢出的數據是臟數據。出現臟讀的原因是他們的操作的緩存并不是同一個。

臟讀的避免

  • mapper中的操作以單表操作為主,避免在關聯操作中使用mapper
  • 使用參照緩存

集成EhCache緩存

  • 緩存數據有內存和磁盤兩級,無須擔心容量問題。
  • 緩存數據會在虛擬機重啟的過程中寫入磁盤。可以通過RMI、可插入API等方式進行分布式緩存。
  • 具有緩存和緩存管理器的偵昕接口。

支持多緩存管理器實例以及一個實例的多個緩存區域。

1. 添加項目依賴

  1. <dependency> 
  2.     <groupId>org.mybatis.caches</groupId> 
  3.     <artifactId>mybatis-ehcache</artifactId> 
  4.     <version>1.0.3</version> 
  5. </dependency> 

 

2. 配置 EhCache

在 src/main/resources 目錄下新增 ehcache.xml 文件。

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.     xsi:noNamespaceSchemaLocation="ehcache.xsd" 
  4.     updateCheck="false" monitoring="autodetect" 
  5.     dynamicConfig="true"
  6.      
  7.     <diskStore path="D:/cache" /> 
  8.              
  9.  <defaultCache       
  10.   maxElementsInMemory="3000"       
  11.   eternal="false"       
  12.   copyOnRead="true" 
  13.   copyOnWrite="true" 
  14.   timeToIdleSeconds="3600"       
  15.   timeToLiveSeconds="3600"       
  16.   overflowToDisk="true"       
  17.   diskPersistent="true"/>  
  18. </ehcache> 

 

有關EhCache的詳細配置可以參考地址 http://www.ehcache.org/ehcache.xml 中的內容。

  • copyOnRead 的含義是,判斷從緩存中讀取數據時是返回對象的引用還是復制一個對象返回。默認情況下是false,即返回數據的引用,這種情況下返回的都是相同的對象,和MyBatis默認緩存中的只讀對象是相同的。如果設置為 true ,那就是可讀寫緩存,每次讀取緩存時都會復制一個新的實例 。
  • copyOnWrite 的含義是 ,判斷寫入緩存時是直接緩存對象的引用還是復制一個對象然后緩存,默認也是false。如果想使用可讀寫緩存,就需要將這兩個屬性配置為true,如果使用只讀緩存,可以不配置這兩個屬性,使用默認值 false 即可 。
  • 修改Mapper.xml中的緩存配置 ehcache-cache 提供了如下 2 個可選的緩存實現。
  • org.mybatis.caches.ehcache.EhcacheCache
  • org.mybatis.caches.ehcache.LoggingEhcache 這個是帶日志的緩存。

在xml中添加

  1. <cache type ="org.mybatis.caches.ehcache.EhcacheCache" /> 

只通過設置 type 屬性就可 以使用 EhCache 緩存了,這時cache的其他屬性都不會起到任何作用,針對緩存的配置都在ehcache.xml中進行。在ehcache.xml配置文件中,只有一個默認的緩存配置,所以配置使用EhCache緩存的Mapper映射文件都會有一個以映射文件命名空間命名的緩存。如果想針對某一個命名空間進行配置,需要在 ehcache.xml 中添加一個和映射文件命名空間一致的緩存配置,例如針對RoleMapper可以進行如下配置。

  1. <cache       
  2.  name="tk.mybatis.simple.mapper.RoleMapper" 
  3.  maxElementsInMemory="3000"       
  4.  eternal="false"       
  5.  copyOnRead="true" 
  6.  copyOnWrite="true" 
  7.  timeToIdleSeconds="3600"       
  8.  timeToLiveSeconds="3600"       
  9.  overflowToDisk="true"       
  10.  diskPersistent="true"/> 

集成Redis緩存

添加依賴,目前只有bata版本。

  1.       <dependency> 
  2.  <groupId>org.mybatis.caches</groupId> 
  3.  <artifactId>mybatis-redis</artifactId> 
  4.  <version>1.0.0-beta2</version> 
  5. </dependency> 

 

配置Redis 使用 Redis 前,必須有一個 Redis 服務,有關Redis安裝啟動的相關內容,可參考如下地址中的官方文檔:https://redis.io/topics/quickstart。Redis服務啟動后,在src/main/resources 目錄下新增 redis.properties 文件 。

  1. host=localhost 
  2. port=6379 
  3. connectionTimeout=SOOO 
  4. soTimeout=SOOO 
  5. password
  6. database=O 
  7. clientName= 

修改mapper.xml中的配置。

  1. <mapper namespace = ” tk.mybat 工 s.s 工 mple.mapper.RoleMapper ” 〉 
  2. <cache type= "org.mybatis.caches.redis.RedisCache" /> 
  3. 〈 !一其他自己直一 〉 
  4. </mapper> 

 

 

配置依然很簡單, RedisCache 在保存緩存數據和獲取緩存數據時,使用了Java的序列化和反序列化,因此還需要保證被緩存的對象必須實現Serializable接口。改為RedisCache緩存配置后, testL2Cache 測試第一次執行時會全部成功,但是如果再次執行,就會出錯。這是因為Redis作為緩存服務器,它緩存的數據和程序(或測試)的啟動無關,Redis 的緩存并不會因為應用的關閉而失效。所以再次執行時沒有進行一次數據庫查詢,所有查詢都使用緩存,測試的第一部分代碼中的rolel和role2都是直接從二級緩存中獲取數據,因為是可讀寫緩存,所以不是相同的對象。當需要分布式部署應用時,如果使用MyBatis自帶緩存或基礎的EhCahca緩存,分布式應用會各自擁有自己的緩存,它們之間不會共享緩存 ,這種方式會消耗更多的服務器資源。如果使用類似 Redis 的緩存服務,就可以將分布式應用連接到同一個緩存服務器,實現分布式應用間的緩存共享 。

 

責任編輯:武曉燕 來源: 三不猴子
相關推薦

2019-11-12 14:40:43

CPU緩存內存

2025-08-06 08:53:35

2020-03-11 20:42:34

瀏覽器緩存機制

2020-03-25 08:47:22

智能邊緣邊緣計算網絡

2021-06-06 18:22:04

PprofGopher邏輯

2012-12-27 10:58:24

KVMKVM概念

2023-10-29 08:35:47

AndroidAOP編程

2023-10-25 08:17:06

Lite模式代理類

2022-06-07 07:37:40

線程進程開發

2019-08-07 17:18:18

云計算云原生函數

2022-02-08 12:06:12

云計算

2023-09-07 10:26:50

接口測試自動化測試

2011-08-23 11:03:35

ATM

2025-01-16 10:41:40

2021-12-09 07:47:58

Flink 提交模式

2020-12-10 09:00:00

開發.NET工具

2015-11-09 10:44:37

DevOpsIT運維

2023-08-17 10:12:04

前端整潔架構

2023-12-24 12:56:36

協程

2025-01-20 00:00:00

反射Java語言
點贊
收藏

51CTO技術棧公眾號

久久综合一区| 欧美一区二区网站| 欧美午夜精品久久久久免费视| 中文字幕在线欧美| 日韩欧美电影| 欧美一区二区美女| 亚洲欧洲日产国码无码久久99| 电影在线一区| 高清在线成人网| 国产999精品| 麻豆疯狂做受xxxx高潮视频| 蜜桃a∨噜噜一区二区三区| 777久久久精品| 国产二级片在线观看| 老司机在线永久免费观看| 99久久精品一区二区| 成人免费淫片视频软件| 成人午夜淫片100集| 91精品1区| 亚洲石原莉奈一区二区在线观看| 欧美日韩一区二区区| 欧洲av不卡| 亚洲国产精品久久一线不卡| 一本一本a久久| 美国一级片在线免费观看视频| 国产一区二区三区在线观看免费| 日本精品一区二区三区在线播放视频| 超碰手机在线观看| 日韩久久精品| 亚洲欧美制服综合另类| 少妇欧美激情一区二区三区| 欧洲一级精品| 欧美日韩国产中文字幕| 超薄肉色丝袜足j调教99| 男人的天堂在线| 成人福利视频网站| 91九色对白| 91片黄在线观看喷潮| 久久综合婷婷| 欧美最猛黑人xxxx黑人猛叫黄 | 久久九九99视频| 国产精品毛片一区视频| 国产高清在线免费| 久久爱www久久做| 日本亚洲欧洲色| 国产 日韩 欧美 在线| 亚洲性人人天天夜夜摸| 九九热r在线视频精品| 日本一级特级毛片视频| 久久香蕉国产| 精品国产自在精品国产浪潮| 丁香花五月婷婷| 日韩大片在线观看| 揄拍成人国产精品视频| 亚洲精品国产一区黑色丝袜| 少妇精品久久久| 亚洲天堂免费观看| 在线观看国产精品一区| 国产精品一区2区3区| 亚洲亚裔videos黑人hd| 中国免费黄色片| 色橹橹欧美在线观看视频高清| 亚洲国产高清福利视频| 精品国产91乱码一区二区三区| 日本亚洲导航| 国产毛片在线看| 日本一区二区三级电影在线观看| 日韩欧美激情一区二区| 午夜免费播放观看在线视频| 国产精品久久久久婷婷| 糖心vlog在线免费观看| 蜜桃av在线免费观看| 亚洲精品久久7777| 福利视频一区二区三区四区| 欧美卡一卡二| 亚洲超丰满肉感bbw| 你懂的av在线| 精品国模一区二区三区| 欧美妇女性影城| 中文字幕在线国产| 妖精视频一区二区三区| 色综合伊人色综合网| 日韩一区二区三区四区在线| 亚洲三级网站| 国产精品成人观看视频国产奇米| 中文字幕乱码人妻二区三区| 国产精品77777| 久久国产精品一区二区三区四区| 九九在线视频| 一区二区三区成人在线视频| 免费观看精品视频| 日韩亚洲国产免费| 亚洲国模精品私拍| 手机av在线不卡| 亚洲特级毛片| 国产精品久久久久久av福利软件| 国产女人18毛片水真多| 91热门视频在线观看| 天天综合五月天| 欧美一区久久久| 欧美不卡视频一区| 久久午夜福利电影| 亚洲香蕉网站| 国产精品久久一| 天天干在线观看| 中文字幕一区二区视频| 女人被男人躁得好爽免费视频| 自拍偷自拍亚洲精品被多人伦好爽 | 欧美一区二区三区四区高清| 亚洲精品女人久久久| 99精品全国免费观看视频软件| 97国产精品视频| 国产女人18毛片水18精| 欧美国产精品劲爆| 国产欧美日韩网站| 日本少妇精品亚洲第一区| 亚洲精品天天看| 国产无遮无挡120秒| 精油按摩中文字幕久久| 免费在线观看91| 久久电影网站| 日韩欧美美女一区二区三区| 69xxx免费| 视频在线观看一区| 成人av电影免费| 麻豆网站在线观看| 欧美性色aⅴ视频一区日韩精品| 99热超碰在线| 欧美深夜福利| 亚洲自拍小视频免费观看| h网站在线免费观看| 色综合天天狠狠| 国产伦精品一区三区精东| 欧美午夜不卡影院在线观看完整版免费| 国产精品日韩欧美大师| 国产在线网站| 在线免费观看成人短视频| 7788色淫网站小说| 99成人在线| 国产精品久久波多野结衣| 天堂成人av| 日韩一区二区免费高清| 91狠狠综合久久久| 国产伦精品一区二区三区免费| 亚洲欧洲精品在线观看| 欧美精选视频一区二区| 国产小视频国产精品| 天天操天天干天天摸| 久久精品日产第一区二区三区高清版| 美女福利视频在线| 久草成人在线| 国产精品久久久久久网站| 国产中文字幕在线观看| 欧美在线免费观看视频| 丁香花五月婷婷| 久久精品国产网站| 自拍偷拍一区二区三区| 日韩视频在线直播| 欧美精品videosex性欧美| 免费观看a视频| 午夜精品久久久久久不卡8050| 性久久久久久久久久久| 国产亚洲在线观看| 欧美中日韩免费视频| 成人福利一区二区| 久久午夜a级毛片| 亚洲第一页视频| 丁香五六月婷婷久久激情| 欧美做受xxxxxⅹ性视频| 奇米色一区二区| 性生活免费观看视频| 第一区第二区在线| 日本中文字幕成人| 免费的黄网站在线观看| 欧美xxxxxxxx| 国产欧美一区二区三区在线看蜜臂| 久久一区二区视频| 三级一区二区三区| 国语精品一区| 视频一区二区三区免费观看| 最新亚洲国产| 欧美亚洲国产成人精品| 日本中文字幕在线2020| 欧美大片免费久久精品三p| 日韩精品在线不卡| 国产精品嫩草99a| 日本三级日本三级日本三级极| 久久久久久穴| 日韩久久久久久久久久久久| 妖精视频一区二区三区| 91免费在线视频网站| 麻豆免费在线| 两个人的视频www国产精品| 青青色在线视频| 91精品国产乱码久久蜜臀| 在线观看国产亚洲| 自拍偷自拍亚洲精品播放| 日本黄色免费观看| 久草热8精品视频在线观看| 青青青国产在线观看| 99久久婷婷| 日本一区二区三区四区在线观看| 亚洲**毛片| 国产精品揄拍500视频| 韩日毛片在线观看| 久久精品国产91精品亚洲| 天天射天天操天天干| 3751色影院一区二区三区| 精品美女久久久久| 亚洲一区在线观看视频| 亚洲不卡的av| www国产精品av| av不卡中文字幕| 韩国一区二区三区| 欧美婷婷精品激情| 久久av最新网址| 色欲色香天天天综合网www| 亚洲激情久久| 亚洲精品日韩在线观看| 亚洲福利天堂| 国产主播一区二区三区四区| 国产精品一区三区在线观看| 国产精品福利观看| 亚洲精品一区| 2019亚洲日韩新视频| tube8在线hd| 欧美老女人性生活| 成a人片在线观看| 色七七影院综合| 在线观看黄av| 色阁综合伊人av| 啊v在线视频| 一本大道亚洲视频| 美女毛片在线看| 亚洲天堂av在线播放| 三级毛片在线免费看| 亚洲精品久久视频| 色婷婷视频在线| 亚洲第一精品福利| 性感美女一级片| 日韩精品视频观看| 色综合888| 精品无码久久久久久国产| 无码精品在线观看| 精品视频在线播放免| 三级在线电影| 一区二区三区精品99久久| 大片免费播放在线视频| 中文字幕久久亚洲| 天堂地址在线www| 久久精品国产亚洲7777| 亚洲第一图区| 欧美精品999| 天天综合av| 国产精品成人aaaaa网站| 成人日韩av| 2014亚洲精品| 欧美freesex8一10精品| 九九九九久久久久| 国产精品片aa在线观看| 亚洲欧美日韩精品综合在线观看| 色偷偷综合网| 青青草综合在线| 夜久久久久久| www黄色在线| 国产在线播放一区三区四| 91精品人妻一区二区三区蜜桃2| 不卡视频免费播放| 中日韩精品一区二区三区| 亚洲国产精品ⅴa在线观看| 波多野结衣久久久久| 亚洲精品美国一| 成人免费看片98欧美| 欧美午夜一区二区三区| 国产情侣在线播放| 日韩电影在线观看中文字幕| 国产69精品久久app免费版| www.日韩av.com| 国产亚av手机在线观看| 日韩av不卡在线| 国产一区二区三区视频在线 | 亚洲第一福利专区| 少妇免费毛片久久久久久久久 | 欧美日韩国产精品激情在线播放| 日韩av电影一区| 日本成人在线免费| 国产午夜一区二区三区| 成年人av电影| 色综合久久综合网| 99久久精品免费看国产交换| 精品视频久久久久久久| 51xtv成人影院| 国产成人精品av在线| 欧美高清hd| 色姑娘综合网| 亚洲国产一区二区三区高清| mm1313亚洲国产精品无码试看| 国产精品99久久久久久似苏梦涵| 国产三级国产精品| 伊人婷婷欧美激情| 看黄色一级大片| 亚洲第一偷拍网| 黄色免费网站在线观看| 热久久99这里有精品| 9l亚洲国产成人精品一区二三 | 尤物网在线观看| 69视频在线播放| 日韩精品免费视频一区二区三区| 欧美日韩精品免费观看| 亚洲无线一线二线三线区别av| 一路向西2在线观看| 26uuu国产日韩综合| 久久免费公开视频| 欧美精品一二三| 国产在线一二| …久久精品99久久香蕉国产| 精品三级国产| 在线视频91| 日韩成人一级大片| 久久久久久久久免费看无码 | 国产精品秘入口18禁麻豆免会员| 国产一区二区电影| 蜜桃av免费观看| 91黄视频在线| 男操女在线观看| 午夜精品一区二区三区视频免费看 | 欧美视频第一页| 天堂av手机版| 91精品国产色综合久久不卡98口 | 另类人妖一区二区av| 中文字幕一区二区人妻在线不卡| 亚洲福利一区二区三区| 亚洲精品97久久中文字幕无码| 久久精品最新地址| 亚洲伦理网站| 亚洲一区二区高清视频| 秋霞国产午夜精品免费视频| 在线观看国产精品一区| 欧洲激情一区二区| 国产一二在线观看| 国产精品美女www| 91视频久久| 国产精品久久久久久9999| 亚洲免费av高清| 国产又爽又黄又嫩又猛又粗| 久久精品国产v日韩v亚洲| 国产成人久久精品一区二区三区| 免费观看黄色大片| 国产激情91久久精品导航| 成人观看免费视频| 精品国产91洋老外米糕| 黄视频网站在线观看| 久热这里只精品99re8久| 久久精品午夜| 欧美性猛交xxxx乱大交少妇| 制服视频三区第一页精品| 18视频在线观看| 国产精品一区二| 亚洲一区欧美二区| 中文字幕免费在线看线人动作大片| 精品视频在线免费看| 国产网站在线免费观看| 国产91精品入口17c| 国产日韩欧美| 成人黄色免费网址| 欧美一区国产二区| 9999精品成人免费毛片在线看| 久久艳妇乳肉豪妇荡乳av| 欧美a级理论片| 波多野结衣不卡视频| 亚洲成人精品视频| 自由日本语热亚洲人| 亚洲欧美99| 岛国精品一区二区| 中文字幕黄色片| 日韩在线观看免费高清完整版| 日韩欧美一级| 无码人妻丰满熟妇区毛片| 亚洲私人黄色宅男| 亚洲欧美日韩动漫| 国产精品入口免费视| 欧美三区在线| 97人妻人人揉人人躁人人| 91精品国产色综合久久ai换脸| 国产激情在线播放| 成人短视频在线看| 99riav久久精品riav| 91久久久久久久久久久久| 97成人超碰免| 性xxxx欧美老肥妇牲乱| 国产精品无码一区二区三| 欧美日韩精品系列| 免费在线小视频| 丰满女人性猛交| 久久久久国产精品麻豆| 午夜精品一区二区三| 国产精品吹潮在线观看| 在线不卡欧美| 日韩欧美123区| 亚洲欧美激情精品一区二区|