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

Redis內存滿了怎么辦?讓你玩懂8種內存淘汰策略

存儲 存儲軟件 Redis
我們知道redis是一個非常常用的內存型數據庫,數據從內存中讀取是它非常高效的原因之一,那么但是如果有一天,「redis分配的內存滿了怎么辦」?

 [[387389]]

本文轉載自微信公眾號「moon聊技術」,作者moon聊技術。轉載本文請聯系moon聊技術公眾號。

簡介

我們知道redis是一個非常常用的內存型數據庫,數據從內存中讀取是它非常高效的原因之一,那么但是如果有一天,「redis分配的內存滿了怎么辦」?遇到這個面試題不要慌,這種問題我們分為兩角度回答就可以:

  • 「redis會怎么做」?
  • 「我們可以怎么做」?

增加redis可用內存

這種方法很暴力,也很好用,我們直接通過增加redis的可用內存就可以了, 有兩種方式

「通過配置文件配置」

  1. //設置redis最大占用內存大小為1000M   
  2. maxmemory 1000mb  

通過在redis安裝目錄下面的redis.conf配置文件中添加以下配置設置內存大小

「通過命令修改」

  1. //設置redis最大占用內存大小為1000M   
  2. 127.0.0.1:6379> config set maxmemory 1000mb   
  • redis支持運行時通過命令動態修改內存大小

這種方法是立竿見影的,reids 內存總歸受限于機器的內存,也不能無限制的增長,那么如果沒有辦法再增加 redis 的可用內存怎么辦呢?

內存淘汰策略

實際上Redis定義了「8種內存淘汰策略」用來處理redis內存滿的情況:

1.noeviction:直接返回錯誤,不淘汰任何已經存在的redis鍵

2.allkeys-lru:所有的鍵使用lru算法進行淘汰

3.volatile-lru:有過期時間的使用lru算法進行淘汰

4.allkeys-random:隨機刪除redis鍵

5.volatile-random:隨機刪除有過期時間的redis鍵

6.volatile-ttl:刪除快過期的redis鍵

7.volatile-lfu:根據lfu算法從有過期時間的鍵刪除

8.allkeys-lfu:根據lfu算法從所有鍵刪除

這些內存淘汰策略都很好理解,我們著重講解一下lru,lfu,ttl是怎么去實現的

lru的最佳實踐?

lru是Least Recently Used的縮寫,也就是「最近很少使用」,也可以理解成最久沒有使用。最近剛剛使用過的,后面接著會用到的概率也就越大。由于內存是非常金貴的,導致我們可以存儲在緩存當中的數據是有限的。比如說我們固定只能存儲1w條,當內存滿了之后,緩存每插入一條新數據,都要拋棄一條最長沒有使用的舊數據。我們把上面的內容整理一下,可以得到幾點要求:

  • 「1.保證其的讀寫效率,比如讀寫的復雜度都是O(1)」
  • 「2.當一條數據被讀取,將它最近使用的時間更新」
  • 「3.當插入一條新數據的時候,刪除最久沒有使用過的數據」

所以我們要盡可能的保證查詢效率很高,插入效率很高,我們知道如果只考慮查詢效率,那么hash表可能就是最優的選擇,如果只考慮插入效率,那么鏈表必定有它的一席之地。

但是這兩種數據結構單獨使用,都有它的弊端,那么說,有沒有一種數據結構,既能夠保證查詢效率,又能夠保證插入效率呢?于是 hash+鏈表這種結構出現了

hash表用來查詢在鏈表中的數據位置,鏈表負責數據的插入 當新數據插入到鏈表頭部時有兩種情況;

  • 1.當鏈表滿的時候,將鏈表尾部的數據丟棄。
    • 這個比較簡單,直接將鏈表尾部指針抹去,并且清除對應hash中的信息就好了
  • 2.每當緩存命中(即緩存數據被訪問),則將數據移到鏈表頭部;
    • 這種情況我們發現,如果命中到鏈表中間節點,我們需要做的是
    • 1).將該節點移到頭節點
    • 2).「將該節點的上一個節點的下一個節點,設置為該節點的下一個節點」,這里就會有一個問題,我們無法找到該節點的上一個節點,因為是單向鏈表,所以,新的模型產生了。

