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

Redis:內(nèi)存被我用完了!該怎么辦?

存儲 存儲軟件 Redis
Redis是一個內(nèi)存數(shù)據(jù)庫,當Redis使用的內(nèi)存超過物理內(nèi)存的限制后,內(nèi)存數(shù)據(jù)會和磁盤產(chǎn)生頻繁的交換,交換會導致Redis性能急劇下降。所以在生產(chǎn)環(huán)境中我們通過配置參數(shù)maxmemoey來限制使用的內(nèi)存大小。

[[378340]]

介紹

Redis是一個內(nèi)存數(shù)據(jù)庫,當Redis使用的內(nèi)存超過物理內(nèi)存的限制后,內(nèi)存數(shù)據(jù)會和磁盤產(chǎn)生頻繁的交換,交換會導致Redis性能急劇下降。所以在生產(chǎn)環(huán)境中我們通過配置參數(shù)maxmemoey來限制使用的內(nèi)存大小。

當實際使用的內(nèi)存超過maxmemoey后,Redis提供了如下幾種可選策略。

noeviction:寫請求返回錯誤

volatile-lru:使用lru算法刪除設置了過期時間的鍵值對 volatile-lfu:使用lfu算法刪除設置了過期時間的鍵值對 volatile-random:在設置了過期時間的鍵值對中隨機進行刪除 volatile-ttl:根據(jù)過期時間的先后進行刪除,越早過期的越先被刪除

allkeys-lru:在所有鍵值對中,使用lru算法進行刪除 allkeys-lfu:在所有鍵值對中,使用lfu算法進行刪除 allkeys-random:所有鍵值對中隨機刪除

我們來詳細了解一下lru和lfu算法,這是2個常見的緩存淘汰算法。「因為計算機緩存的容量是有限的,所以我們要刪除那些沒用的數(shù)據(jù),而這兩種算法的區(qū)別就是判定沒用的緯度不一樣。」

LRU算法

「lru(Least recently used,最近最少使用)算法,即最近訪問的數(shù)據(jù),后續(xù)很大概率還會被訪問到,即是有用的。而長時間未被訪問的數(shù)據(jù),應該被淘汰」

lru算法中數(shù)據(jù)會被放到一個鏈表中,鏈表的頭節(jié)點為最近被訪問的數(shù)據(jù),鏈表的尾節(jié)點為長時間沒有被訪問的數(shù)據(jù)

「lru算法的核心實現(xiàn)就是哈希表加雙向鏈表」。鏈表可以用來維護訪問元素的順序,而hash表可以幫我們在O(1)時間復雜度下訪問到元素。

「至于為什么是雙向鏈表呢」?主要是要刪除元素,所以要獲取前繼節(jié)點。數(shù)據(jù)結構圖示如下

使用雙向鏈表+HashMap