這時雙向鏈表的作用也提現出來了。能直接定位到父節點。這效率就很高了。而且由于雙向鏈表有尾指針,所以剔除最后的尾節點也十分方便,快捷

所以最終的解決方案就是采用「哈希表+雙向鏈表」的結構

lfu的最佳實踐?

LFU:Least Frequently Used,最不經常使用策略,在一段時間內,數據被「使用頻次最少」的,優先被淘汰。最少使用(LFU)是一種用于管理計算機內存的緩存算法。主要是記錄和追蹤內存塊的使用次數,當緩存已滿并且需要更多空間時,系統將以最低內存塊使用頻率清除內存.采用LFU算法的最簡單方法是為每個加載到緩存的塊分配一個計數器。每次引用該塊時,計數器將增加一。當緩存達到容量并有一個新的內存塊等待插入時,系統將搜索計數器最低的塊并將其從緩存中刪除。

這里我們提出一種達到 O(1) 時間復雜度的 LFU 實現方案,它支持的操作包括插入、訪問以及刪除

如圖:

由兩個雙向鏈表+哈希表組成,上方的雙向鏈表用來計數,下方的雙向鏈表用來記錄存儲的數據,該鏈表的頭節點存儲了數字,哈希表的value對象記錄下方雙向鏈表的數據 我們這里按照插入的流程走一遍:

  • 將需要存儲的數據插入
  • 在hash表中「存在」,找到對應的下方雙向鏈表,將該節點的上一個節點和該節點的下一個節點相連(這里可能只有自己,直接移除就好),然后判斷自己所在上方雙向鏈表的計數是否比當前計數大1
    • 「如果是」,則將自己移到該上方雙向鏈表,并且「判斷該雙向鏈表下是否還有元素」,如果沒有,則要刪除該節點
    • 「如果不是或者該上方雙向列表無下個節點」則新加節點,將計數設為當前計數+1
  • 在hash表「不存在」,將數據存入hash表,將數據與雙向鏈表的頭節點相連(這里有可能鏈表未初始化)

這樣當查找,插入時效率都為O(1)

redis TTL 是怎么實現的?

TTL存儲的數據結構

redis針對TTL時間有專門的dict進行存儲,就是redisDb當中的dict *expires字段,dict顧名思義就是一個hashtable,key為對應的rediskey,value為對應的TTL時間。?dict的數據結構中含有2個dictht對象,主要是為了解決hash沖突過程中重新hash數據使用。

TTL 設置過期時間

TTL設置key過期時間的方法主要是下面4個:

  • expire 按照相對時間且以秒為單位的過期策略
  • expireat 按照絕對時間且以秒為單位的過期策略
  • pexpire 按照相對時間且以毫秒為單位的過期策略
  • pexpireat 按照絕對時間且以毫秒為單位的過期策略
  1. {"expire",expireCommand,3,"w",0,NULL,1,1,1,0,0}, 
  2. {"expireat",expireatCommand,3,"w",0,NULL,1,1,1,0,0}, 
  3. {"pexpire",pexpireCommand,3,"w",0,NULL,1,1,1,0,0}, 
  4. {"pexpireat",pexpireatCommand,3,"w",0,NULL,1,1,1,0,0}, 

expire expireat pexpire pexpireat

從實際設置過期時間的實現函數來看,相對時間的策略會有一個當前時間作為基準時間,絕對時間的策略會「以0作為一個基準時間」。

  1. void expireCommand(redisClient *c) { 
  2.     expireGenericCommand(c,mstime(),UNIT_SECONDS); 
  3.  
  4. void expireatCommand(redisClient *c) { 
  5.     expireGenericCommand(c,0,UNIT_SECONDS); 
  6.  
  7. void pexpireCommand(redisClient *c) { 
  8.     expireGenericCommand(c,mstime(),UNIT_MILLISECONDS); 
  9.  
  10. void pexpireatCommand(redisClient *c) { 
  11.     expireGenericCommand(c,0,UNIT_MILLISECONDS); 

整個過期時間最后都會換算到絕對時間進行存儲,通過公式基準時間+過期時間來進行計算。?對于相對時間而言基準時間就是當前時間,對于絕對時間而言相對時間就是0。?中途考慮設置的過期時間是否已經過期,如果已經過期那么在master就會刪除該數據并同步刪除動作到slave。?正常的設置過期時間是通過setExpire方法保存到 dict *expires對象當中。

  1. /*  
  2. * 這個函數是 EXPIRE 、 PEXPIRE 、 EXPIREAT 和 PEXPIREAT 命令的底層實現函數。 
  3. * 命令的第二個參數可能是絕對值,也可能是相對值。 
  4. * 當執行 *AT 命令時, basetime 為 0 ,在其他情況下,它保存的就是當前的絕對時間。 
  5. * unit 用于指定 argv[2] (傳入過期時間)的格式, 
  6. * 它可以是 UNIT_SECONDS 或 UNIT_MILLISECONDS , 
  7. * basetime 參數則總是毫秒格式的。 
  8. */ 
  9. void expireGenericCommand(redisClient *c, long long basetime, int unit) { 
  10.    robj *key = c->argv[1], *param = c->argv[2]; 
  11.    long long when; /* unix time in milliseconds when the key will expire. */ 
  12.  
  13.    // 取出 when 參數 
  14.    if (getLongLongFromObjectOrReply(c, param, &whenNULL) != REDIS_OK) 
  15.        return
  16.  
  17.    // 如果傳入的過期時間是以秒為單位的,那么將它轉換為毫秒 
  18.    if (unit == UNIT_SECONDS) when *= 1000; 
  19.    when += basetime; 
  20.  
  21.    /* No keyreturn zero. */ 
  22.    // 取出鍵 
  23.    if (lookupKeyRead(c->db,key) == NULL) { 
  24.        addReply(c,shared.czero); 
  25.        return
  26.    } 
  27.  
  28.    /*  
  29.     * 在載入數據時,或者服務器為附屬節點時, 
  30.     * 即使 EXPIRE 的 TTL 為負數,或者 EXPIREAT 提供的時間戳已經過期, 
  31.     * 服務器也不會主動刪除這個鍵,而是等待主節點發來顯式的 DEL 命令。 
  32.     * 
  33.     * 程序會繼續將(一個可能已經過期的 TTL)設置為鍵的過期時間, 
  34.     * 并且等待主節點發來 DEL 命令。 
  35.     */ 
  36.    if (when <= mstime() && !server.loading && !server.masterhost) { 
  37.  
  38.        // when 提供的時間已經過期,服務器為主節點,并且沒在載入數據 
  39.  
  40.        robj *aux; 
  41.  
  42.        redisAssertWithInfo(c,key,dbDelete(c->db,key)); 
  43.        server.dirty++; 
  44.  
  45.        /* Replicate/AOF this as an explicit DEL. */ 
  46.        // 傳播 DEL 命令 
  47.        aux = createStringObject("DEL",3); 
  48.  
  49.        rewriteClientCommandVector(c,2,aux,key); 
  50.        decrRefCount(aux); 
  51.  
  52.        signalModifiedKey(c->db,key); 
  53.        notifyKeyspaceEvent(REDIS_NOTIFY_GENERIC,"del",key,c->db->id); 
  54.  
  55.        addReply(c, shared.cone); 
  56.  
  57.        return
  58.    } else { 
  59.  
  60.        // 設置鍵的過期時間 
  61.        // 如果服務器為附屬節點,或者服務器正在載入, 
  62.        // 那么這個 when 有可能已經過期的 
  63.        setExpire(c->db,key,when); 
  64.  
  65.        addReply(c,shared.cone); 
  66.  
  67.        signalModifiedKey(c->db,key); 
  68.        notifyKeyspaceEvent(REDIS_NOTIFY_GENERIC,"expire",key,c->db->id); 
  69.  
  70.        server.dirty++; 
  71.  
  72.        return
  73.    } 
  74.  
  75.  setExpire函數主要是對db->expires中的key對應的dictEntry設置過期時間。 
  76.  
  77. /* 
  78. * 將鍵 key 的過期時間設為 when 
  79. */ 
  80. void setExpire(redisDb *db, robj *key, long long when) { 
  81.  
  82.    dictEntry *kde, *de; 
  83.  
  84.    /* Reuse the sds from the main dict in the expire dict */ 
  85.    // 取出鍵 
  86.    kde = dictFind(db->dict,key->ptr); 
  87.  
  88.    redisAssertWithInfo(NULL,key,kde != NULL); 
  89.  
  90.    // 根據鍵取出鍵的過期時間 
  91.    de = dictReplaceRaw(db->expires,dictGetKey(kde)); 
  92.  
  93.    // 設置鍵的過期時間 
  94.    // 這里是直接使用整數值來保存過期時間,不是用 INT 編碼的 String 對象 
  95.    dictSetSignedIntegerVal(de,when); 

redis什么時候執行淘汰策略?

在redis種有三種刪除的操作此策略

  • 定時刪除:對于設有過期時間的key,時間到了,定時器任務立即執行刪除
    • 因為要維護一個定時器,所以就會占用cpu資源,尤其是有過期時間的redis鍵越來越多損耗的性能就會線性上升
  • 惰性刪除:每次只有再訪問key的時候,才會檢查key的過期時間,若是已經過期了就執行刪除。
    • 這種情況只有在訪問的時候才會刪除,所以有可能有些過期的redis鍵一直不會被訪問,就會一直占用redis內存
  • 定期刪除:每隔一段時間,就會檢查刪除掉過期的key。
    • 這種方案相當于上述兩種方案的折中,通過最合理控制刪除的時間間隔來刪除key,減少對cpu的資源的占用消耗,使刪除操作合理化。

巨人的肩膀

https://www.jianshu.com/p/53083f5f2ddc https://zhuanlan.zhihu.com/p/265597517

 

責任編輯:武曉燕 來源: moon聊技術
相關推薦

2019-10-12 09:50:46

Redis內存數據庫

2021-04-13 10:41:25

Redis內存數據庫

2022-04-24 08:23:19

Redis內存淘汰策略

2020-07-17 21:15:08

Redis內存數據庫

2024-10-08 10:13:17

2023-10-16 23:57:35

Redis內存

2021-01-26 08:02:04

Redis內存數據庫

2023-10-26 07:13:14

Redis內存淘汰

2020-03-18 19:00:29

電腦內存不足系統

2024-09-03 09:20:45

2022-07-01 14:20:49

Redis策略函數

2021-09-10 18:47:22

Redis淘汰策略

2019-04-10 10:43:15

Redis內存淘汰策略

2021-10-30 19:01:17

磁盤字節文件

2011-07-28 13:45:06

2023-03-14 11:00:05

過期策略Redis

2020-03-06 15:36:01

Redis內存宕機

2017-05-31 12:52:55

大數據數據文件解決思路

2021-03-10 10:40:04

Redis命令Linux

2020-12-03 06:18:04

磁盤Docker容器
點贊
收藏

51CTO技術棧公眾號

欧美日韩一级黄色片| 亚洲视频 中文字幕| 日韩子在线观看| 国产iv一区二区三区| 91精品国产91久久久久久久久| av2014天堂网| 欧洲亚洲精品久久久久| 亚洲国产日韩a在线播放性色| 蜜桃传媒视频麻豆一区 | 一级毛片视频在线| 成人在线视频一区二区| 国产精品视频免费在线观看| 久久久久黄色片| 青青草97国产精品麻豆| 亚洲精品一区二区三区在线观看| 北条麻妃在线视频| 男女视频在线| 国产精品免费久久| 久久99精品久久久久久水蜜桃| 伊人亚洲综合网| 亚洲精品系列| 久久99国产精品自在自在app| 丰腴饱满的极品熟妇| 亚洲伊人影院| 在线不卡a资源高清| 男女午夜激情视频| 9999精品成人免费毛片在线看| 国产精品福利一区二区三区| 青青草成人激情在线| 成人午夜视频一区二区播放| 久久www免费人成看片高清| 2019中文字幕免费视频| 久久av高潮av无码av喷吹| 日韩在线高清| 亚洲天堂免费视频| 亚洲最大的黄色网| 成人高潮a毛片免费观看网站| 91精品国产一区二区| 五月婷婷丁香综合网| 韩日成人影院| 午夜激情一区二区三区| 人人妻人人澡人人爽欧美一区| 欧美激情午夜| 国产精品国产成人国产三级| 日韩欧美亚洲区| 国内av一区二区三区| 99视频超级精品| 国产91社区| 国产黄色一区二区| 国产精品一区二区黑丝| 亚洲影院色无极综合| 91丨九色丨丰满| 激情伊人五月天久久综合| 国产色婷婷国产综合在线理论片a| 中文字幕在线天堂| 噜噜噜91成人网| 欧美在线欧美在线| 亚洲 欧美 日韩 综合| 亚洲深爱激情| 欧洲成人午夜免费大片| 欧美日韩一二三四区| 国产精品嫩草99av在线| 青青在线视频一区二区三区| 中文字幕激情小说| 媚黑女一区二区| 国产精品777| 九九热最新视频| 日本aⅴ精品一区二区三区| 国产福利视频一区| 一级黄色免费片| 激情图片小说一区| 99re视频在线| 天天干天天色天天| 久久久另类综合| 亚洲欧美电影在线观看| 国产淫片在线观看| 亚洲在线视频一区| 黄色影院一级片| 九色成人搞黄网站| 欧美一区日本一区韩国一区| 国产精品欧美性爱| 一区二区三区视频免费观看| 中文字幕无线精品亚洲乱码一区 | 伊人色综合久久天天人手人婷| 欧美视频在线第一页| www.综合| 欧美色图一区二区三区| 色婷婷激情视频| 成人知道污网站| 亚洲网址你懂得| 日韩精品一区二区亚洲av性色| 国内精品久久久久久久97牛牛 | 国产精品资源网| 精品一区久久久| 午夜激情视频在线| 亚洲一区二区三区在线| www.亚洲天堂网| 高清一区二区中文字幕| 亚洲激情中文字幕| 美国精品一区二区| 亚洲人成毛片在线播放女女| 国产精品久久久久久五月尺 | 亚洲精品自产拍| 在线观看黄网址| 亚洲影音一区| 91在线国产电影| 九色在线观看视频| 一区二区三区日韩精品| 性生交免费视频| a级日韩大片| 最近更新的2019中文字幕| 日韩欧美中文字幕一区二区| 另类调教123区 | 亚洲精品97久久中文字幕| 国产拍欧美日韩视频二区| 久久这里只有精品8| 成人自拍视频网| 亚洲国产精品va| 黄色录像一级片| 老司机免费视频久久| 国产伦精品一区二区三区高清版| 一区二区三区视频在线观看视频| 黑人巨大精品欧美一区免费视频| 天天久久综合网| 日本大胆欧美| 日本不卡视频在线播放| 亚洲美女性生活| 成人免费在线观看入口| 欧美精品一区二区三区免费播放| 亚洲一二av| 日韩视频永久免费观看| 国产主播第一页| 99re在线精品| av日韩一区二区三区| 国产成人免费av一区二区午夜| 伊人青青综合网站| 怡红院av久久久久久久| youjizz国产精品| www国产无套内射com| www.久久草.com| 三级精品视频久久久久| 91丨九色丨海角社区| 久久久久久久久久久久久久久99 | 2019中文字幕在线电影免费 | 国产999精品久久久影片官网| 色呦呦免费观看| 一个色在线综合| 亚洲成人av免费观看| 欧美在线日韩| 操人视频欧美| 伦理av在线| 亚洲第一男人天堂| 日韩免费一级片| www.久久精品| 欧美性久久久久| 亚洲大片精品免费| 国产99视频在线观看| 激情视频在线观看免费| 在线观看日韩毛片| 91动漫免费网站| 狠狠色丁香婷婷综合久久片| 在线国产精品网| 日韩最新av| 久久久久久中文| 五月婷婷在线观看视频| 欧美午夜片在线免费观看| 草草影院第一页| 日韩中文欧美在线| 亚洲视频导航| 永久免费精品视频| 91av在线播放| 国产h视频在线观看| 欧美日韩电影在线| 久久艹精品视频| 久久婷婷久久一区二区三区| 久久久久国产精品熟女影院| 欧美一级本道电影免费专区| 91久久国产精品| 国产91足控脚交在线观看| 日韩大片免费观看视频播放| 亚洲天堂视频在线播放| 综合中文字幕亚洲| 超碰男人的天堂| 日精品一区二区三区| 中文字幕欧美日韩一区二区三区| 日本一区二区乱| 78色国产精品| 色视频在线免费观看| 欧美大胆一级视频| 一级片在线观看免费| 亚洲三级免费观看| 国产精品1000部啪视频| 激情欧美一区二区| www国产黄色| 亚洲激情五月| 欧美成人免费在线| 国产成人视屏| 国产精品成人av性教育| 免费网站在线观看人| 国产午夜精品理论片a级探花| 亚洲熟妇av乱码在线观看| 亚洲国产一区二区三区青草影视| 久久久久久久久久久久| 国产成人免费视频一区| 亚洲第一中文av| 亚洲精品一二| 乱子伦一区二区| 欧美女王vk| 国产伦精品一区二区三区高清版 | 国产一区二区三区色淫影院| yiren22亚洲综合| 欧美日韩国产成人高清视频| a天堂中文在线| 亚洲国产天堂网精品网站| 亚洲视频在线观看一区二区| 午夜视黄欧洲亚洲| 三级影片在线看| 中文字幕免费观看一区| 中文字幕三级电影| 韩国女主播成人在线观看| 亚洲 中文字幕 日韩 无码| 日韩亚洲国产精品| 欧美一区二区三区综合| 欧美成人自拍| 神马欧美一区二区| 自拍欧美一区| 久久国产精品-国产精品| 97精品久久| 91久久中文字幕| 国产一区高清| 国产精品户外野外| 色综合亚洲图丝熟| 午夜精品久久久久久久99热浪潮| 成a人片在线观看| 视频在线一区二区| 在线激情网站| 中文字幕av一区二区| 国产高清一区在线观看| 国产视频精品在线| 神马久久久久| 精品亚洲永久免费精品| 熟妇人妻av无码一区二区三区| 精品久久久久久久久久久久久久久久久| 国产情侣激情自拍| 欧美一区二区在线观看| 国产www视频| 欧美一区二区高清| 国产探花精品一区二区| 日韩一级二级三级精品视频| 精品黑人一区二区三区在线观看| 日韩一区二区三区视频在线观看| 国产男女裸体做爰爽爽| 欧美一区二区三区性视频| 国产女人18毛片水18精| 欧美一个色资源| 亚洲第一视频在线播放| 精品国产污网站| 婷婷在线观看视频| 亚洲女人被黑人巨大进入| 国产一区二区影视| 综合国产在线观看| 成人午夜在线影视| 久久久久久久久久久免费| 欧美人与性动交α欧美精品济南到| 欧美激情第6页| 成人国产电影在线观看| 欧美在线激情网| 欧美videos粗暴| 97se亚洲综合在线| 欧美重口另类| 色视频一区二区三区| 久久久久久久久久久久久久| 亚洲精品少妇一区二区| 亚洲精品三级| 免费黄色一级网站| 国产精品亚洲专一区二区三区| 国产情侣久久久久aⅴ免费| 91视频在线观看免费| 精品国产成人亚洲午夜福利| 中文字幕日本不卡| 日本一区二区免费在线观看| 欧洲一区二区三区在线| 国产哺乳奶水91在线播放| 日韩av中文在线| 午夜激情在线观看| 国语自产在线不卡| 韩国女主播一区二区| 91久久大香伊蕉在人线| 亚洲精品无吗| 9l视频自拍9l视频自拍| 在线综合亚洲| 亚洲美女性囗交| 波多野结衣中文字幕一区| 少妇av片在线观看| 夜夜精品视频一区二区| 婷婷激情五月综合| 日韩一区二区三区精品视频| 久久精品a一级国产免视看成人 | 日本不卡一二三区| 亚洲九九视频| 欧美韩国日本在线| 国产成人免费网站| 99在线视频免费| 亚洲3atv精品一区二区三区| 日批视频免费观看| 亚洲国产精久久久久久| 超碰在线观看免费| 国产精品白丝jk喷水视频一区| 97久久综合区小说区图片区| 五月天亚洲综合情| 国产日韩1区| 亚洲这里只有精品| 91麻豆蜜桃一区二区三区| 九九视频在线免费观看| 欧美日韩亚洲综合一区| 熟妇人妻一区二区三区四区| 裸体女人亚洲精品一区| yw.尤物在线精品视频| 久久精品国产一区二区三区日韩 | 97久久综合区小说区图片区| 一区精品视频| 日韩国产精品91| 国产毛片毛片毛片毛片毛片毛片| 亚洲免费观看高清完整版在线观看熊 | 一区二区在线观看不卡| 中文无码av一区二区三区| 亚洲精品在线91| 在线能看的av网址| 国产不卡一区二区三区在线观看| 国产高清久久| 三级视频中文字幕| 国产清纯白嫩初高生在线观看91 | 尤物视频在线看| 91精品久久久久久久久久| 日韩精品免费一区二区在线观看 | 亚洲国产精品一区在线观看不卡 | 久久精品亚洲天堂| 国产精品免费久久| 中文在线字幕av| 国产亚洲欧美一区| 国产精品高清乱码在线观看 | 久久久久久无码精品人妻一区二区| 国产日韩v精品一区二区| 亚洲国产av一区二区三区| 精品视频久久久久久| 成av人片在线观看www| 精品无人区一区二区三区| 99精品热6080yy久久| 日本不卡视频一区| 亚洲成人7777| 天天操天天干天天干| 欧美在线欧美在线| 国内黄色精品| 在线免费观看av的网站| 国产精品久久久久影视| 一本色道久久综合熟妇| xvideos亚洲人网站| 成年永久一区二区三区免费视频| 性欧美18一19内谢| 国产成人精品免费一区二区| 久久久99精品| 亚洲国产精品免费| 国模套图日韩精品一区二区| 亚欧洲精品在线视频免费观看| 麻豆国产91在线播放| 手机在线免费看片| 精品国产第一区二区三区观看体验| av白虎一区| 欧美在线播放一区| 黑人精品欧美一区二区蜜桃| 波多野结衣家庭教师| 亚洲韩国日本中文字幕| 韩漫成人漫画| 天天做天天爱天天高潮| 成人动漫中文字幕| 免费视频久久久| 久久精品2019中文字幕| 中文一区二区三区四区| 欧美黄网站在线观看| 国产精品高清亚洲| 高清毛片aaaaaaaaa片| 情事1991在线| 天天天综合网| 免费无码一区二区三区| 欧美性做爰猛烈叫床潮| 成人免费高清| 蜜桃视频成人| 国产一区二区导航在线播放| 国产成人免费观看视频 | 青青操在线播放| 精品不卡在线视频| 国产精品.xx视频.xxtv| 日韩精品一区二区在线视频| 久久精品一区二区| 亚洲国产欧美另类| 国产精品高潮呻吟久久av无限| 中文字幕亚洲综合久久五月天色无吗''| 中文在线一区二区三区| 91精品国产入口在线| 户外露出一区二区三区|