雙向鏈表節(jié)點定義如下

  1. public class ListNode<K, V> { 
  2.     K key
  3.     V value; 
  4.     ListNode pre; 
  5.     ListNode next
  6.  
  7.     public ListNode() {} 
  8.  
  9.     public ListNode(K key, V value) { 
  10.         this.key = key
  11.         this.value = value; 
  12.     } 

封裝雙向鏈表的常用操作

  1. public class DoubleList { 
  2.  
  3.     private ListNode head; 
  4.     private ListNode tail; 
  5.  
  6.     public DoubleList() { 
  7.         head = new ListNode(); 
  8.         tail = new ListNode(); 
  9.         head.next = tail; 
  10.         tail.pre = head; 
  11.     } 
  12.  
  13.     public void remove(ListNode node) { 
  14.         node.pre.next = node.next
  15.         node.next.pre = node.pre; 
  16.     } 
  17.  
  18.     public void addLast(ListNode node) { 
  19.         node.pre = tail.pre; 
  20.         tail.pre = node; 
  21.         node.pre.next = node; 
  22.         node.next = tail; 
  23.     } 
  24.  
  25.     public ListNode removeFirst() { 
  26.         if (head.next == tail) { 
  27.             return null
  28.         } 
  29.         ListNode first = head.next
  30.         remove(first); 
  31.         return first
  32.     } 

封裝一個緩存類,提供最基本的get和put方法。「需要注意,這兩種基本的方法都涉及到對兩種數(shù)據(jù)結構的修改」。

  1. public class MyLruCache<K, V> { 
  2.  
  3.     private int capacity; 
  4.     private DoubleList doubleList; 
  5.     private Map<K, ListNode> map; 
  6.  
  7.     public MyLruCache(int capacity) { 
  8.         this.capacity = capacity; 
  9.         map = new HashMap<>(); 
  10.         doubleList = new DoubleList(); 
  11.     } 
  12.  
  13.     public V get(Object key) { 
  14.         ListNode<K, V> node = map.get(key); 
  15.         if (node == null) { 
  16.             return null
  17.         } 
  18.         // 先刪除該節(jié)點,再接到尾部 
  19.         doubleList.remove(node); 
  20.         doubleList.addLast(node); 
  21.         return node.value; 
  22.     } 
  23.  
  24.     public void put(K key, V value) { 
  25.         // 直接調(diào)用這邊的get方法,如果存在,它會在get內(nèi)部被移動到尾巴,不用再移動一遍,直接修改值即可 
  26.         if ((get(key)) != null) { 
  27.             map.get(key).value = value; 
  28.             return
  29.         } 
  30.  
  31.         // 如果超出容量,把頭去掉 
  32.         if (map.size() == capacity) { 
  33.             ListNode listNode = doubleList.removeFirst(); 
  34.             map.remove(listNode.key); 
  35.         } 
  36.  
  37.         // 若不存在,new一個出來 
  38.         ListNode node = new ListNode(key, value); 
  39.         map.put(key, node); 
  40.         doubleList.addLast(node); 
  41.     } 

這里我們的實現(xiàn)為最近訪問的放在鏈表的尾節(jié)點,不經(jīng)常訪問的放在鏈表的頭節(jié)點

測試一波,輸出為鏈表的正序輸出(代碼為了簡潔沒有貼toString方法)

  1. MyLruCache<String, String> myLruCache = new MyLruCache<>(3); 
  2. // {5 : 5} 
  3. myLruCache.put("5""5"); 
  4. // {5 : 5}{3 : 3} 
  5. myLruCache.put("3""3"); 
  6. // {5 : 5}{3 : 3}{4 : 4} 
  7. myLruCache.put("4""4"); 
  8. // {3 : 3}{4 : 4}{2 : 2} 
  9. myLruCache.put("2""2"); 
  10. // {4 : 4}{2 : 2}{3 : 3} 
  11. myLruCache.get("3"); 

「因為LinkedHashMap的底層實現(xiàn)就是哈希表加雙向鏈表,所以你可以用LinkedHashMap替換HashMap和DoubleList來改寫一下上面的類」。

我來演示一下更騷的操作,只需要重寫一個構造函數(shù)和removeEldestEntry方法即可。

使用LinkedHashMap實現(xiàn)LRU

  1. public class LruCache<K, V> extends LinkedHashMap<K, V> { 
  2.  
  3.     private int cacheSize; 
  4.  
  5.  
  6.     public LruCache(int cacheSize) { 
  7.         /** 
  8.          * initialCapacity: 初始容量大小 
  9.          * loadFactor: 負載因子 
  10.          * accessOrder: false基于插入排序(默認),true基于訪問排序 
  11.          */ 
  12.         super(cacheSize, 0.75f, true); 
  13.         this.cacheSize = cacheSize; 
  14.     } 
  15.  
  16.     /** 
  17.      * 當調(diào)用put或者putAll方法時會調(diào)用如下方法,是否刪除最老的數(shù)據(jù),默認為false 
  18.      */ 
  19.     @Override 
  20.     protected boolean removeEldestEntry(Map.Entry<K, V> eldest) { 
  21.         return size() > cacheSize; 
  22.     } 

注意這個緩存并不是線程安全的,可以調(diào)用Collections.synchronizedMap方法返回線程安全的map

  1. LruCache<String, String> lruCache = new LruCache(3); 
  2. Map<String, String> safeMap = Collections.synchronizedMap(lruCache); 

Collections.synchronizedMap實現(xiàn)線程安全的方式很簡單,只是返回一個代理類。代理類對Map接口的所有方法加鎖

  1. public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) { 
  2.     return new SynchronizedMap<>(m); 

LFU算法

「LRU算法有一個問題,當一個長時間不被訪問的key,偶爾被訪問一下后,可能會造成一個比這個key訪問更頻繁的key被淘汰。」

即LRU算法對key的冷熱程度的判斷可能不準確。而LFU算法(Least Frequently Used,最不經(jīng)常使用)則是按照訪問頻率來判斷key的冷熱程度的,每次刪除的是一段時間內(nèi)訪問頻率較低的數(shù)據(jù),比LRU算法更準確。

使用3個hash表實現(xiàn)lfu算法

那么我們應該如何組織數(shù)據(jù)呢?

為了實現(xiàn)鍵值的對快速訪問,用一個map來保存鍵值對

  1. private HashMap<K, Integer> keyToFreq; 

還需要用一個map來保存鍵的訪問頻率

  1. private HashMap<K, Integer> keyToFreq; 

「當然你也可以把值和訪問頻率封裝到一個類中,用一個map來替代上述的2個map」

接下來就是最核心的部分,刪除訪問頻率最低的數(shù)據(jù)。

  • 為了能在O(1)時間復雜度內(nèi)找到訪問頻率最低的數(shù)據(jù),我們需要一個變量minFreq記錄訪問最低的頻率
  • 每個訪問頻率有可能對應多個鍵。當空間不夠用時,我們要刪除最早被訪問的數(shù)據(jù),所以需要如下數(shù)據(jù)結構,Map<頻率, 有序集合>。每次內(nèi)存不夠用時,刪除有序集合的第一個元素即可。并且這個有序集合要能快速刪除某個key,因為某個key被訪問后,需要從這個集合中刪除,加入freq+1對應的集合中
  • 有序集合很多,但是能滿足快速刪除某個key的只有set,但是set插入數(shù)據(jù)是無序的。「幸虧Java有LinkedHashSet這個類,鏈表和集合的結合體,鏈表不能快速刪除元素,但是能保證插入順序。集合內(nèi)部元素無序,但是能快速刪除元素,完美」

下面就是具體的實現(xiàn)。

  1. public class LfuCache<K, V> { 
  2.  
  3.     private HashMap<K, V> keyToVal; 
  4.     private HashMap<K, Integer> keyToFreq; 
  5.     private HashMap<Integer, LinkedHashSet<K>> freqTokeys; 
  6.  
  7.     private int minFreq; 
  8.     private int capacity; 
  9.  
  10.     public LfuCache(int capacity) { 
  11.         keyToVal = new HashMap<>(); 
  12.         keyToFreq = new HashMap<>(); 
  13.         freqTokeys = new HashMap<>(); 
  14.         this.capacity = capacity; 
  15.         this.minFreq = 0; 
  16.     } 
  17.  
  18.     public V get(K key) { 
  19.         V v = keyToVal.get(key); 
  20.         if (v == null) { 
  21.             return null
  22.         } 
  23.         increaseFrey(key); 
  24.         return v; 
  25.     } 
  26.  
  27.     public void put(K key, V value) { 
  28.         // get方法里面會增加頻次 
  29.         if (get(key) != null) { 
  30.             // 重新設置值 
  31.             keyToVal.put(key, value); 
  32.             return
  33.         } 
  34.  
  35.         // 超出容量,刪除頻率最低的key 
  36.         if (keyToVal.size() >= capacity) { 
  37.             removeMinFreqKey(); 
  38.         } 
  39.  
  40.         keyToVal.put(key, value); 
  41.         keyToFreq.put(key, 1); 
  42.         // key對應的value存在,返回存在的key 
  43.         // key對應的value不存在,添加key和value 
  44.         freqTokeys.putIfAbsent(1, new LinkedHashSet<>()); 
  45.         freqTokeys.get(1).add(key); 
  46.         this.minFreq = 1; 
  47.     } 
  48.  
  49.     // 刪除出現(xiàn)頻率最低的key 
  50.     private void removeMinFreqKey() { 
  51.         LinkedHashSet<K> keyList = freqTokeys.get(minFreq); 
  52.         K deleteKey = keyList.iterator().next(); 
  53.         keyList.remove(deleteKey); 
  54.         if (keyList.isEmpty()) { 
  55.             // 這里刪除元素后不需要重新設置minFreq 
  56.             // 因為put方法執(zhí)行完會將minFreq設置為1 
  57.             freqTokeys.remove(keyList); 
  58.         } 
  59.         keyToVal.remove(deleteKey); 
  60.         keyToFreq.remove(deleteKey); 
  61.     } 
  62.  
  63.     // 增加頻率 
  64.     private void increaseFrey(K key) { 
  65.         int freq = keyToFreq.get(key); 
  66.         keyToFreq.put(key, freq + 1); 
  67.         freqTokeys.get(freq).remove(key); 
  68.         freqTokeys.putIfAbsent(freq + 1, new LinkedHashSet<>()); 
  69.         freqTokeys.get(freq + 1).add(key); 
  70.         if (freqTokeys.get(freq).isEmpty()) { 
  71.             freqTokeys.remove(freq); 
  72.             // 最小頻率的set為空,key被移動到minFreq+1對應的set了 
  73.             // 所以minFreq也要加1 
  74.             if (freq == this.minFreq) { 
  75.                 this.minFreq++; 
  76.             } 
  77.         } 
  78.     } 

測試一下

  1. LfuCache<String, String> lfuCache = new LfuCache(2); 
  2. lfuCache.put("1""1"); 
  3. lfuCache.put("2""2"); 
  4. // 1 
  5. System.out.println(lfuCache.get("1")); 
  6. lfuCache.put("3""3"); 
  7. // 1的頻率為2,2和3的頻率為1,但2更早之前被訪問,所以被清除 
  8. // 結果為null 
  9. System.out.println(lfuCache.get("2")); 

 

責任編輯:武曉燕 來源: Java識堂
相關推薦

2024-11-11 00:00:06

MySQLID數(shù)據(jù)類型

2020-03-28 15:50:18

數(shù)據(jù)庫自增ID維護

2019-10-12 09:50:46

Redis內(nèi)存數(shù)據(jù)庫

2019-09-18 15:49:06

MySQL數(shù)據(jù)庫面試官

2023-10-17 09:41:04

自增主鍵MySQL

2021-04-13 10:41:25

Redis內(nèi)存數(shù)據(jù)庫

2021-03-17 10:55:14

Redis哈希數(shù)據(jù)庫

2022-04-24 08:23:19

Redis內(nèi)存淘汰策略

2022-04-22 10:30:07

框架JavaScript前端

2011-06-30 17:58:30

網(wǎng)站被K

2022-02-14 15:03:50

MySQL程序員面試

2021-03-13 14:04:43

Redis內(nèi)存策略

2020-03-18 19:00:29

電腦內(nèi)存不足系統(tǒng)

2010-11-17 11:06:34

跳槽

2018-08-20 19:39:14

區(qū)塊鏈職業(yè)崗位

2016-11-24 14:44:49

云計算

2010-05-20 16:08:01

亞馬遜故障

2024-10-09 17:06:52

RedisHash哈希表

2024-10-18 09:55:50

RedisHash數(shù)據(jù)

2019-04-15 10:45:37

點贊
收藏

51CTO技術棧公眾號

国产美女在线精品免费观看| www.久久久久| 日日碰狠狠躁久久躁婷婷| 猫咪在线永久网站| 国内欧美视频一区二区| 久久久久久国产精品久久| asian性开放少妇pics| 国产精品久久久久77777丨| 伊人开心综合网| 欧美日韩国产一二| 性中国古装videossex| 久久一区中文字幕| 欧美激情中文字幕乱码免费| 国产亚洲精品熟女国产成人| 视频亚洲一区二区| 在线免费视频一区二区| 999一区二区三区| caoporn国产精品免费视频| 国产精品综合网| 国产精品流白浆视频| 日本少妇吞精囗交| 91成人免费| 亚洲欧洲在线视频| 黄色国产在线视频| 亚洲免费资源| jizz亚洲少妇| 成人高清免费在线| 久久久影视传媒| 成人免费视频观看视频| 中文字幕一二区| 亚洲一区欧美激情| 久久久在线视频| 夫妻性生活毛片| 精品久久久久久久久久久下田| 欧美精品一区男女天堂| 日韩av影视大全| 成人一区视频| 日本精品一级二级| 国产精品50p| 成人性生交大片免费看在线播放| 综合欧美一区二区三区| 日韩亚洲视频| 日本大片在线观看| 99久久国产综合精品女不卡| 99理论电影网| www.国产精品视频| 国精产品一区一区三区mba视频| 国产91精品在线播放| 男人日女人网站| 国产亚洲一区在线| 91精品国产高清久久久久久| 欧美日韩在线视频免费| 亚洲综合自拍| 欧美成人精品xxx| 久久噜噜色综合一区二区| 日韩一级毛片| 精品国产欧美成人夜夜嗨| 蜜桃av免费在线观看| 第一会所亚洲原创| 日韩中文字幕在线| 国产精品视频一区二区三| 99热国内精品永久免费观看| www.欧美精品| 美国黄色小视频| 好吊视频一区二区三区四区| 欧美激情中文网| 国产成人愉拍精品久久| 麻豆成人在线| 国产精品久久久久久av下载红粉| 中文字幕二区三区| 精品亚洲aⅴ乱码一区二区三区| 91精品视频播放| 成人激情四射网| av男人天堂一区| 欧美激情视频一区二区三区| 国产裸舞福利在线视频合集| 日韩一区在线看| 成人在线国产视频| 91av亚洲| 91精品欧美福利在线观看| 美女被爆操网站| 极品国产人妖chinesets亚洲人妖| 亚洲精品久久在线| 91社区视频在线观看| 五月婷婷六月综合| 国外色69视频在线观看| 色老头在线视频| 国产精品自在欧美一区| 好吊色欧美一区二区三区| 国产美女视频一区二区三区| 亚洲女与黑人做爰| 日韩少妇内射免费播放18禁裸乳| 一呦二呦三呦精品国产| 欧美一区欧美二区| www.中文字幕av| 91tv官网精品成人亚洲| 91av在线不卡| 国产乱人乱偷精品视频a人人澡| 成人永久免费视频| 神马影院一区二区| 丁香花在线电影| 欧美日韩大陆一区二区| 水蜜桃av无码| 亚洲人metart人体| 热99精品只有里视频精品| 国产又大又黄的视频| 91色乱码一区二区三区| 欧美一级免费在线观看| 依依综合在线| 精品福利一区二区三区免费视频| 欧美aaa级片| 亚洲影音先锋| 国产精品青青草| 国产福利视频在线观看| 欧美中文字幕一二三区视频| 中文字幕一区二区三区乱码不卡| 色小子综合网| 国产成人精品久久| 少妇无码一区二区三区| 亚洲日本丝袜连裤袜办公室| 久久久久久久久久福利| 精品国产午夜肉伦伦影院| 欧美xxxx14xxxxx性爽| 在线观看亚洲一区二区| 久久品道一品道久久精品| 亚洲三区视频| 欧美free嫩15| 亚洲欧美激情四射在线日| 国产真实夫妇交换视频| 国产一区二区伦理| 一区二区三区国产福利| 日韩精品三区| 亚洲午夜精品久久久久久性色| 日本a在线观看| 成人午夜视频网站| 8x8ⅹ国产精品一区二区二区| 久久不卡日韩美女| 中文字幕九色91在线| 国产视频1区2区| 久久综合九色综合97婷婷| 成人黄色av片| 欧美激情影院| 38少妇精品导航| 午夜视频在线播放| 精品久久久久久久久久久久久久| 久久久久无码国产精品一区李宗瑞| 亚洲色图欧美| 91九色在线免费视频| 99视频免费在线观看| 日韩午夜激情av| 免费一级片在线观看| 国产成人免费在线| 男人添女人荫蒂免费视频| 国产精品丝袜在线播放| 97国产在线视频| 日本一区二区三区在线观看视频| 日韩欧美视频一区二区三区| 中文字幕高清视频| 日本亚洲视频在线| 亚洲啪啪av| 国产精品国产亚洲精品| 欧美黑人xxxx| 深夜福利在线观看直播| 色综合久久久久综合| 欧美波霸videosex极品| 久久精品国产精品亚洲精品| 大地资源第二页在线观看高清版| 欧美2区3区4区| 久久久久久久久久国产| 免费av在线电影| 欧美日韩国产高清一区二区 | 在线观看国产成人| 欧美国产一区在线| 欧美视频亚洲图片| 在线成人h网| 欧洲精品码一区二区三区免费看| 粉嫩91精品久久久久久久99蜜桃| 久久久精品影院| 欧美视频一二区| 91久久精品一区二区三区| 黑人操日本美女| www.欧美亚洲| 婷婷免费在线观看| 欧美网站在线| 青青草国产精品| 国产一区二区视频在线看| 91av在线播放视频| 国产成人无吗| 亚洲乱码av中文一区二区| 国产又粗又猛又黄| 午夜激情久久久| 999精品久久久| 99视频精品全部免费在线| www.激情小说.com| 在线电影一区| 亚洲一卡二卡| 美女午夜精品| 91久久精品一区二区别| 日日夜夜天天综合| 久久99精品视频一区97| 国产福利免费在线观看| 精品国产乱码久久久久久1区2区| 国产在线一级片| 午夜视频一区在线观看| 国产中文字幕久久| 久久久99精品久久| 日韩av无码一区二区三区不卡| 免费人成精品欧美精品| 日韩中文字幕在线视频观看 | 久久夜精品va视频免费观看| 色鬼7777久久| 精品久久久久久久人人人人传媒 | 狠狠操一区二区三区| 精品国偷自产在线| 国产福利在线| 国产视频亚洲视频| 亚洲乱码在线观看| 欧美精品久久一区| 天天爱天天做天天爽| 午夜视频在线观看一区二区| 老女人性淫交视频| 国产精品家庭影院| www.黄色在线| 2023国产精品视频| 性囗交免费视频观看| 国产高清在线精品| 久久久久久久高清| 美女网站一区二区| 久久人妻精品白浆国产| 国产亚洲一区在线| 久在线观看视频| 亚洲国产美女| 黄色三级中文字幕| 欧美精品入口| 日本福利视频在线观看| 无需播放器亚洲| 99re99热| 91精品国产乱码久久久久久久 | 99久久国产免费免费| 成人在线视频www| 91欧美精品午夜性色福利在线| 欧美91在线|欧美| 国产免费观看久久黄| 91久久久久久白丝白浆欲热蜜臀| 国产成人久久久精品一区| 免费观看欧美大片| 国产91精品网站| 91伊人久久| 成人免费大片黄在线播放| 91麻豆精品国产91久久久更新资源速度超快| 国产精品视频99| 欧美激情不卡| 亚洲一区二区在线| 亚洲综合影院| 国内成+人亚洲| 天天躁日日躁狠狠躁欧美| 另类视频在线观看+1080p| 精品美女视频| 亚洲成年人专区| 国产精品大片免费观看| 久久这里只有精品23| 国产情侣久久| 自拍偷拍 国产| 久久av中文字幕片| 国产调教打屁股xxxx网站| 成人国产亚洲欧美成人综合网| 99久久人妻无码中文字幕系列| 26uuu国产一区二区三区| 国产高清一区二区三区四区| 国产精品久久久久aaaa| 免费无遮挡无码永久在线观看视频| 亚洲午夜三级在线| www.久久久久久久| 3atv一区二区三区| 蜜桃91麻豆精品一二三区| 日韩精品中文字幕久久臀| 浮生影视网在线观看免费| 日韩视频在线一区| 欧美草逼视频| 日本午夜精品理论片a级appf发布| 国产一区二区三区影视| caoporen国产精品| 欧美美女一区| 黄色特一级视频| 日韩av午夜在线观看| 久久综合桃花网| 久久综合久久综合久久| 日本在线一级片| 色综合天天在线| 国产免费黄色网址| 亚洲免费一在线| av在线影院| 国产精品精品久久久久久| 日韩精品一区二区三区免费视频| 久久一区免费| 欧美在线看片| 99视频在线视频| www.av精品| 中国一级片在线观看| 欧美日韩国产在线| 97精品人妻一区二区三区在线 | 国产日韩在线精品av| 乱亲女h秽乱长久久久| 在线不卡日本| 三级欧美在线一区| 99热超碰在线| 亚洲少妇30p| 国产精品成人无码| 亚洲精品国产精品乱码不99按摩| 麻豆tv免费在线观看| 日本亚洲欧洲色| 成人在线视频你懂的| 亚洲一区二区精品在线| 美女黄网久久| 四虎精品一区二区| 亚洲蜜桃精久久久久久久| 无码人妻精品一区二区| 亚洲黄一区二区| 久草在线新免费首页资源站| 91九色国产在线| 日韩精品永久网址| 91看片就是不一样| 99精品视频一区二区| 欧美成人精品一区二区免费看片 | 精品久久久中文字幕人妻| 伊人一区二区三区久久精品| 涩涩涩视频在线观看| 国产精品制服诱惑| 欧美日韩国产色综合一二三四| 999在线观看| 国产精品久久久久久久岛一牛影视| 极品国产91在线网站| 精品视频久久久久久久| 超碰在线99| 国产综合av一区二区三区| 亚洲国产二区| 中国黄色片视频| 亚洲成人黄色影院| 丰满熟女一区二区三区| 欧美精品生活片| 视频在线观看免费影院欧美meiju| 国产精品美女在线播放| 久久精品免费观看| 任我爽在线视频| 91精品视频网| 性欧美ⅴideo另类hd| 99国产视频在线| 精品91在线| 精品人妻一区二区三区日产| 婷婷久久综合九色国产成人 | 亚洲日本免费电影| 在线视频不卡一区二区| 国内国产精品久久| 久久无码精品丰满人妻| 亚洲国产美女久久久久| 乱馆动漫1~6集在线观看| 欧美另类一区| 日韩国产精品久久| 三级影片在线观看| 欧美岛国在线观看| 国产va在线视频| 欧美日韩国产精品一卡| 美腿丝袜在线亚洲一区| 日韩在线中文字幕视频| 日韩亚洲欧美中文三级| a天堂资源在线| 欧美一区二区在线| 激情成人综合网| 免费又黄又爽又色的视频| 亚洲大胆美女视频| 新片速递亚洲合集欧美合集| 一本一道久久a久久精品综合 | 国产精品日韩一区二区| 亚洲综合不卡| 午夜激情福利电影| 欧美大片在线观看| 中国字幕a在线看韩国电影| 亚洲日本理论电影| 成人深夜视频在线观看| 一级一片免费看| 欧美精品性视频| 伊甸园亚洲一区| 日韩av加勒比| 精品福利在线观看| 精品孕妇一区二区三区| 国产一区免费在线| 日本特黄久久久高潮| 欧美毛片在线观看| 亚洲天堂网站在线观看视频| 精品一区91| 国产一级不卡毛片| 亚洲精品免费在线播放| 日韩二区三区| av成人观看| 日本免费新一区视频| 精品一区在线视频| 日韩在线欧美在线| 小说区图片区色综合区| 日本高清免费在线视频| 色综合视频一区二区三区高清|