国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

深入理解Redis內(nèi)存回收和內(nèi)存淘汰機(jī)制

 更新時(shí)間:2024年06月19日 09:56:44   作者:lcn29  
Redis使用多種過期策略和內(nèi)存淘汰機(jī)制來管理內(nèi)存,本文主要介紹了深入理解Redis內(nèi)存回收和內(nèi)存淘汰機(jī)制, 具有一定的參考價(jià)值,感興趣的可以了解一下

1 概念

Redis 所有的數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中的, 如果不進(jìn)行任何的內(nèi)存回收, 那么很容易出現(xiàn)內(nèi)存爆滿的情況。因此,在某些情況下需要對(duì)占用的內(nèi)存空間進(jìn)行釋放。

Redis 中內(nèi)存的釋放主要分為兩類
Redis 中內(nèi)存的釋放主要分為兩類:

內(nèi)存回收: 將過期的 key 清除,以減少內(nèi)存占用

內(nèi)存淘汰: 在內(nèi)存使用達(dá)到上限(max_memory), 按照一定的策略刪除一些鍵,以釋放內(nèi)存空間

兩者都是通過刪除 key (及其對(duì)應(yīng)的 value) 來達(dá)到釋放空間的效果。
區(qū)別在于前者清除的是用戶明確不需要的 key, 而后者清除的則是用戶可能仍然需要的 key。

2 內(nèi)存回收

2.1 過期策略

在內(nèi)存中的大量 key 中, 如何清除其中已經(jīng)過期的 key 呢?

常用的方式有 3 種

  • 定時(shí)過期
  • 惰性過期
  • 定期過期

定時(shí)過期

為每個(gè) key 都創(chuàng)建一個(gè)定時(shí)器, 時(shí)間到了, 就將這個(gè) key 清除。
該策略可以立即清除過期的數(shù)據(jù), 對(duì)內(nèi)存很友好。但是會(huì)占用大量的 CPU 資源去處理過期的數(shù)據(jù), 從而影響緩存的響應(yīng)時(shí)間和吞吐量。

惰性過期

key 過期了, 不進(jìn)行處理。當(dāng)后續(xù)訪問到這個(gè) key 時(shí), 才會(huì)判斷該 key 是否已過期, 過期則清除。
該策略可以最大化地節(jié)省 CPU 資源, 卻對(duì)內(nèi)存非常不友好。極端情況可能出現(xiàn)大量的過期 key 沒有再次被訪問, 從而不會(huì)被清除, 占用大量?jī)?nèi)存。

定期過期

將所有的 key 維護(hù)在一起, 每隔一段時(shí)間就從中掃描一定的數(shù)量的 key(采樣), 并清除其中已經(jīng)過期的 key。
通過調(diào)整定時(shí)掃描的時(shí)間間隔和每次掃描的耗時(shí), 可以在不同情況下使得 CPU 和內(nèi)存資源達(dá)到最優(yōu)的平衡效果。

在 Reids 的實(shí)現(xiàn)中是通過 惰性過期 + 定期過期 2 種策略配合, 達(dá)到內(nèi)存回收的效果。

2.2 惰性過期 在 Redis 中的實(shí)現(xiàn)

前提: Redis 中一個(gè)對(duì)象的過期時(shí)間存放在 dictEntry 的 v.s64 中, 至于 dictEntry 的設(shè)計(jì)可以看一下后面的附錄

Redis 大部分讀寫對(duì)象的命令, 在執(zhí)行前都會(huì)調(diào)用 expireIfNeeded 函數(shù)做一個(gè)過期檢查

  • 如果 key 已經(jīng)過期了, 將其刪除
  • 如果 key 未過期, 不做任何處理

expireIfNeeded 函數(shù)的定義如下

int expireIfNeeded(redisDb *db, robj *key) {

    // key 未過期返回 0
    if (!keyIsExpired(db,key)) return 0;

    // 下面的邏輯都是 Key 過期的邏輯處理

    // 當(dāng)前的節(jié)點(diǎn)是從節(jié)點(diǎn), 返回 1, 然后結(jié)束
    // 為了保持主從數(shù)據(jù)的一致, 從節(jié)點(diǎn)不會(huì)主動(dòng)清除數(shù)據(jù), 都是主節(jié)點(diǎn)同步消息在刪除
    if (server.masterhost != NULL) return 1;

    // 已經(jīng)刪除過期鍵個(gè)數(shù) + 1
    server.stat_expiredkeys++;
    // 向從節(jié)點(diǎn)和 AOF 文件傳播 key 過期信息, 清除過期 key
    propagateExpire(db,key,server.lazyfree_lazy_expire);
    // 發(fā)送事件通知
    notifyKeyspaceEvent(NOTIFY_EXPIRED,"expired",key,db->id);

    // lazyfree-lazy-expire 配置參數(shù) (版本 4.0 以上支持), 默認(rèn)為 0
    // 根據(jù)配置, 同步或異步刪除 key (異步刪除: 先將 key 邏輯刪除, 然后在通過后臺(tái)的線程池進(jìn)行真正的空間釋放)
    return server.lazyfree_lazy_expire ? dbAsyncDelete(db,key) : dbSyncDelete(db,key);
}

int keyIsExpired(redisDb *db, robj *key) {
    // 從過期字典中獲取 key 對(duì)應(yīng)的過期時(shí)間, 實(shí)際就是獲取 dictEntity 的 v 中的 s64 值 (dictEntity.v.s64)
    mstime_t when = getExpire(db,key);
    mstime_t now;

    // 沒有過期時(shí)間
    if (when < 0) return 0;

    // redis 在加載數(shù)據(jù)中
    if (server.loading) return 0;
    
    // 獲取當(dāng)前的事件
    if (server.lua_caller) {
        // 有 lua 腳本在執(zhí)行中, 當(dāng)前時(shí)間等于腳本開始執(zhí)行前的時(shí)間
        now = server.lua_time_start;
    } else if (server.fixed_time_expire > 0) {
        // 有緩存時(shí)間, 線使用緩存時(shí)間
        // server.mstime 這個(gè)時(shí)間會(huì)在調(diào)用執(zhí)行命令函數(shù)的 call() 前進(jìn)行更新
        // 這樣可以避免一些批量操作的命令, 比如 RPOPLPUSH 等命令, 這些命令會(huì)執(zhí)行過程中可能多次訪問這個(gè) key
        // 而在多次的訪問過程中, 可能出現(xiàn)上一次訪問未過期, 下次訪問已經(jīng)過期了, 通過這個(gè)緩沖時(shí)間可以解決這個(gè)問題
        now = server.mstime;
    } else {
        // 其他情況, 直接獲取當(dāng)前時(shí)間
        now = mstime();
    }

    // 當(dāng)前時(shí)間是否大于 key 的過期時(shí)間
    return now > when;
}

expireIfNeeded 的調(diào)用時(shí)機(jī), 基本都是在各個(gè)命令內(nèi)部。 以 String 的 get 命令為例, 大體的流程如下

/**
 * get 命令對(duì)應(yīng)的執(zhí)行函數(shù)
 * 需要的參數(shù)都封裝在 client 對(duì)象中
 */
void getCommand(client *c) {

    // getGenericCommand -> lookupKeyReadOrReply -> lookupKeyRead -> lookupKeyReadWithFlags
    // getGenericCommand 經(jīng)過幾個(gè)函數(shù)最終調(diào)用到 lookupKeyReadWithFlags
    getGenericCommand(c);
}

robj *lookupKeyReadWithFlags(redisDb *db, robj *key, int flags) {

    robj *val;
    // expireIfNeeded 返回 > 0, 過期了
    if (expireIfNeeded(db,key) == 1) {
        // 省略過期處理
        // 過期的處理, 然后 return null
    }

    // 非過期處理, 查找然后返回
    val = lookupKey(db,key,flags);
    if (val == NULL)
        server.stat_keyspace_misses++;
    else
        server.stat_keyspace_hits++;
    return val;
}

上面就是 get 指令的中的惰性過期的過程, 其他命令的邏輯差不多, 核心就是一個(gè) expireIfNeeded 函數(shù)。

2.3 定期過期在 Redis 中的實(shí)現(xiàn)

Redis 默認(rèn)是 16 個(gè)數(shù)據(jù)庫(kù), 每個(gè)數(shù)據(jù)庫(kù)會(huì)將設(shè)置了過期時(shí)間的 key 放到各自的一個(gè)獨(dú)立的字典中, 稱為過期字典 (redisDb 對(duì)象的 dict *expires 屬性)。

然后 Redis 默認(rèn)會(huì)按照每秒 10 次的頻率(可以通過 redis.conf 中的 hz 配置)進(jìn)行過期掃描。
掃描的過程不會(huì)遍歷整個(gè)過期字典,而是按照以下策略進(jìn)行

  • 從過期字典中隨機(jī)選擇 20 個(gè) key
  • 刪除其中已經(jīng)過期的鍵
  • 如果超過 25% 的鍵被刪除, 則重復(fù)步驟 1, 2, 3, 沒有超過, 就結(jié)束這次掃描
  • 同時(shí)為防止重復(fù)循環(huán), 導(dǎo)致線程卡死, 增加了每 16 次抽樣, 就做一次掃描時(shí)間的上限的檢查 (默認(rèn)是慢模式下, 上限是 25 毫秒, 如果是快模式,掃描上限是 1 毫秒), 超過就結(jié)束循環(huán)

定期過期刪除的實(shí)現(xiàn)主要在 /activeExpireCycle 函數(shù), 大體的邏輯如下

/**
 * 過期循環(huán)清除
 * 為了便于理解, 這里對(duì)函數(shù)的邏輯做了一點(diǎn)小調(diào)整和刪除一些非必要的邏輯, 但是整體的邏輯不變

 * @type 模式, 取值有 2 個(gè) ACTIVE_EXPIRE_CYCLE_SLOW (0, 慢模式), ACTIVE_EXPIRE_CYCLE_FAST (1, 快模式)
 */
void activeExpireCycle(int type) {

    // 靜態(tài)變量, 當(dāng)前處理的數(shù)據(jù)庫(kù)索引
    // 靜態(tài)的效果, 這個(gè)變量執(zhí)行后的值不會(huì)被清空, 每次調(diào)用這個(gè)方法, 是上一次執(zhí)行的值
    // 這樣就可以保證 16 個(gè)數(shù)據(jù)庫(kù), 每次方法執(zhí)行完, 下次進(jìn)來可以執(zhí)行到下一個(gè)數(shù)據(jù)庫(kù), 循環(huán)起來,而不是每次進(jìn)來都從第 0 個(gè)開始
    static unsigned int current_db = 0;

    // 上一次清理是否是因?yàn)闀r(shí)間超時(shí)結(jié)束循環(huán)的, 同樣是靜態(tài)變量
    static int timelimit_exit = 0;    
    // 上一次快速循環(huán)循環(huán)的時(shí)間, 同樣是靜態(tài)變量
    static long long last_fast_cycle = 0;

    // 當(dāng)前時(shí)間
    long long start = ustime(),

    // 本次循環(huán)清除是快速循環(huán), 上一次是時(shí)間超時(shí)獲取 2 次快速循環(huán)的時(shí)間差在 2 毫秒內(nèi), 不執(zhí)行
    if (type == ACTIVE_EXPIRE_CYCLE_FAST) {
        // 上一次循環(huán)是因?yàn)闀r(shí)間超時(shí)結(jié)束的, 本次快速循環(huán)不進(jìn)行
        if (!timelimit_exit) return;
        // 上次快速循環(huán)距離當(dāng)前時(shí)間在 1000 * 2 = 2 毫秒內(nèi), 也不進(jìn)行快速循環(huán)
        if (start < last_fast_cycle + ACTIVE_EXPIRE_CYCLE_FAST_DURATION*2) return;
        last_fast_cycle = start;
    }

    // 計(jì)算循環(huán)的上限毫秒限制 
    // server.hz 默認(rèn)等于 10, ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC 等于 25
    // 1000000 * 25 / 10 / 100 = 25000 單位: 微秒, 即 25 毫秒
    long long timelimit = 1000000*ACTIVE_EXPIRE_CYCLE_SLOW_TIME_PERC/server.hz/100;

    // ACTIVE_EXPIRE_CYCLE_FAST_DURATION = 1000
    // 如果是快模式, 修改為 1000 微秒, 即 1 毫秒超時(shí)
    if (type == ACTIVE_EXPIRE_CYCLE_FAST)
        timelimit = ACTIVE_EXPIRE_CYCLE_FAST_DURATION;


    // CRON_DBS_PER_CALL = 16, 每次循環(huán)處理的數(shù)據(jù)庫(kù)數(shù)量
    int dbs_per_call = CRON_DBS_PER_CALL;

    // 遍歷當(dāng)前數(shù)據(jù)庫(kù)的次數(shù)
    int iteration = 0;

    // 遍歷循環(huán) 16 個(gè)數(shù)據(jù)庫(kù)
    for (int j = 0; j < dbs_per_call && timelimit_exit == 0; j++) {

        // 清理過期的 key 個(gè)數(shù)
        int expired;

        // 計(jì)算本次處理的數(shù)據(jù)庫(kù)
        redisDb *db = server.db+(current_db % server.dbnum);
        current_db++;

        do {
            // 開始循環(huán)清除當(dāng)前數(shù)據(jù)庫(kù)中過期的 key

            // 遍歷次數(shù) + 1
            iteration++;

            // dictSize 獲取整個(gè)過期字典的已經(jīng)使用大小
            unsigned long num = dictSize(db->expires);

            // num == 0 表示整個(gè)字典沒有數(shù)據(jù), 跳出循環(huán),處理下一個(gè)數(shù)據(jù)庫(kù)
            if (num == 0) {
                break;
            }

            // 計(jì)算整個(gè)過期字典的總大小
            unsigned long slots = dictSlots(db->expires);

            // DICT_HT_INITIAL_SIZE = 4, 每個(gè)字典初始化時(shí)的默認(rèn)值
            // num > 0, 字典中有數(shù)據(jù)了, slots 大于 4, 表示當(dāng)前的字典擴(kuò)容過了
            // num && slots > DICT_HT_INITIAL_SIZE, 當(dāng)前的字典擴(kuò)容過同時(shí)里面有數(shù)據(jù)
            // num * 100 / slots < 1 計(jì)算當(dāng)前使用的數(shù)據(jù)占整個(gè)字典的百分比是否小于 1%

            // Redis 認(rèn)為, 如果一個(gè)字典中的使用率小于 1%, 花時(shí)間去進(jìn)行清理是一個(gè)昂貴的操作
            // 應(yīng)該停下來,等待更好的時(shí)間再進(jìn)行調(diào)整
            // 所以簡(jiǎn)單理解: 當(dāng)這個(gè)字典中使用的空間小于 1%, 這里跳過了這個(gè)數(shù)據(jù)的處理
            if (num && slots > DICT_HT_INITIAL_SIZE && (num * 100 / slots < 1)) 
                break;

            expired = 0;

            // ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP = 20 
            // 本次從過期字典中獲取多少個(gè) key, 如果字典中的已經(jīng)使用的 key 大于 20, 則只取 20 個(gè), 否則有多少取多少
            if (num > ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP)
                num = ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP;
            
            // 循環(huán) num 次從字典中獲取 key 
            while (num--) {

                dictEntry *de;
                // 從過期字典中隨機(jī)獲取一個(gè) key, 獲取不到, 就停止本次循環(huán)
                if ((de = dictGetRandomKey(db->expires)) == NULL) break;

                // 嘗試釋放這個(gè) key, 如果 key 釋放成功, 過期次數(shù) + 1
                if (activeExpireCycleTryExpire(db,de,now)) expired++;

            }

            // 0xf = 15, iteration 表示遍歷了 15 次
            if ((iteration & 0xf) == 0) {
                // 計(jì)算消耗時(shí)間
                int elapsed = ustime()-start;
                // 消耗時(shí)間超過了限制時(shí)間, 結(jié)束本次循環(huán)
                if (elapsed > timelimit) {
                    // 超過時(shí)間限制標(biāo)識(shí)設(shè)置為 true, 本次循環(huán)清除超時(shí)了, 結(jié)束本次循環(huán)清除
                    timelimit_exit = 1;
                    break;
                }
            }

            // 本次清理的過期 key 超過了 25%, 繼續(xù), 否則結(jié)束
            // ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP = 20
            // 每次抽取的個(gè)數(shù)最大為 20 個(gè), 控制 25%, 20 * 25% = 5 個(gè)
            // 也就是過期的個(gè)數(shù)大于 5 就是大于 25%, (ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP/4 = 5)
        } while (expired > ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP/4);
    }

    // 省略各種分析數(shù)據(jù)的記錄
}

調(diào)用 activeExpireCycle 的入口有 2 個(gè)

  • Redis 定時(shí)事件觸發(fā)
/**
 * Reids 啟動(dòng)時(shí), 向事件輪詢中注冊(cè)的唯一一個(gè)定時(shí)事件(默認(rèn) 100 毫秒執(zhí)行一次), 執(zhí)行的函數(shù)
 */
int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
    ...
    // 數(shù)據(jù)庫(kù)掃描
    databasesCron();
    ...
}

void databasesCron(void) {

    // 過期功能開啟中, 默認(rèn)為開啟
    if (server.active_expire_enabled) {
        // 主節(jié)點(diǎn)
        if (server.masterhost == NULL) {
            // 慢模式循環(huán)清除
            activeExpireCycle(ACTIVE_EXPIRE_CYCLE_SLOW);
        } else {
            // 從節(jié)點(diǎn)處理
            expireSlaveKeys();
        }
    }

    ...
}
  • 事件輪詢中, 進(jìn)入阻塞前的調(diào)用函數(shù)
void beforeSleep(struct aeEventLoop *eventLoop) {

    ...

    // 過期功能開啟中同時(shí)為主節(jié)點(diǎn)
    if (server.active_expire_enabled && server.masterhost == NULL)
        // 快模式循環(huán)清除
        activeExpireCycle(ACTIVE_EXPIRE_CYCLE_FAST);

    ...
}

3 內(nèi)存淘汰

3.1 淘汰算法

為了能夠騰出內(nèi)存空間, 需要在一大群對(duì)象中選擇某一些進(jìn)行淘汰, 哪么應(yīng)該基于什么標(biāo)準(zhǔn)進(jìn)行選擇呢?
比較常見的算法有 2 個(gè): LRU 和 LFU。

LRU (Least Recently Used): 最近最少使用算法, 根據(jù)數(shù)據(jù)的歷史訪問記錄進(jìn)行淘汰數(shù)據(jù),優(yōu)先移除最近最少使用的數(shù)據(jù)。
簡(jiǎn)單理解就是根據(jù)對(duì)象的訪問時(shí)間, 優(yōu)先淘汰訪問時(shí)間最早的對(duì)象。

LFU (Least Frequently Used): 最少頻率使用算法, 根據(jù)數(shù)據(jù)的訪問頻率頻率進(jìn)行淘汰數(shù)據(jù), 優(yōu)先移除最近使用頻率最少的數(shù)據(jù)。
簡(jiǎn)單理解就是根據(jù)對(duì)象的訪問次數(shù), 優(yōu)先淘汰訪問次數(shù)最少的對(duì)象。

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

在 LFU 和 LRU 的基礎(chǔ)上, Redis 提供了 8 種淘汰策略

策略說明
noeviction默認(rèn)策略, 不會(huì)刪除任何數(shù)據(jù), 但是拒絕所有寫入操作并返回客戶端錯(cuò)誤信息 (error)OOM command not allow when used memory。此時(shí) Redis 只響應(yīng)讀操作。
volatile-lruLeast Recently Used, 最近最少使用。在所有設(shè)置了 expire 的 key 中刪除最近最少使用的鍵值對(duì), 即距離上次訪問時(shí)間最久的。
allkeys-lruLeast Recently Used, 最近最少使用。在所有的 key 中刪除最近最少使用的鍵值對(duì), 即距離上次訪問時(shí)間最久的。
volatile-lfuLeast Frequently Used, 最不經(jīng)常使用。在所有設(shè)置了 expire 的 key 中刪除最不經(jīng)常使用的鍵值對(duì), 即訪問次數(shù)最少的。
allkeys-lfuLeast Frequently Used, 最不經(jīng)常使用。在所有的 key 中刪除最不經(jīng)常使用的鍵值對(duì), 即訪問次數(shù)最少的。
volatile-random在所有設(shè)置了 expire 的 key 中隨機(jī)選擇刪除
allkeys-random在所有的 key 中隨機(jī)選擇刪除。
volatile-ttlTime To Live, 存活時(shí)間。 在所有設(shè)置了 expire 的 key 中刪除 ttl 值最多的。

volatile-lru, volatile-random, volatile-ttl, 在沒有符合條件的 key 的情況下, 會(huì)按照 noeviction 的策略進(jìn)行處理。

3.3 Redis 對(duì)象淘汰判斷標(biāo)準(zhǔn)設(shè)計(jì)

在上面介紹的幾種策略可以知道, 要判斷一個(gè)對(duì)象是否可以被淘汰, 需要對(duì)象自身存放使用策略對(duì)應(yīng)的數(shù)據(jù), 以便于判斷
比如:

2 個(gè) lru 策略, 需要對(duì)象自身保存好上次訪問的時(shí)間

2 個(gè) lfu 策略, 需要對(duì)象自身保存好訪問次數(shù)

ttl 策略, 需要對(duì)象自身保存好過期時(shí)間

2 個(gè) random 策略, 不需要保存額外的數(shù)據(jù), 通過隨機(jī)一個(gè)數(shù), 根據(jù)這個(gè)數(shù)從字典中獲取數(shù)據(jù)即可

3.3.1 Redis 對(duì)象的設(shè)計(jì)

正常情況下, 當(dāng)我們向 Redis 中存入一對(duì)鍵值對(duì), 實(shí)際可以拆分為 2 個(gè)對(duì)象, 一個(gè) key, 一個(gè) value。
其中 key 可以明確為是一個(gè)字符串, 所以存入到 Redis 的鍵值對(duì)的 key 會(huì)被封裝為 sds 對(duì)象。
但是 value 可以類型可以很多, 為了行為的統(tǒng)一等, 需要對(duì) value 做一個(gè)封裝, 落實(shí)到源碼中就是一個(gè) redisObject 對(duì)象, 其定義如下

typedef struct redisObject {
    
    /** 
     * 標(biāo)識(shí)這個(gè)對(duì)象的數(shù)據(jù)類型, 常說的 String, Hash, List 等
     */
    unsigned type:4;

    /**
     * 可以理解為數(shù)據(jù)類型的具體實(shí)現(xiàn)類型
     * 比如數(shù)據(jù)類型為 List, 在具體的實(shí)現(xiàn)中可以是 ArrayList LinkedList 等
     */
    unsigned encoding:4;

    /** 
     * LRU_BITS = 24,
     * 一個(gè) 24 位的變量, 表示對(duì)象最后一次被程序訪問的時(shí)間或者訪問的次數(shù), 與內(nèi)存回收有關(guān)
     * 暫時(shí)知道有這個(gè)對(duì)象即可, 后面有分析
     */
    unsigned lru:LRU_BITS;

    /**
     * 被引用的次數(shù), 當(dāng) refcount 為 0 的時(shí)候, 表示該對(duì)象已經(jīng)不被任何對(duì)象引用, 則可以進(jìn)行垃圾回收了
     */
    int refcount;

    /**
     * 一個(gè)指針, 指向具體的數(shù)據(jù)
     */
    void *ptr;

} robj;

一個(gè)對(duì)象的 lru 和 lfu 計(jì)算后的值, 都是存放在這個(gè)對(duì)象的 lru 字段中的, 但是 lru 和 lfu 的計(jì)算方式是不一樣的。

3.3.2 lru 策略, 對(duì)象的訪問時(shí)間設(shè)計(jì)

3.3.2.1 全局時(shí)間 lruclock

在 Redis 的中維護(hù)了一個(gè)全局的變量 lruclock, 表示當(dāng)前時(shí)間的一個(gè)相對(duì)值。

/**
 * redisServer 可以看做整個(gè) Redis 運(yùn)行時(shí)的上下文, 保存的數(shù)據(jù), 配置等都在這個(gè)結(jié)構(gòu)體中
 */
struct redisServer {
    unsigned int lruclock = getLRUClock();
}

unsigned int getLRUClock(void) {
    // LRU_CLOCK_RESOLUTION = 1000
    // mstime() 當(dāng)前時(shí)間毫秒, 當(dāng)前時(shí)間的毫秒/LRU_CLOCK_RESOLUTION = 當(dāng)前時(shí)間的毫秒/1000 = 變?yōu)閱挝幻?
    // LRU_CLOCK_MAX = ((1<<LRU_BITS)-1) = 1<<24-1 = redisObject lru 字段的最大值
    // (當(dāng)前的時(shí)間 / 1000) & (1<<24-1) 確保時(shí)間的精度是秒, 同時(shí)不會(huì)超過 24 位的整數(shù)的最多值
    // 整個(gè)全局時(shí)間的進(jìn)度為秒, 2 個(gè)對(duì)象的訪問時(shí)間差如果在秒內(nèi), 得到的是他們的訪問時(shí)間是一樣的
    
    // 得到一個(gè)當(dāng)前時(shí)間的相對(duì)值
    return (mstime()/LRU_CLOCK_RESOLUTION) & LRU_CLOCK_MAX;
}

同時(shí)這個(gè)時(shí)間會(huì)在 Redis 的定時(shí)任務(wù) serverCron 中定時(shí)的更新為最新的值

int serverCron(struct aeEventLoop *eventLoop, long long id, void *clientData) {
    // serverCron 默認(rèn)是 100 毫秒執(zhí)行一次
    unsigned int lruclock = getLRUClock();
    atomicSet(server.lruclock,lruclock);
}

3.3.2.2 對(duì)象的訪問時(shí)間設(shè)計(jì)

Redis 每次通過 key 在數(shù)據(jù)庫(kù)中查詢對(duì)應(yīng)的 value 時(shí), 在找到時(shí), 就會(huì)進(jìn)行 lru 字段的更新

robj *lookupKey(redisDb *db, robj *key, int flags) {
    // 從字典中獲取 key 對(duì)應(yīng)的 dictEntry (字典的設(shè)計(jì)可以看一下后面的附錄)
    dictEntry *de = dictFind(db->dict,key->ptr);
    if (de) {
        // 獲取 key 對(duì)應(yīng)的 dictEntry 的存在
        // 獲取 dictEntry 的 value 也就是 redisObject 對(duì)象
        robj *val = dictGetVal(de);

        if (server.rdb_child_pid == -1 && server.aof_child_pid == -1 && !(flags & LOOKUP_NOTOUCH)) {
            // 沒有在進(jìn)行 RDB 或 AOF 操作, 并且 flags 沒有設(shè)置 LOOKUP_NOTOUCH

            // 淘汰策略設(shè)置的的 LFU 策略
            if (server.maxmemory_policy & MAXMEMORY_FLAG_LFU) {
                updateLFU(val);
            } else {
                // 其他策略, 更新 lru 為全局的 lruclock
                val->lru = LRU_CLOCK();
            }
        }
    } else {
        // key 不存在, 返回 null
        return NULL;
    }
}

unsigned int LRU_CLOCK(void) {
    unsigned int lruclock;
    // LRU_CLOCK_RESOLUTION = 1000
    // 1000/server.hz 就是上面定時(shí)任務(wù) serverCron 的執(zhí)行時(shí)間
    // <= 1000 說明 serverCron 的執(zhí)行時(shí)間小于 1 秒, 直接獲取 server.lruclock 的值
    // 如果大于 1000, 就調(diào)用 getLRUClock() 實(shí)時(shí)獲取當(dāng)前的時(shí)間, 因?yàn)轭l率太低了, 會(huì)造成更多的對(duì)象的訪問時(shí)間一樣
    if (1000/server.hz <= LRU_CLOCK_RESOLUTION) {
        atomicGet(server.lruclock,lruclock);
    } else {
        lruclock = getLRUClock();
    }
    return lruclock;
}

3.3.3 lfu 策略, 對(duì)象的訪問頻率設(shè)計(jì)

對(duì)象的 lfu 同樣是存放在 redisObject 的 lru:LRU_BITS 字段。 這個(gè) 24 bits 字段, 被分為兩部分

高 16 位用來記錄訪問時(shí)間 (單位為分鐘,ldt, last decrement time)

低 8 位用來記錄相對(duì)的訪問次數(shù), 簡(jiǎn)稱 counter (logc, logistic counter)

Redis 中對(duì) LFU 的實(shí)現(xiàn)比較特殊, 通過時(shí)間衰減的方式近似達(dá)到了 LFU 的效果。
大體的思路如下:

對(duì)象創(chuàng)建時(shí), 初始訪問次數(shù)為 5 (避免剛創(chuàng)建出來, 對(duì)象就被回收), 同時(shí)記錄下當(dāng)前時(shí)間, 單位分鐘

對(duì)象被訪問時(shí), 獲取當(dāng)前時(shí)間, 單位分鐘, 當(dāng)前時(shí)間 - 對(duì)象本身記錄的時(shí)間, 得到相差多少分鐘, 訪問次數(shù)就減少多少

然后對(duì)象的訪問次數(shù) + 1, 再次記錄下當(dāng)前時(shí)間

這樣對(duì)象在單位分鐘內(nèi), 訪問越頻繁, 訪問次數(shù)越大, 同時(shí)隨著時(shí)間的推移, 沒有進(jìn)行訪問, 訪問次數(shù)會(huì)逐漸減少, 從而達(dá)到了 LFU 的效果。

ldt 記錄的是最近一次訪問的時(shí)間, 16 位, 所以最大值為 65535, 單位是分鐘, 差不多 45 天左右。
也就是一個(gè)對(duì)象如果一直被訪問, 到了第 45 天后, 這個(gè)值又會(huì)重新回到 0 開始計(jì)算。

ldt 的計(jì)算

unsigned long LFUGetTimeInMinutes(void) {
  // & 65535 保證時(shí)間的范圍在 0 ~ 65535 之間, 不會(huì)超過 16 數(shù)值的大小   
  return (server.unixtime/60) & 65535;
}

同 lru 一樣, lruclock 的計(jì)算, 后面的時(shí)間比前面的時(shí)間小,
說明后面的時(shí)間到了下一輪的重新開始了, 這時(shí)只需要后面的時(shí)間 + 65535 - 前面的時(shí)間, 就能得到 2 個(gè)時(shí)間的差值了。

logc 記錄的是一個(gè)相對(duì)的訪問次數(shù)。
本身只有 8 位, 也就是最大值為 255, 也就是一個(gè)對(duì)象只能保存 255 次訪問次數(shù), 這個(gè)基本不同滿足日常的使用。
所以 Redis 內(nèi)部設(shè)計(jì)了一個(gè)隨機(jī)公式, 控制訪問次數(shù)的增長(zhǎng), 即每次訪問, 訪問次數(shù)加不加一, 通過隨機(jī)判斷。

uint8_t LFULogIncr(uint8_t counter) {
    // 當(dāng)前的訪問次數(shù)已經(jīng)達(dá)到了最大值了
    if (counter == 255) 
        return 255;

    // 產(chǎn)生一個(gè)隨機(jī)數(shù)
    double r = (double)rand()/RAND_MAX;
    // 獲取一個(gè)基礎(chǔ)值, 當(dāng)前的次數(shù) - 對(duì)象初始化的默認(rèn)次數(shù) (LFU_INIT_VAL = 5)
    double baseval = counter - LFU_INIT_VAL;
    if (baseval < 0) baseval = 0;
    // 1.0 / 基礎(chǔ)值 * server.lfu_log_factor (默認(rèn)值, 10, 可配置) + 1, 得到一個(gè)數(shù)
    double p = 1.0/(baseval*server.lfu_log_factor+1);
    // 得到的數(shù)大于隨機(jī)出來的數(shù), 訪問次數(shù) + 1
    if (r < p) counter++;
    return counter;
}

官方的測(cè)試數(shù)據(jù) (可以簡(jiǎn)單看成, counter = 5, 在 100 - 1000w 次的調(diào)用, lfu_log_factor 不同取值下, 最終的 counter 的值)

lfu_log_factor 取值100 次1000 次10w 次100w 次1000w 次
0104255255255255
11849255255255
101018142255255
10081149143255

lfu_log_factor 設(shè)置為 10 的情況下, 在 100w 次的訪問中, 訪問次數(shù)才達(dá)到為 255, 也就是最大值。
基本可以滿足 10w 次的使用

3.3.3.1 counter 衰減機(jī)制

每個(gè)對(duì)象被返回時(shí), counter 都會(huì)先進(jìn)行一個(gè)衰減操作, 然后再通過上面的隨機(jī)公式進(jìn)行判斷次數(shù)是否需要增加。

衰減的過程如下

unsigned long LFUDecrAndReturn(robj *o) {

    // 右移 8 為, 也就是得的了高位的 16 位, 即 ldt, 得到上次記錄的時(shí)間
    unsigned long ldt = o->lru >> 8;
    // 得到當(dāng)前保存的次數(shù)
    unsigned long counter = o->lru & 255;

    // lfu_decay_time 衰減時(shí)間, 默認(rèn) 1, 單位分鐘
    // 如果沒有配置 lfu_decay_time, 則默認(rèn)不進(jìn)行衰減, counter 當(dāng)前是多少就是多少
    // 獲取 2 次訪問的時(shí)間差 / lfu_decay_time, 得到經(jīng)過了多少個(gè)時(shí)間段   
    unsigned long num_periods = server.lfu_decay_time ? LFUTimeElapsed(ldt) / server.lfu_decay_time : 0;
    if (num_periods)
        // 最新的次數(shù) = 當(dāng)前的次數(shù) - 經(jīng)過了多少個(gè)時(shí)間段, 小于 0 時(shí), 設(shè)置為 0 
        counter = (num_periods > counter) ? 0 : counter - num_periods;
    return counter;
}

// 距離上次訪問相差多少分鐘
unsigned long LFUTimeElapsed(unsigned long ldt) {
    unsigned long now = LFUGetTimeInMinutes();
    if (now >= ldt) return now-ldt;
    return 65535-ldt+now;
}

3.3.3.2 對(duì)象的訪問頻率設(shè)計(jì)

Redis 每次通過 key 在數(shù)據(jù)庫(kù)中查詢對(duì)應(yīng)的 value 時(shí), 在找到時(shí), 就會(huì)進(jìn)行 lru 字段的更新

robj *lookupKey(redisDb *db, robj *key, int flags) {
    
    dictEntry *de = dictFind(db->dict,key->ptr);
    if (de) {
        robj *val = dictGetVal(de);

        if (server.rdb_child_pid == -1 && server.aof_child_pid == -1 && !(flags & LOOKUP_NOTOUCH)) {
            // 淘汰策略設(shè)置的的 LFU 策略
            if (server.maxmemory_policy & MAXMEMORY_FLAG_LFU) {
                updateLFU(val);
            } else {
                val->lru = LRU_CLOCK();
            }
        }
    } else {
        return NULL;
    }
}

void updateLFU(robj *val) {
    // 通過衰減機(jī)制, 得到最新的 counter
    unsigned long counter = LFUDecrAndReturn(val);
    // 通過隨機(jī)公式, 得到最新的 counter
    counter = LFULogIncr(counter);
    // 將最新的 counter 和 當(dāng)前時(shí)間保存到 lru 字段中
    val->lru = (LFUGetTimeInMinutes()<<8) | counter;
}

3.4 Redis 內(nèi)存淘汰策略的實(shí)現(xiàn)

Redis 的內(nèi)存的實(shí)現(xiàn)方式都是通過隨機(jī)采樣 + 比較 lru 值決定是否淘汰的方式實(shí)現(xiàn)的。

大體過程如下:

  • Redis 啟動(dòng)時(shí), 會(huì)初始一個(gè)默認(rèn)容量為 16 的待淘汰數(shù)據(jù)池 evictionPoolEntry (本質(zhì)就是一個(gè)數(shù)組)
  • 每個(gè)存入到 Redis 的對(duì)象 (redisObject) 都會(huì)在初始其 24 位的 lru 字段 (lru: 一個(gè)相對(duì)的訪問時(shí)間, lfu: 一個(gè)相對(duì)的訪問次數(shù))
  • 后面每次訪問 Redis 的對(duì)象時(shí), 更新其 lru 字段的值
  • 同時(shí)每次執(zhí)行一個(gè) Redis 命令時(shí), 就會(huì)判斷一下當(dāng)前的內(nèi)存是否足夠, 如果不夠, 就計(jì)算出需要釋放多少內(nèi)存, 然后進(jìn)行內(nèi)存淘汰

內(nèi)存淘汰的過程如下:

4.1 首次淘汰從數(shù)據(jù)字典或過期字典 (由配置的淘汰策略決定) 中隨機(jī)抽樣選出最多 N 個(gè)數(shù)據(jù)放入到一個(gè)樣例池
數(shù)據(jù)量 N: 由 redis.conf 配置的 maxmemory-samples 決定, 默認(rèn)值是 5。 配置為 10 將非常接近真實(shí) LRU 效果。
采樣參數(shù) maxmemory-samples 配置的數(shù)值越大, 就越能精確的查找到待淘汰的緩存數(shù)據(jù), 但是也消耗更多的 CPU 計(jì)算, 執(zhí)行效率降低。
同時(shí)為了避免長(zhǎng)時(shí)間找不到足夠的數(shù)據(jù)填充樣例池, 強(qiáng)制寫死了單次尋找數(shù)據(jù)的最大次數(shù)是 maxsteps = N*10。

4.2 再次淘汰遍歷整個(gè)樣例池, 遍歷的對(duì)象通過 lru 計(jì)算處理的值, 只要比待淘汰數(shù)據(jù)池中的任意一條數(shù)據(jù)的小, 就將該數(shù)據(jù)填充至待淘汰數(shù)據(jù)池。
第一次淘汰時(shí), 待淘汰數(shù)據(jù)池為空, 所以第一次淘汰時(shí), 會(huì)將所有的樣例數(shù)據(jù)填充到待淘汰數(shù)據(jù)池中, 這個(gè)池子后面就都會(huì)有數(shù)據(jù), 一直存在著。
后續(xù)的淘汰時(shí), 樣例池 中的數(shù)據(jù)就有可能進(jìn)入到待淘汰數(shù)據(jù)池中, 也有可能不進(jìn)入。

4.3 執(zhí)行淘汰待淘汰數(shù)據(jù)池的尾部向前找到第一個(gè)可以刪除的 key (此時(shí)找到的 key 就是值最小/大的, 既空閑時(shí)間最大/訪問次數(shù)最小/存活時(shí)間最小), 對(duì)其進(jìn)行淘汰

4.4 繼續(xù)淘汰計(jì)算刪除了一個(gè) key 后內(nèi)存釋放了多少, 如果沒達(dá)到要求的釋放量, 就回到步驟 4.1 繼續(xù)淘汰

3.4.1 Redis 內(nèi)存淘汰策略的代碼實(shí)現(xiàn)

入口: 每個(gè)命令的執(zhí)行處

int processCommand(client *c) {
    ...

    // 有設(shè)置最大內(nèi)存 同時(shí)當(dāng)前沒有 lua 腳本超時(shí)的情況
    if (server.maxmemory && !server.lua_timedout) {
        // 有必要時(shí), 嘗試釋放內(nèi)存
        int out_of_memory = freeMemoryIfNeededAndSafe() == C_ERR;

        // 內(nèi)存不夠 同時(shí)執(zhí)行的命令是變更命令 或者 當(dāng)前的客戶端開啟了事務(wù), 同時(shí)執(zhí)行的命令不是 exec 
        if (out_of_memory && (c->cmd->flags & CMD_DENYOOM || (c->flags & CLIENT_MULTI && c->cmd->proc != execCommand))) {
            flagTransaction(c);
            // 響應(yīng) -OOM command not allowed when used memory > 'maxmemory'
            addReply(c, shared.oomerr);
            return C_OK;
        }
    }

    ...
}

int freeMemoryIfNeededAndSafe(void) {
    // 當(dāng)前有 lua 腳本執(zhí)行超時(shí)或者真正加載數(shù)據(jù), 返回成功
    if (server.lua_timedout || server.loading) return C_OK;
    // 是否內(nèi)存如果有必要的話
    return freeMemoryIfNeeded();
}

釋放內(nèi)存的核心函數(shù)

int freeMemoryIfNeeded(void) {

    // 如果是從節(jié)點(diǎn)同時(shí)配置了從節(jié)點(diǎn)忽略內(nèi)存配置, 直接返回
    if (server.masterhost && server.repl_slave_ignore_maxmemory) return C_OK;

    // mem_reported 保存了整個(gè) Redis 已經(jīng)使用的內(nèi)存
    // mem_tofree 經(jīng)過計(jì)算本次應(yīng)該釋放的內(nèi)存, 等于當(dāng)前已經(jīng)使用的內(nèi)存 - 用于主從復(fù)制的復(fù)制緩沖區(qū)大小 - 配置的 maxmemory
    // mem_freed 已經(jīng)釋放了多少內(nèi)存
    size_t mem_reported, mem_tofree, mem_freed;

    long long delta;

    // 從節(jié)點(diǎn)個(gè)數(shù)
    int slaves = listLength(server.slaves);

    // 判斷當(dāng)前的內(nèi)存狀態(tài), 如果足夠, 直接返回
    if (getMaxmemoryState(&mem_reported,NULL,&mem_tofree,NULL) == C_OK)
        return C_OK;

    // 如果配置的策略為  noeviction
    if (server.maxmemory_policy == MAXMEMORY_NO_EVICTION)
        goto cant_free;

    mem_freed = 0;

    // 沒有達(dá)到需要的內(nèi)存大小, 繼續(xù)循環(huán)
    while (mem_freed < mem_tofree) {

        static unsigned int next_db = 0;
        sds bestkey = NULL;
        int bestdbid;
        redisDb *db;
        dict *dict;
        dictEntry *de;

        
        if (server.maxmemory_policy & (MAXMEMORY_FLAG_LRU|MAXMEMORY_FLAG_LFU) || server.maxmemory_policy == MAXMEMORY_VOLATILE_TTL) {
            // LRU + LFU + TTL 策略

            // 淘汰池
            struct evictionPoolEntry *pool = EvictionPoolLRU;

            while(bestkey == NULL) {
                
                // 遍歷 16 個(gè)數(shù)據(jù)庫(kù)
                for (i = 0; i < server.dbnum; i++) {
                    db = server.db+i;
                    // 根據(jù) volatile 或 all 選擇對(duì)應(yīng)的數(shù)據(jù)字典
                    dict = (server.maxmemory_policy & MAXMEMORY_FLAG_ALLKEYS) ? db->dict : db->expires;
                    // 獲取字典的數(shù)據(jù)大小, keys 為當(dāng)前數(shù)據(jù)庫(kù)的 key 的數(shù)量
                    if ((keys = dictSize(dict)) != 0) {
                        evictionPoolPopulate(i, dict, db->dict, pool);
                        total_keys += keys;
                    }
                }

                // 沒有可以處理的 keys
                if (!total_keys) break;

                // EVPOOL_SIZE =  16
                for (k = EVPOOL_SIZE-1; k >= 0; k--) {
                    if (pool[k].key == NULL) continue;
                    bestdbid = pool[k].dbid;

                    // 從數(shù)據(jù)庫(kù)中獲取對(duì)應(yīng)的節(jié)點(diǎn)
                    if (server.maxmemory_policy & MAXMEMORY_FLAG_ALLKEYS) {
                        de = dictFind(server.db[pool[k].dbid].dict, pool[k].key);
                    } else {
                        de = dictFind(server.db[pool[k].dbid].expires, pool[k].key);
                    }

                    // 釋放緩存
                    if (pool[k].key != pool[k].cached)
                        sdsfree(pool[k].key);
                    pool[k].key = NULL;
                    pool[k].idle = 0;

                    // 找到的釋放對(duì)象存在, 先跳出這次循環(huán)
                    if (de) {
                        bestkey = dictGetKey(de);
                        break;
                    } else {
                        // 不存在, 進(jìn)行循環(huán)查找
                    }
                }
            }

        } else if (server.maxmemory_policy == MAXMEMORY_ALLKEYS_RANDOM || server.maxmemory_policy == MAXMEMORY_VOLATILE_RANDOM) {
            // random 策略
        }

        // 刪除找到的 key
        if (bestkey) {
            
            db = server.db+bestdbid;

            // 將 key 封裝為 redisObject 對(duì)象
            robj *keyobj = createStringObject(bestkey,sdslen(bestkey));

            // 傳播 key 過期信息到主從復(fù)制和 AOF 文件
            propagateExpire(db,keyobj,server.lazyfree_lazy_eviction);

            // 獲取當(dāng)前的內(nèi)存大小
            delta = (long long) zmalloc_used_memory();
            // 同步刪除或異步刪除 key
            if (server.lazyfree_lazy_eviction) {
                dbAsyncDelete(db,keyobj);
            else
                dbSyncDelete(db,keyobj);
            }

            // 計(jì)算本次釋放的內(nèi)存
            delta -= (long long) zmalloc_used_memory();
            mem_freed += delta;
            // 釋放創(chuàng)建的 key redisObject 對(duì)象
            decrRefCount(keyobj);
            keys_freed++;

            // 如果有從節(jié)點(diǎn), 推送緩沖區(qū)的數(shù)據(jù)
            if (slaves) flushSlavesOutputBuffers();

            // 支持異步清除 同時(shí) 清除了 16 個(gè) key
            if (server.lazyfree_lazy_eviction && !(keys_freed % 16)) {
                // 再次判斷內(nèi)存情況, 如果內(nèi)存足夠了
                if (getMaxmemoryState(NULL,NULL,NULL,NULL) == C_OK) {
                    // 更新已經(jīng)釋放的緩存大小 = 需要釋放的緩存大小
                    mem_freed = mem_tofree;
                }
            }

        }

        // 本次釋放沒有處理成功任何一個(gè) key
        if (!keys_freed) {
            goto cant_free; 
        }
    }

    return C_OK;


cant_free:
    // 沒有內(nèi)存可以分配了, 做唯一可以做的一件事: 檢查是否有 lazyfree 線程在執(zhí)行釋放內(nèi)存任務(wù), 有進(jìn)行等待
    // 知道沒有任務(wù)或者已有的內(nèi)存達(dá)到了需要釋放的內(nèi)存
    while(bioPendingJobsOfType(BIO_LAZY_FREE)) {
        // 當(dāng)前的內(nèi)存達(dá)到了現(xiàn)在需要的釋放的內(nèi)存, 結(jié)束檢查
        if (((mem_reported - zmalloc_used_memory()) + mem_freed) >= mem_tofree)
            break;
        usleep(1000);
    }
    return C_ERR;  

淘汰池的填充

void evictionPoolPopulate(int dbid, dict *sampledict, dict *keydict, struct evictionPoolEntry *pool) {

    int j, k, count;
    // 采樣結(jié)果數(shù)組, 最大容量為 mamemory_samples 的大小
    dictEntry *samples[server.maxmemory_samples];

    // 從 sampledict 字典中采樣 server.maxmemory_samples 個(gè) key 存放到 samples, 同時(shí)返回總共采樣的多少個(gè)
    count = dictGetSomeKeys(sampledict,samples,server.maxmemory_samples);

    for (j = 0; j < count; j++) {

        unsigned long long idle;
        sds key;
        robj *o;
        dictEntry *de;

        de = samples[j];
        key = dictGetKey(de);       

        if (server.maxmemory_policy != MAXMEMORY_VOLATILE_TTL) {
            if (sampledict != keydict) de = dictFind(keydict, key);
            o = dictGetVal(de);
        }

        if (server.maxmemory_policy & MAXMEMORY_FLAG_LRU) {
            // LRU 算法
            idle = estimateObjectIdleTime(o);
        } else if (server.maxmemory_policy & MAXMEMORY_FLAG_LFU) {
            // LRU 算法
            idle = 255 - LFUDecrAndReturn(o);
        } else if (server.maxmemory_policy == MAXMEMORY_VOLATILE_TTL) {
            // TTL 算法
            idle = ULLONG_MAX - (long)dictGetVal(de);
        } else {
            serverPanic("Unknown eviction policy in evictionPoolPopulate()");
        }

        k = 0;
        // 從 evictionPoolEntry 淘汰池中找到第一個(gè)閑置時(shí)間比當(dāng)前淘汰 key 大的
        while (k < EVPOOL_SIZE && pool[k].key && pool[k].idle < idle) 
            k++;
        
        if (k == 0 && pool[EVPOOL_SIZE-1].key != NULL) {
            // 如果找到的 key 比淘汰池中閑置時(shí)間最小的 key 還小, 同時(shí)淘汰池沒有空間了, 則跳過這個(gè) key
            continue;
        } else if (k < EVPOOL_SIZE && pool[k].key == NULL) {
            // 插入的位置為空, 直接進(jìn)入到下面的賦值節(jié)點(diǎn)
        } else {
            // 核心就是將找到的位置 k 空出來

            // 最后的位置為空
            if (pool[EVPOOL_SIZE-1].key == NULL) {
                // 將原本 k 位置和后面的數(shù)據(jù)向后移動(dòng) 1 位 
                sds cached = pool[EVPOOL_SIZE-1].cached;
                memmove(pool+k+1, pool+k, sizeof(pool[0])*(EVPOOL_SIZE-k-1));
                pool[k].cached = cached;
            } else {
                // 插入的位置不為空 
                // 將原本 k 位置前面的數(shù)據(jù)往前移動(dòng) 1 位, 原本的第一位丟棄
                k--;
                sds cached = pool[0].cached;
                if (pool[0].key != pool[0].cached) sdsfree(pool[0].key);
                memmove(pool,pool+1,sizeof(pool[0])*k);
                pool[k].cached = cached;
            }
        }

        // 把找到的 key 放到 k 的位置
        int klen = sdslen(key);
        // EVPOOL_CACHED_SDS_SIZE = 255
        if (klen > EVPOOL_CACHED_SDS_SIZE) {
            // 創(chuàng)建一個(gè)新的 key 賦值給 pool[k].key
            pool[k].key = sdsdup(key);
        } else {
            // 從 key 中拷貝 klen + 1 的長(zhǎng)度到 pool[k].cached
            memcpy(pool[k].cached,key,klen+1);

            sdssetlen(pool[k].cached,klen);
            pool[k].key = pool[k].cached;
        }
        pool[k].idle = idle;
        pool[k].dbid = dbid;
    }
}

unsigned int dictGetSomeKeys(dict *d, dictEntry **des, unsigned int count) {
    unsigned long j; 
    unsigned long tables;
    unsigned long stored = 0, maxsizemask;
    unsigned long maxsteps;

    // 字典中的數(shù)據(jù)量小于需要的個(gè)數(shù), 取的個(gè)數(shù)變?yōu)樽值涞臄?shù)據(jù)大小
    if (dictSize(d) < count) count = dictSize(d);

    // 最大次數(shù) = 次數(shù) * 10
    maxsteps = count*10;

    /* 如果字典在 rehash 中, 嘗試 count 一樣次數(shù)的 rehash */
    for (j = 0; j < count; j++) {
        if (dictIsRehashing(d))
            _dictRehashStep(d);
        else
            break;
    }

    // 獲取總的 HashTable 個(gè)數(shù), 如果在 rehash 中就是 2 個(gè), 否則 1 個(gè)
    tables = dictIsRehashing(d) ? 2 : 1;
    // 獲取數(shù)組大小的掩碼, 用于計(jì)算索引值
    maxsizemask = d->ht[0].sizemask;
    if (tables > 1 && maxsizemask < d->ht[1].sizemask)
        maxsizemask = d->ht[1].sizemask;

    // 隨機(jī)獲取一個(gè)位置
    unsigned long i = random() & maxsizemask;
    unsigned long emptylen = 0;

    // 獲取到的個(gè)數(shù)沒達(dá)到需要的個(gè)數(shù) 或者嘗試的次數(shù)還沒達(dá)到 0 
    while(stored < count && maxsteps--) {
        for (j = 0; j < tables; j++) {
    
            // 如果字典在 rehash 中, 同時(shí)當(dāng)前處理的是第一個(gè)字典, 處理的位置小于 rehash 下次處理的位置, 
            // 則跳過這個(gè)位置, 直接到 rehash 下次處理的位置
            // 因?yàn)榈谝粋€(gè)字典 rehash 下次處理的位置前的數(shù)據(jù)都遷移到第二個(gè)字典中了
            if (tables == 2 && j == 0 && i < (unsigned long) d->rehashidx) {
                // 防止獲取數(shù)據(jù)的位置 i 超過第二個(gè)字典的大小
                if (i >= d->ht[1].size)
                    i = d->rehashidx;
                else
                    continue;
            }

            // 超過了數(shù)組的長(zhǎng)度
            if (i >= d->ht[j].size) continue;
            // 獲取對(duì)應(yīng)位置的數(shù)據(jù)
            dictEntry *he = d->ht[j].table[i];

            // 對(duì)應(yīng)的位置為 null
            if (he == NULL) {
                emptylen++;
                // 獲取 null 數(shù)據(jù)的次數(shù)大于 5 次 同時(shí) 大于需要的過期 key 的個(gè)數(shù)
                if (emptylen >= 5 && emptylen > count) {
                    // 重新計(jì)算獲取的位置 i, 重新獲取
                    i = random() & maxsizemask;
                    emptylen = 0;
                }
            } else {
                emptylen = 0;
                while (he) {
                    // he 本身是鏈表, 計(jì)算從鏈表中獲取到的個(gè)數(shù), 夠了結(jié)束, 不夠就 i+1, 從字典的下一個(gè)位置繼續(xù)獲取
                    *des = he;
                    des++;
                    he = he->next;
                    stored++;
                    if (stored == count) return stored;
                }
            }
        }
        i = (i+1) & maxsizemask;
    }
    return stored;
}

dictGetSomeKeys 函數(shù)簡(jiǎn)單理解就是, 通過 random() 得到一個(gè)隨機(jī)數(shù), 這個(gè)隨機(jī)數(shù) & 數(shù)組大小的掩碼, 得到一個(gè)位置, 從這個(gè)位置向后獲取 count 個(gè)過期 key。
這個(gè)處理的過程中

有可能字典在 rehash 中, 數(shù)據(jù)分布在 2 個(gè)字典中, 所以有時(shí)第一個(gè)字典獲取不到需要到第二個(gè)字典獲取

需要的過期 key 的個(gè)數(shù)小于等于 5 個(gè), 通過計(jì)算得到的位置獲取到的數(shù)據(jù)連續(xù)都為 null, 則重新通過 random() 計(jì)算一個(gè)新的位置

為了防止長(zhǎng)時(shí)間的需要, 在外面還計(jì)算了最大的循環(huán)次數(shù)

從上面的代碼實(shí)現(xiàn)可以看出, Redis 內(nèi)部對(duì) LRU + LFU 的實(shí)現(xiàn)都是不是很正式的實(shí)現(xiàn), 帶有一定的誤差和隨機(jī)性。

其本身考慮主用是從性能上做的折中。比如傳統(tǒng)的 LRU 算法, 需要將所有的數(shù)據(jù)維護(hù)一個(gè)雙向鏈表

訪問節(jié)點(diǎn), 如果節(jié)點(diǎn)存在, 則將該節(jié)點(diǎn)移動(dòng)到鏈表的頭節(jié)點(diǎn), 并返回節(jié)點(diǎn)值, 不存在就返回 null

新增節(jié)點(diǎn), 節(jié)點(diǎn)不存在, 就在鏈表的頭部新增節(jié)點(diǎn), 如果節(jié)點(diǎn)存在, 則更新節(jié)點(diǎn)數(shù)據(jù), 然后將節(jié)點(diǎn)移動(dòng)到鏈表的頭節(jié)點(diǎn)

需要消耗的內(nèi)存在維護(hù)鏈表的 + 節(jié)點(diǎn)的挑戰(zhàn), 對(duì)于一個(gè)大規(guī)模的數(shù)據(jù), 這個(gè)消耗是非常大的。
所以 Redis 采用了其思想, 通過另外的方式達(dá)到類似的效果。

4 附錄: Redis 幾個(gè)對(duì)象的介紹

4.1 Redis 中的字典

4.2.1 HashTable

存儲(chǔ)在 Redis 中的基本都是鍵值對(duì), 而這種鍵值對(duì)存儲(chǔ), 同時(shí)可以通過 key 快速查詢到對(duì)應(yīng)的 value, 最合適的實(shí)現(xiàn)就是 HashTable 了。
而實(shí)現(xiàn) HashTable 的底層結(jié)構(gòu),基本就是一個(gè)數(shù)組或者鏈表, 同時(shí)為了解決 hash 沖突, 數(shù)組或鏈表的每個(gè)節(jié)點(diǎn)定義為一個(gè)鏈表。

Redis 中對(duì) HashTable 的實(shí)現(xiàn)也是如此, 大體如下

Alt 'dictht 設(shè)計(jì)'

Redis 中實(shí)現(xiàn)的 HastTable 叫做 dictht (Dictionary Hash Table)

對(duì)應(yīng)的定義如下:

typedef struct dictht {
    // 存放節(jié)點(diǎn)的數(shù)組
    dictEntry **table;
    // HashTable 的大小, 2 的冪次方
    unsigned long size;
    // HashTable 的大小掩碼, 用于計(jì)算索引值
    unsigned long sizemask;
    // HashTable 中已經(jīng)使用的節(jié)點(diǎn)個(gè)數(shù)
    unsigned long used;
} dictht;

真實(shí)存儲(chǔ)數(shù)據(jù)的鏈表節(jié)點(diǎn)的定義如下:

typedef struct dictEntry {
    // 存儲(chǔ)的鍵值對(duì)的 key
    void *key;
    // 存儲(chǔ)的鍵值對(duì)的 value
    union {
        void *val;
        uint64_t u64;
        int64_t s64;
        double d;
    } v;
    // 指向下一個(gè)節(jié)點(diǎn)
    struct dictEntry *next;
} dictEntry;

key + v(value) + next 一個(gè)簡(jiǎn)單的鏈表定義。
有點(diǎn)特殊的就是對(duì)應(yīng)著 value 屬性的 v 的定義是一個(gè)聯(lián)合體, 會(huì)在不同場(chǎng)景下使用不同的字段,
比如一個(gè)鍵值對(duì)的過期時(shí)間就存放在 s64 中, 這個(gè) value 存放的值就放在 val 中。

一個(gè) dictEntry 的字段存放內(nèi)容大體如下:

Alt 'dictEntry 內(nèi)容'

4.2.2 字典

在使用 HashTable 時(shí), 都需要提前聲明好容量, 而隨著程序的運(yùn)行, 存放到 HashTable 的數(shù)據(jù)會(huì)越來越多, 最終達(dá)到上限, 這時(shí)就需要進(jìn)行擴(kuò)容了。
在 Java 的 HashMap 的擴(kuò)容過程

創(chuàng)建一個(gè)更大容量的數(shù)組

將 HashMap 中舊數(shù)組一次性遷移到新的數(shù)組中

清除掉舊數(shù)組

這個(gè)擴(kuò)容沒多大問題, 但是放到 Redis 中合適嗎?

Redis 是一個(gè)存內(nèi)存的數(shù)據(jù)庫(kù), 所有的數(shù)據(jù)都存放在內(nèi)存中, 基本是 GB 級(jí)別的數(shù)據(jù)量, 每次擴(kuò)容遷移的數(shù)據(jù)量很多

Redis 是一個(gè)單線程的數(shù)據(jù)庫(kù), 一次只能處理一個(gè)事情, 如果全力在做擴(kuò)容, 那么其他的請(qǐng)求將無法處理

所以 Redis 采用了一種 漸進(jìn)式 rehash 的方法解決擴(kuò)容縮容的問題, 過程如下

維護(hù) 2 個(gè) dictht, 一個(gè)是真實(shí)存儲(chǔ)數(shù)據(jù)的 HashTable A, 一個(gè)是擴(kuò)容后存儲(chǔ)數(shù)據(jù)的 TableTable B + 一個(gè) rehash 位置的索引, 初始值為 0

在 rehash >=0 期間, 每次對(duì) HashTable 進(jìn)行操作, 除了正常的操作外, 還會(huì)將 A rehash 位置的數(shù)據(jù)都遷移到 B, 然后 rehash + 1

隨著對(duì) HashTable 的不斷操作, 最終 A 中的數(shù)據(jù)都會(huì)遷移到 B, 這時(shí)將 rehash 設(shè)置為 -1

基于上面的漸進(jìn)式 rehash 分析, 實(shí)際是需要 2 個(gè) dictht, 所以 Redis 在此至上多封裝了一層

typedef struct dict {
    dictType *type;
    void *privdata;
    dictht ht[2];   // 2 個(gè) HashTable
    long rehashidx; // rehash 的索引
    unsigned long iterators;
} dict;

這個(gè)就是 Redis 中的字典, 用于存儲(chǔ)鍵值對(duì)的結(jié)構(gòu)。

在將這個(gè)結(jié)構(gòu)放到一個(gè) redisDb 就是我們常見的 Redis 數(shù)據(jù)庫(kù)了

typedef struct redisDb {
    dict *dict; 
    dict *expires;
    ....
} redisDb;

redisDb 就是我們常說的 Redis 16 個(gè)數(shù)據(jù)庫(kù)的定義了。 每個(gè)數(shù)據(jù)庫(kù)中都有 2 個(gè)字典

dict 正常的字典, 存儲(chǔ)沒有設(shè)置過期時(shí)間的鍵值對(duì)

expires 過期字典, 存儲(chǔ)設(shè)置了過期時(shí)間的鍵值對(duì)

4.2 Redis 的內(nèi)存待淘汰池

struct evictionPoolEntry {
    unsigned long long idle;    // 對(duì)象空閑時(shí)間 (使用的算法是 LFU 則是逆頻率)
    sds key;                    // 待淘汰的鍵值對(duì)的 key
    sds cached;                 // 緩存的 key 名稱 SDS 對(duì)象
    int dbid;                   // 待淘汰鍵值對(duì)的 key 所在的數(shù)據(jù)庫(kù) ID
};

5 參考

Redis源碼解析-LRU

Redis內(nèi)存兜底策略——內(nèi)存淘汰及回收機(jī)制

到此這篇關(guān)于深入理解Redis內(nèi)存回收和內(nèi)存淘汰機(jī)制的文章就介紹到這了,更多相關(guān)Redis內(nèi)存回收和內(nèi)存淘汰機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redis實(shí)現(xiàn)加鎖的幾種方法示例詳解

    redis實(shí)現(xiàn)加鎖的幾種方法示例詳解

    這篇文章主要給大家介紹了關(guān)于redis實(shí)現(xiàn)加鎖的幾種方法,加鎖命令分別是INCR、SETNX和SET,文中給出了詳細(xì)的示例代碼,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • redis使用skiplist跳表的原因解析

    redis使用skiplist跳表的原因解析

    經(jīng)常會(huì)有人問這個(gè)問題,redis中為什么要使用跳表?這個(gè)問題,redis作者已經(jīng)給出過明確答案,今天通過本文再給大家講解下這個(gè)問題,對(duì)redis?skiplist跳表知識(shí)感興趣的朋友一起看看吧
    2022-10-10
  • Redis高效率原因及數(shù)據(jù)結(jié)構(gòu)分析

    Redis高效率原因及數(shù)據(jù)結(jié)構(gòu)分析

    這篇文章主要為大家詳細(xì)的介紹了Redis高效的原因以及分析了Redis高效的數(shù)據(jù)結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 如何用redis?setNX命令來加鎖

    如何用redis?setNX命令來加鎖

    這篇文章主要介紹了如何用redis?setNX命令來加鎖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Redis實(shí)現(xiàn)布隆過濾器的代碼詳解

    Redis實(shí)現(xiàn)布隆過濾器的代碼詳解

    布隆過濾器(Bloom?Filter)是Redis?4.0版本提供的新功能,它被作為插件加載到Redis服務(wù)器中,給Redis提供強(qiáng)大的去重功能,本文將給大家詳細(xì)介紹一下Redis布隆過濾器,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-07-07
  • 讓Redis在你的系統(tǒng)中發(fā)揮更大作用的幾點(diǎn)建議

    讓Redis在你的系統(tǒng)中發(fā)揮更大作用的幾點(diǎn)建議

    Redis在很多方面與其他數(shù)據(jù)庫(kù)解決方案不同:它使用內(nèi)存提供主存儲(chǔ)支持,而僅使用硬盤做持久性的存儲(chǔ);它的數(shù)據(jù)模型非常獨(dú)特,用的是單線程。另一個(gè)大區(qū)別在于,你可以在開發(fā)環(huán)境中使用Redis的功能,但卻不需要轉(zhuǎn)到Redis
    2014-06-06
  • Redis分布式鎖Redlock的實(shí)現(xiàn)

    Redis分布式鎖Redlock的實(shí)現(xiàn)

    本文主要介紹了Redis分布式鎖Redlock的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Linux下Redis安裝使用教程

    Linux下Redis安裝使用教程

    這篇文章主要為大家詳細(xì)介紹了Linux下Redis安裝使用教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Redis過期數(shù)據(jù)是否會(huì)被立馬刪除

    Redis過期數(shù)據(jù)是否會(huì)被立馬刪除

    這篇文章主要為大家介紹了Redis過期數(shù)據(jù)會(huì)被立馬刪除么的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Redisson 加鎖解鎖的實(shí)現(xiàn)

    Redisson 加鎖解鎖的實(shí)現(xiàn)

    本文主要介紹了Redisson 加鎖解鎖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論

久久丁香花五月天色婷婷| 日韩美女综合中文字幕pp| 老司机深夜免费福利视频在线观看| 天天干天天搞天天摸| 大黑人性xxxxbbbb| 黄色三级网站免费下载| 丝袜肉丝一区二区三区四区在线看| 日本韩国在线观看一区二区| 欧美成一区二区三区四区| 久久这里只有精品热视频| 亚洲av无硬久久精品蜜桃| 熟妇一区二区三区高清版| 成人免费公开视频无毒| 黄色三级网站免费下载| 午夜场射精嗯嗯啊啊视频| 国产成人午夜精品福利| 一区二区三区激情在线| 特黄老太婆aa毛毛片| 天天干天天操天天玩天天射| 啪啪啪18禁一区二区三区 | 欧美亚洲国产成人免费在线| 午夜频道成人在线91| 日本在线一区二区不卡视频| 日韩av中文在线免费观看| 亚洲日本一区二区久久久精品| 亚洲2021av天堂| 久久h视频在线观看| okirakuhuhu在线观看| 午夜在线观看岛国av,com| lutube在线成人免费看| 欧美viboss性丰满| 久久久精品999精品日本| 丰满的继坶3中文在线观看| 黑人巨大的吊bdsm| 国产va精品免费观看| 老司机你懂得福利视频| 日本脱亚入欧是指什么| 91亚洲国产成人精品性色| 日韩美女综合中文字幕pp| 成人高潮aa毛片免费| 亚洲在线观看中文字幕av| 国产精品欧美日韩区二区| 夜色17s精品人妻熟女| 欧美老妇精品另类不卡片| 国产成人综合一区2区| 久久永久免费精品人妻专区| 国产综合精品久久久久蜜臀| 精品91自产拍在线观看一区| 天堂资源网av中文字幕| 成熟熟女国产精品一区| 国产精品成人xxxx| 欧美亚洲中文字幕一区二区三区 | av网址在线播放大全| 99热碰碰热精品a中文| 国产日韩精品一二三区久久久| 老有所依在线观看完整版| 青青青青青青草国产| 91国产在线免费播放| 黄色在线观看免费观看在线| 在线免费91激情四射| 色哟哟国产精品入口| 自拍偷拍日韩欧美亚洲| 国产大鸡巴大鸡巴操小骚逼小骚逼| 男人插女人视频网站| 亚洲 欧美 自拍 偷拍 在线| 精品久久久久久久久久久久人妻| 久久精品36亚洲精品束缚| 日本乱人一区二区三区| 中文字幕+中文字幕| 亚洲人成精品久久久久久久| 欧美成人综合视频一区二区 | 精品人人人妻人人玩日产欧| 免费看国产又粗又猛又爽又黄视频 | 亚洲精品在线资源站| 一级黄色片夫妻性生活| 91国产资源在线视频| 中文字幕在线欧美精品| 亚洲美女美妇久久字幕组| 在线播放一区二区三区Av无码| av一本二本在线观看| 中文字幕人妻被公上司喝醉在线| AV无码一区二区三区不卡| 懂色av之国产精品| 日韩欧美亚洲熟女人妻| 久草视频在线免播放| 2020久久躁狠狠躁夜夜躁| 天天日夜夜操天天摸| 久久久久久久久久久免费女人| rct470中文字幕在线| 91she九色精品国产| 一区二区三区日韩久久| 97人妻色免费视频| 久久丁香花五月天色婷婷| 粉嫩小穴流水视频在线观看| 水蜜桃国产一区二区三区| 天天操天天插天天色| 免费看国产av网站| v888av在线观看视频| 国产视频一区二区午夜| 精品av国产一区二区三区四区| 性色蜜臀av一区二区三区| 喷水视频在线观看这里只有精品 | 老司机在线精品福利视频| 精品日产卡一卡二卡国色天香| 天天操天天干天天插| 超黄超污网站在线观看| 日韩av有码一区二区三区4| 阴茎插到阴道里面的视频| 极品粉嫩小泬白浆20p主播| 欧美天堂av无线av欧美| 丝袜长腿第一页在线| 欧亚日韩一区二区三区观看视频| 欧美日本在线视频一区| 91综合久久亚洲综合| 青青青爽视频在线播放| 亚洲欧美激情国产综合久久久| 成人综合亚洲欧美一区 | okirakuhuhu在线观看| 亚洲国产免费av一区二区三区 | 丝袜长腿第一页在线| 91久久人澡人人添人人爽乱| 91国产资源在线视频| 欧美男同性恋69视频| 中文字幕亚洲久久久| 久久永久免费精品人妻专区 | 亚洲无码一区在线影院| 亚洲中文字幕校园春色| av中文字幕国产在线观看| 香蕉91一区二区三区| 亚洲超碰97人人做人人爱| 日本av高清免费网站| 视频 国产 精品 熟女 | 日本少妇精品免费视频| 大香蕉伊人中文字幕| 午夜免费观看精品视频| 中出中文字幕在线观看| 中文字幕在线观看国产片| 动色av一区二区三区| 国产麻豆剧传媒精品国产av蜜桃| 欧美男同性恋69视频| 天天干天天日天天干天天操| 久久这里只有精品热视频| 激情伦理欧美日韩中文字幕| 日韩成人性色生活片| 国产成人自拍视频播放| 国产麻豆乱子伦午夜视频观看| 成人30分钟免费视频| 水蜜桃国产一区二区三区| 天天日天天日天天射天天干| 国产午夜福利av导航| 亚洲午夜电影之麻豆| 99国内小视频在现欢看| 天天通天天透天天插| 亚洲av自拍偷拍综合| 国产97视频在线精品| 大陆精品一区二区三区久久| 国产片免费观看在线观看| 美洲精品一二三产区区别| 国产真实乱子伦a视频| 中出中文字幕在线观看| 大黑人性xxxxbbbb| 久久一区二区三区人妻欧美| 欧美精产国品一二三产品价格| 91久久综合男人天堂| 青青青爽视频在线播放| 亚洲国产精品中文字幕网站| 少妇深喉口爆吞精韩国| 中文字幕av第1页中文字幕| 亚洲高清视频在线不卡| 久草视频首页在线观看| av线天堂在线观看| av成人在线观看一区| 亚洲欧美成人综合在线观看| aaa久久久久久久久| 日本高清成人一区二区三区| 涩爱综合久久五月蜜臀| 激情五月婷婷免费视频| 国产精品一区二区久久久av| 91九色porny国产蝌蚪视频| 97精品综合久久在线| 欧美3p在线观看一区二区三区| 亚洲嫩模一区二区三区| 欧美熟妇一区二区三区仙踪林| 欧美xxx成人在线| 1区2区3区4区视频在线观看| 新97超碰在线观看| 换爱交换乱高清大片| 亚洲精品 日韩电影| 男人操女人的逼免费视频| 天天日天天添天天爽| 国产内射中出在线观看| 三级av中文字幕在线观看| 97人人妻人人澡人人爽人人精品| 国产亚洲精品视频合集| 超级av免费观看一区二区三区| 黄色资源视频网站日韩| 天天摸天天亲天天舔天天操天天爽| lutube在线成人免费看| 3337p日本欧洲大胆色噜噜| 五十路丰满人妻熟妇| 精彩视频99免费在线| 在线观看的a站 最新| 在线免费观看黄页视频| 亚洲1卡2卡三卡4卡在线观看| 一区二区免费高清黄色视频| 久久久久久99国产精品| 日韩精品中文字幕福利| 伊人开心婷婷国产av| 久草视频在线免播放| 93精品视频在线观看| 天天插天天狠天天操| 日韩欧美亚洲熟女人妻| 熟女人妻在线中出观看完整版| av中文字幕在线观看第三页| 天天夜天天日天天日| 免费69视频在线看| 中国老熟女偷拍第一页| 在线免费观看日本伦理| 日本www中文字幕| 午夜在线观看一区视频| 阴茎插到阴道里面的视频| 久久久久久久久久一区二区三区| 丰满熟女午夜福利视频| 91快播视频在线观看| 亚洲成av人无码不卡影片一| 大学生A级毛片免费视频| 午夜在线精品偷拍一区二| 扒开让我视频在线观看| 国产亚洲成人免费在线观看| 在线观看911精品国产 | 三级等保密码要求条款| 91p0rny九色露脸熟女| 国产女人被做到高潮免费视频| 欧美亚洲牲夜夜综合久久| 精品一区二区三区在线观看| 婷婷久久久综合中文字幕| 高潮视频在线快速观看国家快速| 天天操天天弄天天射| 亚洲的电影一区二区三区| 日韩成人性色生活片| av天堂加勒比在线| 大陆精品一区二区三区久久| 888亚洲欧美国产va在线播放| 国产麻豆91在线视频| 岛国青草视频在线观看| 午夜在线观看一区视频| 精彩视频99免费在线| 视频一区二区综合精品| 精品国产亚洲av一淫| 亚洲无线观看国产高清在线| 深田咏美亚洲一区二区| 亚洲变态另类色图天堂网| 欧美黑人性猛交xxxxⅹooo| 国产亚洲欧美另类在线观看| xxx日本hd高清| 成人国产小视频在线观看| 亚洲天堂av最新网址| 啊啊好慢点插舔我逼啊啊啊视频| 亚洲蜜臀av一区二区三区九色| 国产精品久久久久网| 欧美日韩精品永久免费网址| 国产使劲操在线播放| AV天堂一区二区免费试看| 果冻传媒av一区二区三区| 一区二区三区久久中文字幕| 97超碰国语国产97超碰| 一区二区三区四区视频在线播放 | 黑人3p华裔熟女普通话| 一区二区三区精品日本| 97小视频人妻一区二区| 免费观看丰满少妇做受| 久久久久久久精品老熟妇| 国产精品国色综合久久 | 精品一区二区三区欧美| 成人24小时免费视频| 一区二区三区蜜臀在线| 动漫精品视频在线观看| 免费福利av在线一区二区三区| 欧美成人一二三在线网| 一级黄色片夫妻性生活| 成人亚洲精品国产精品 | 熟女国产一区亚洲中文字幕| 2o22av在线视频| 少妇人妻100系列| 在线亚洲天堂色播av电影| 区一区二区三国产中文字幕| 美女吃鸡巴操逼高潮视频| 在线免费观看欧美小视频| 亚洲va国产va欧美精品88| 动漫美女的小穴视频| 中文字幕,亚洲人妻| 天天通天天透天天插| 午夜91一区二区三区| 国产精品人妻一区二区三区网站| av视屏免费在线播放| 亚洲在线免费h观看网站| 久草电影免费在线观看| 特黄老太婆aa毛毛片| 青青尤物在线观看视频网站 | 欧美日本在线观看一区二区| 日韩欧美一级黄片亚洲| 男人天堂色男人av| 日本中文字幕一二区视频| 久草福利电影在线观看| 亚洲国产在线精品国偷产拍| 日本18禁久久久久久| 精品久久久久久久久久中文蒉| av大全在线播放免费| 亚洲精品久久综合久| 老司机免费视频网站在线看| 日本免费视频午夜福利视频| 亚洲va欧美va人人爽3p| 中文字幕av熟女人妻| 爆乳骚货内射骚货内射在线 | v888av在线观看视频| 一级黄片大鸡巴插入美女 | 3344免费偷拍视频| 国产露脸对白在线观看| 欧美日韩精品永久免费网址| 国产精品国产三级麻豆| 欧美老妇精品另类不卡片| 成人av中文字幕一区| 亚洲午夜在线视频福利| 亚洲福利精品福利精品福利| 91在线视频在线精品3| 亚洲av可乐操首页| 影音先锋女人av噜噜色| 在线观看国产网站资源| 国产片免费观看在线观看| 亚洲一区二区激情在线| 欧美va亚洲va天堂va| 青青草人人妻人人妻| 91一区精品在线观看| 精品91自产拍在线观看一区| 国产一区二区三免费视频| 亚洲免费av在线视频| 日本后入视频在线观看 | 男人天堂色男人av| 老司机你懂得福利视频| 888欧美视频在线| av在线shipin| 毛片一级完整版免费| 日本裸体熟妇区二区欧美| 亚洲 国产 成人 在线| 一区二区三区麻豆福利视频| 风流唐伯虎电视剧在线观看| 在线观看视频一区麻豆| 亚洲伊人av天堂有码在线| 欧亚乱色一区二区三区| 欧洲精品第一页欧洲精品亚洲| 久久国产精品精品美女| 成人sm视频在线观看| 九九热99视频在线观看97| 啊慢点鸡巴太大了啊舒服视频| 亚洲av在线观看尤物| 在线视频自拍第三页| 日本av在线一区二区三区| 自拍偷拍亚洲另类色图| 中文字幕人妻一区二区视频| 性色蜜臀av一区二区三区| av在线资源中文字幕| 粉嫩av懂色av蜜臀av| 午夜在线精品偷拍一区二| 亚洲成人激情av在线| 天天插天天狠天天操| 人妻丝袜榨强中文字幕| av网站色偷偷婷婷网男人的天堂| 啊慢点鸡巴太大了啊舒服视频| 久久国产精品精品美女| 孕妇奶水仑乱A级毛片免费看| 韩国女主播精品视频网站| 亚洲精品午夜aaa久久| 伊人综合免费在线视频| yellow在线播放av啊啊啊 | 美女操逼免费短视频下载链接| 黑人3p华裔熟女普通话| 美女小视频网站在线| 久久久91蜜桃精品ad| 欧美男同性恋69视频| 全国亚洲男人的天堂| 国产黄色大片在线免费播放| 日韩av大胆在线观看| av天堂中文字幕最新| 91福利视频免费在线观看| 大学生A级毛片免费视频| 亚洲 中文 自拍 无码| 成人国产激情自拍三区| 中文字幕,亚洲人妻| 国产精品人妻66p| 91色网站免费在线观看| 91色网站免费在线观看| 亚洲欧美国产综合777| 超碰97免费人妻麻豆| 中文字幕一区的人妻欧美日韩| 国产清纯美女al在线| 中文字幕亚洲中文字幕| 成人亚洲国产综合精品| 国产又粗又硬又猛的毛片视频| 97少妇精品在线观看| 伊人网中文字幕在线视频| 99精品免费久久久久久久久a| 狠狠嗨日韩综合久久| 动漫美女的小穴视频| 夜夜嗨av一区二区三区中文字幕| 嫩草aⅴ一区二区三区| 肏插流水妹子在线乐播下载| 在线观看国产网站资源| 中文字幕在线第一页成人| 国产在线拍揄自揄视频网站| 深田咏美亚洲一区二区| 老司机欧美视频在线看| 男人操女人逼逼视频网站| 国产精品自拍偷拍a| av手机免费在线观看高潮| 亚洲另类伦春色综合小| 亚洲欧美色一区二区| 国产av福利网址大全| 亚洲精品久久视频婷婷| 国产精品一二三不卡带免费视频| 东京热男人的av天堂| 最新日韩av传媒在线| 国内精品在线播放第一页| 黄色大片男人操女人逼| 亚洲va欧美va人人爽3p| 青青青激情在线观看视频| 91九色porny国产蝌蚪视频| 成年人啪啪视频在线观看| 亚洲激情,偷拍视频| 91九色porny蝌蚪国产成人| 午夜成午夜成年片在线观看| 日韩伦理短片在线观看| 2022中文字幕在线| 特级欧美插插插插插bbbbb| 亚洲高清国产拍青青草原| 任你操视频免费在线观看| 家庭女教师中文字幕在线播放| 精品一区二区三四区| 国产视频网站一区二区三区| 在线观看视频一区麻豆| 国产精品一二三不卡带免费视频| 午夜免费体验区在线观看| 黑人进入丰满少妇视频| 国产精品精品精品999| 97国产精品97久久| 亚洲另类伦春色综合小| 日韩a级黄色小视频| 内射久久久久综合网| 一级A一级a爰片免费免会员| 中文字幕一区二 区二三区四区| 亚洲欧美精品综合图片小说| 狠狠的往里顶撞h百合| 欧美日韩不卡一区不区二区| 亚洲熟妇久久无码精品| 日本阿v视频在线免费观看| 成人av天堂丝袜在线观看| 成年午夜免费无码区| 最新91精品视频在线| 亚洲一区二区久久久人妻| 性欧美日本大妈母与子| 老司机午夜精品视频资源| 天天干天天日天天干天天操| 99精品久久久久久久91蜜桃| 93精品视频在线观看| 亚洲欧美清纯唯美另类| 最近中文2019年在线看| 亚洲高清国产自产av| 精品一区二区三区欧美| 国产精品久久久久国产三级试频| 久久艹在线观看视频| 一区二区在线观看少妇| 午夜成午夜成年片在线观看 | 国产高清精品极品美女| 天天想要天天操天天干| 91人妻精品一区二区在线看| 香港三日本三韩国三欧美三级| 亚洲伊人久久精品影院一美女洗澡| 黄网十四区丁香社区激情五月天| rct470中文字幕在线| 亚洲av色香蕉一区二区三区| yy6080国产在线视频| 99热这里只有精品中文| 中文字幕在线永久免费播放| 久草视频首页在线观看| 欧美日韩亚洲国产无线码| 黄色中文字幕在线播放| 在线观看国产网站资源| 久久人人做人人妻人人玩精品vr| 2021最新热播中文字幕| 亚洲av一妻不如妾| 福利在线视频网址导航| 欧美日本国产自视大全| 91免费观看国产免费| 天堂资源网av中文字幕| 亚洲欧美福利在线观看| av在线播放国产不卡| 天天躁日日躁狠狠躁躁欧美av| 欧美日本aⅴ免费视频| 97青青青手机在线视频| 最新日韩av传媒在线| 国产黄色a级三级三级三级| 91一区精品在线观看| 亚洲午夜高清在线观看| 欧美精品国产综合久久| av在线免费中文字幕| 日韩a级黄色小视频| 欧洲亚洲欧美日韩综合| 适合午夜一个人看的视频| 久久麻豆亚洲精品av| 午夜国产福利在线观看| 国产三级片久久久久久久| 亚洲成人激情av在线| 亚洲成人激情av在线| 19一区二区三区在线播放| 天天摸天天亲天天舔天天操天天爽| 97少妇精品在线观看| 精品黑人一区二区三区久久国产| 美女福利视频网址导航| 成年人中文字幕在线观看| 视频久久久久久久人妻| 国产白袜脚足J棉袜在线观看| 老师让我插进去69AV| 国产一区二区久久久裸臀| 久久久麻豆精亚洲av麻花| 日韩北条麻妃一区在线| 成人久久精品一区二区三区| 欧美国品一二三产区区别| 欧美女同性恋免费a| 青青青aaaa免费| 99精品视频在线观看婷婷| 欧美精品国产综合久久| 日日操夜夜撸天天干| 美女操逼免费短视频下载链接 | 成人高潮aa毛片免费| 国产又粗又硬又猛的毛片视频 | 久久热久久视频在线观看| 一级A一级a爰片免费免会员| 免费观看污视频网站| 老熟妇xxxhd老熟女| 国产男女视频在线播放| jiuse91九色视频| 免费成人av中文字幕| 阿v天堂2014 一区亚洲| 色秀欧美视频第一页| 亚洲精品国产综合久久久久久久久| 人妻丝袜诱惑我操她视频| 2022国产综合在线干| 国产亚洲精品品视频在线| eeuss鲁片一区二区三区| 青青青青青青草国产| 午夜激情久久不卡一区二区| 国产又粗又黄又硬又爽| 人妻无码色噜噜狠狠狠狠色| 免费成人av中文字幕| 五月天中文字幕内射| 国产高清在线在线视频| 国产亚洲成人免费在线观看 | 婷婷激情四射在线观看视频| 天天插天天色天天日| 精品老妇女久久9g国产| 黄色在线观看免费观看在线 | 93视频一区二区三区| 国产无遮挡裸体免费直播视频| 91精品国产高清自在线看香蕉网 | 国产欧美日韩在线观看不卡| 五十路人妻熟女av一区二区| 色花堂在线av中文字幕九九| 边摸边做超爽毛片18禁色戒| 天天插天天色天天日| 欧美美女人体视频一区| 亚洲精品亚洲人成在线导航| 大鸡吧插逼逼视频免费看| 国产美女午夜福利久久| 特黄老太婆aa毛毛片| 白嫩白嫩美女极品国产在线观看| 熟女人妻三十路四十路人妻斩| 制服丝袜在线人妻中文字幕| 国产乱弄免费视频观看| 色伦色伦777国产精品| 粉嫩av懂色av蜜臀av| 日本18禁久久久久久| 亚洲国产欧美一区二区三区久久| 色偷偷伊人大杳蕉综合网| 特一级特级黄色网片| 日本熟女50视频免费| 免费在线观看污污视频网站| 18禁精品网站久久| 精品一区二区三区欧美| 天堂中文字幕翔田av| 国产一线二线三线的区别在哪| 中文字幕人妻三级在线观看| 免费观看理论片完整版| 日韩欧美高清免费在线| 天天干天天操天天扣| 色综合久久五月色婷婷综合| 综合精品久久久久97| 欧美天堂av无线av欧美| 天天干天天啪天天舔| gay gay男男瑟瑟在线网站| av线天堂在线观看| 这里只有精品双飞在线播放| 精品视频国产在线观看| 人妻久久无码中文成人| 亚洲成人免费看电影| 天天干天天日天天谢综合156| 欧美激情电影免费在线| 久久午夜夜伦痒痒想咳嗽P| 最新日韩av传媒在线| 国产白袜脚足J棉袜在线观看| 中文字幕在线免费第一页| 老鸭窝日韩精品视频观看| brazzers欧熟精品系列| 性色av一区二区三区久久久| 久久精品亚洲成在人线a| 亚洲熟女女同志女同| 欧美亚洲一二三区蜜臀| av完全免费在线观看av| 中文字幕之无码色多多| 视频 一区二区在线观看| 国产精品探花熟女在线观看| 午夜久久久久久久99| 欧美色呦呦最新网址| 日本熟女50视频免费| 日本少妇在线视频大香蕉在线观看| 亚洲一区av中文字幕在线观看| 午夜精品一区二区三区福利视频| 成人在线欧美日韩国产| 男女啪啪视频免费在线观看| 欧美国产亚洲中英文字幕| 国产真实乱子伦a视频| 18禁污污污app下载| 中文字幕高清免费在线人妻| 欧美视频不卡一区四区| 精品人妻每日一部精品| 亚洲偷自拍高清视频| 黑人借宿ntr人妻的沦陷2| 亚洲美女美妇久久字幕组| 亚洲成人av一区在线| 久久永久免费精品人妻专区| 5528327男人天堂| 真实国产乱子伦一区二区| 超级福利视频在线观看| 精品91高清在线观看| 99国内精品永久免费视频| 国产久久久精品毛片| 亚洲图片欧美校园春色| 丰满熟女午夜福利视频| 午夜的视频在线观看| 久久精品亚洲国产av香蕉| 男人的天堂av日韩亚洲| 黄色视频在线观看高清无码| 美女日逼视频免费观看| 国产白袜脚足J棉袜在线观看| 人妻无码中文字幕专区| 精品国产高潮中文字幕| 精品国产污污免费网站入口自| 婷婷五月亚洲综合在线| 日本免费视频午夜福利视频| 抽查舔水白紧大视频| 漂亮 人妻被中出中文| 少妇ww搡性bbb91| 天天日天天日天天射天天干| 国产精品3p和黑人大战| 日韩人妻在线视频免费| 99re国产在线精品| av日韩在线观看大全| 天天做天天干天天舔| 天天操天天射天天操天天天| 国产真实灌醉下药美女av福利| 中文字幕+中文字幕| 少妇人妻真实精品视频| 美女在线观看日本亚洲一区| 国产V亚洲V天堂无码欠欠| 成人激情文学网人妻| 欧美日韩v中文在线| 成人性黑人一级av| 日日操综合成人av| 人妻最新视频在线免费观看| 中文字幕最新久久久| 第一福利视频在线观看| 女人精品内射国产99| 亚洲一区二区三区偷拍女厕91| 国产福利小视频大全| 色婷婷综合激情五月免费观看| 在线不卡成人黄色精品| 深田咏美亚洲一区二区| 午夜频道成人在线91| AV天堂一区二区免费试看| 国产性色生活片毛片春晓精品 | 岛国一区二区三区视频在线| 91麻豆精品秘密入口在线观看| 丝袜肉丝一区二区三区四区在线| av网站色偷偷婷婷网男人的天堂| 日韩美女精品视频在线观看网站 | 91精品国产高清自在线看香蕉网| 大尺度激情四射网站| 亚洲精品午夜久久久久| 97资源人妻免费在线视频| 女同性ⅹxx女同h偷拍| 男人的天堂av日韩亚洲| 丝袜国产专区在线观看| 亚洲综合在线观看免费| 男女之间激情网午夜在线| 91精品视频在线观看免费| 大鸡吧插逼逼视频免费看| 狠狠躁夜夜躁人人爽天天天天97| 亚洲精品在线资源站| 国语对白xxxx乱大交| 午夜激情高清在线观看| 美洲精品一二三产区区别| 日韩欧美一级aa大片| 丝袜肉丝一区二区三区四区在线| 欧美亚洲国产成人免费在线 | 亚洲综合另类精品小说| 天天日天天舔天天射进去| 在线观看av2025| 国产精彩对白一区二区三区| 青春草视频在线免费播放| 天天干夜夜操啊啊啊| 欧美女同性恋免费a| 操日韩美女视频在线免费看| 9l人妻人人爽人人爽| 东京干手机福利视频| 高潮视频在线快速观看国家快速| 男人操女人逼逼视频网站| 天天日夜夜操天天摸| 国产精品手机在线看片| 一区二区三区欧美日韩高清播放| 久久美欧人妻少妇一区二区三区 | 日韩在线中文字幕色| 成人18禁网站在线播放| 黑人借宿ntr人妻的沦陷2| 国产日韩欧美视频在线导航| 精品亚洲国产中文自在线| 亚洲精品无码久久久久不卡| 一级黄片大鸡巴插入美女| av在线播放国产不卡| 美洲精品一二三产区区别| 天天日天天舔天天射进去| av乱码一区二区三区| 久久久久久国产精品| 亚洲综合一区成人在线| 亚洲一区二区激情在线| 一区二区在线视频中文字幕 | 天堂资源网av中文字幕| 中文字幕一区二区三区人妻大片 | 天天干天天操天天玩天天射| 福利视频广场一区二区| 亚洲精品三级av在线免费观看| 日韩欧美在线观看不卡一区二区| 亚洲av无女神免非久久| 大鸡巴操娇小玲珑的女孩逼| 成人国产激情自拍三区| 天天干夜夜操啊啊啊| 最新91九色国产在线观看| 日韩熟女av天堂系列| 亚洲av日韩高清hd| 日本一区精品视频在线观看| 77久久久久国产精产品| 91中文字幕最新合集| 亚洲 欧美 自拍 偷拍 在线| 99热这里只有精品中文| 欧美黑人与人妻精品| 午夜的视频在线观看| 白白操白白色在线免费视频| 国产chinesehd精品麻豆| 骚货自慰被发现爆操| 欧美亚洲免费视频观看| 日韩精品激情在线观看| 午夜在线一区二区免费| 在线观看一区二区三级| 成人蜜桃美臀九一一区二区三区| 大白屁股精品视频国产| av欧美网站在线观看| 丰满的子国产在线观看| 后入美女人妻高清在线| 久草极品美女视频在线观看| 天天操天天爽天天干| 青春草视频在线免费播放| 亚洲av色图18p| 日韩av有码中文字幕| 日本韩国免费福利精品| 人妻丝袜av在线播放网址| 97a片免费在线观看| 亚洲伊人色一综合网| 亚洲美女自偷自拍11页| 成人30分钟免费视频| 最新国产精品网址在线观看| av在线播放国产不卡| 亚洲国产精品免费在线观看| 神马午夜在线观看视频| 熟女国产一区亚洲中文字幕| caoporn蜜桃视频| 日本在线不卡免费视频| 亚洲另类图片蜜臀av| 久久久久久久99精品| 福利午夜视频在线合集| 免费在线福利小视频| 日韩精品激情在线观看| 97年大学生大白天操逼| 免费看国产av网站| 日本人妻少妇18—xx| 97人人妻人人澡人人爽人人精品| 亚洲欧美一卡二卡三卡| 早川濑里奈av黑人番号| av久久精品北条麻妃av观看| 又大又湿又爽又紧A视频| 亚洲老熟妇日本老妇| 欧美精品免费aaaaaa| 免费成人av中文字幕| 神马午夜在线观看视频| 成人动漫大肉棒插进去视频| 天堂va蜜桃一区入口| 老司机免费福利视频网| 色综合色综合色综合色| 91九色porny蝌蚪国产成人| 大屁股肉感人妻中文字幕在线| 亚洲综合乱码一区二区| 99re久久这里都是精品视频| 国产大鸡巴大鸡巴操小骚逼小骚逼| 久久这里只有精彩视频免费| 日本免费一级黄色录像| 韩国男女黄色在线观看| 又色又爽又黄又刺激av网站| 日本啪啪啪啪啪啪啪| 久久久精品欧洲亚洲av| 51精品视频免费在线观看| 午夜dv内射一区区| 欧美成人小视频在线免费看| 丝袜长腿第一页在线| 色97视频在线播放| 成年午夜影片国产片| 欧美美女人体视频一区| av一区二区三区人妻| 这里有精品成人国产99| 91久久人澡人人添人人爽乱| 成人H精品动漫在线无码播放| 天天日天天摸天天爱| 亚洲一区二区三区在线高清| 国产视频精品资源网站| 五十路丰满人妻熟妇| 人妻少妇亚洲一区二区| 99热99re在线播放| av中文字幕网址在线| 51国产成人精品视频| 国产女人露脸高潮对白视频| 国产密臀av一区二区三| 亚洲av男人的天堂你懂的| 超碰97人人澡人人| 亚洲av日韩高清hd| 中文字幕欧美日韩射射一| 综合激情网激情五月天| 日韩人妻xxxxx| 亚洲欧美激情国产综合久久久| 80电影天堂网官网| 97年大学生大白天操逼| 91福利在线视频免费观看| 日韩美女精品视频在线观看网站 | 51国产成人精品视频| 在线免费观看欧美小视频| 男女啪啪视频免费在线观看| 绝顶痉挛大潮喷高潮无码| 一个人免费在线观看ww视频 | 国产高清女主播在线| 婷婷综合蜜桃av在线| 午夜美女少妇福利视频| 日本女大学生的黄色小视频| 精品国产午夜视频一区二区| 一二三区在线观看视频| 韩国爱爱视频中文字幕| 最近中文2019年在线看| 晚上一个人看操B片| 偷拍自拍国产在线视频| 中文字幕高清资源站| 福利视频一区二区三区筱慧 | 蜜桃臀av蜜桃臀av| 青青社区2国产视频| 国产精品自偷自拍啪啪啪| 一区二区三区日本伦理| 精品国产亚洲av一淫| 亚洲午夜精品小视频| 国产91精品拍在线观看| 欧美特色aaa大片| 97少妇精品在线观看| 黄色无码鸡吧操逼视频| 视频在线免费观看你懂得| 色综合天天综合网国产成人| 国产视频网站国产视频| 亚洲精品ww久久久久久| 亚洲av色图18p| 78色精品一区二区三区| 欧美日本aⅴ免费视频| 日韩不卡中文在线视频网站| 亚洲日产av一区二区在线| 做爰视频毛片下载蜜桃视频1| 欧美熟妇一区二区三区仙踪林| 99精品亚洲av无码国产另类| 亚洲激情偷拍一区二区| 视频一区 二区 三区 综合| 国产九色91在线视频| 一区二区三区综合视频| 丝袜国产专区在线观看| 国产麻豆91在线视频| 日本熟妇喷水xxx| 熟女视频一区,二区,三区| 大鸡吧插逼逼视频免费看| 五月婷婷在线观看视频免费| chinese国产盗摄一区二区 | 久久久久久99国产精品| 午夜精品福利一区二区三区p| 国产精品久久久久久久女人18| 精品欧美一区二区vr在线观看| 91九色porny国产在线| 激情人妻校园春色亚洲欧美| 毛片一级完整版免费| 亚洲av无硬久久精品蜜桃| 欧美成人小视频在线免费看| 国产在线91观看免费观看| 中文字幕 码 在线视频| 我想看操逼黄色大片| 91国产在线视频免费观看| 欧美一区二区中文字幕电影| 一级黄片大鸡巴插入美女| 天天操天天弄天天射| 在线观看成人国产电影| 亚洲人妻视频在线网| 国产内射中出在线观看| 欧美另类重口味极品在线观看| 欧洲亚洲欧美日韩综合| 四虎永久在线精品免费区二区| 欧美精品激情在线最新观看视频| 亚洲欧美国产麻豆综合| 在线国产精品一区二区三区| 亚洲1卡2卡三卡4卡在线观看| 白嫩白嫩美女极品国产在线观看| 最新的中文字幕 亚洲| 1024久久国产精品| 自拍偷拍一区二区三区图片| 亚洲 欧美 精品 激情 偷拍| 熟女在线视频一区二区三区| 成人av中文字幕一区| 亚洲精品 日韩电影| 久久久超爽一二三av| 91精品国产高清自在线看香蕉网 | 国产精品精品精品999| 亚洲av一妻不如妾| 晚上一个人看操B片| 国产成人自拍视频播放| 精品高跟鞋丝袜一区二区| av老司机精品在线观看| 国产精品视频男人的天堂| 中文字幕一区二区自拍| 人人人妻人人澡人人| 亚洲 清纯 国产com| 噜噜色噜噜噜久色超碰| 一区二区三区四区视频在线播放| 久碰精品少妇中文字幕av| 天美传媒mv视频在线观看| 馒头大胆亚洲一区二区| 精品乱子伦一区二区三区免费播| 大陆av手机在线观看| 亚洲熟妇无码一区二区三区| 日曰摸日日碰夜夜爽歪歪| 丁香花免费在线观看中文字幕| 夜夜骑夜夜操夜夜奸| 日本女人一级免费片| 特大黑人巨大xxxx| 91天堂精品一区二区| 国产乱子伦精品视频潮优女| 成人高清在线观看视频| 动漫美女的小穴视频| 国产精品久久久久久美女校花| 国产极品精品免费视频 | 久草视频中文字幕在线观看| 天天通天天透天天插| 欧美爆乳肉感大码在线观看| 亚洲欧美激情国产综合久久久| 婷婷综合蜜桃av在线| 一二三中文乱码亚洲乱码one| 57pao国产一区二区| 亚洲的电影一区二区三区 | 98视频精品在线观看| 国产精品久久久久久久精品视频| 亚洲国产在线精品国偷产拍| 老鸭窝在线观看一区| 久久久久久久久久久免费女人| 中国熟女@视频91| 亚洲欧美久久久久久久久| 亚洲中文精品字幕在线观看| 日韩a级黄色小视频| 一区二区三区欧美日韩高清播放| jiujiure精品视频在线| 欧美日韩不卡一区不区二区| 99一区二区在线观看| www,久久久,com| 97成人免费在线观看网站| av成人在线观看一区| 亚洲1卡2卡三卡4卡在线观看| 2020韩国午夜女主播在线| 激情五月婷婷综合色啪| 亚洲中文字幕国产日韩| 欧美日韩人妻久久精品高清国产| 国产美女精品福利在线| 2020久久躁狠狠躁夜夜躁 | 亚洲国产40页第21页| 福利在线视频网址导航| 亚洲码av无色中文| 91精品高清一区二区三区| 伊人综合免费在线视频| 亚洲av色图18p| 国产高清精品极品美女| 啪啪啪啪啪啪啪免费视频| 国产不卡av在线免费| 天天日天天天天天天天天天天 | 亚洲一区av中文字幕在线观看| 欧美中国日韩久久精品| 桃色视频在线观看一区二区| 中文字幕免费在线免费| 好了av中文字幕在线| 韩国男女黄色在线观看| 亚洲av无码成人精品区辽| 韩国黄色一级二级三级| 久久久久久久99精品| 日韩中文字幕精品淫| AV天堂一区二区免费试看| 在线免费观看黄页视频| 青娱乐最新视频在线| 中文字幕日韩人妻在线三区| 97人人妻人人澡人人爽人人精品| 国产1区,2区,3区| 免费啪啪啪在线观看视频| www久久久久久久久久久| 欧美va亚洲va天堂va| 老熟妇xxxhd老熟女| 美女张开两腿让男人桶av| 人妻无码色噜噜狠狠狠狠色| 亚洲欧洲一区二区在线观看| 韩国男女黄色在线观看| aⅴ精产国品一二三产品| 中英文字幕av一区| 午夜免费观看精品视频| 国产在线免费观看成人| 欧美色呦呦最新网址| 伊人成人在线综合网| wwwxxx一级黄色片| aⅴ五十路av熟女中出| 亚洲黄色av网站免费播放| 天天操夜夜骑日日摸| 日韩成人免费电影二区| caoporn蜜桃视频| 久久农村老妇乱69系列| 日韩美女综合中文字幕pp| 国产在线自在拍91国语自产精品| 精品美女在线观看视频在线观看| 国产高清精品极品美女| 亚洲中文精品人人免费| 天天日天天天天天天天天天天| 国产欧美精品一区二区高清| 在线观看911精品国产| 国产不卡av在线免费| 亚洲在线一区二区欧美| 午夜婷婷在线观看视频| 经典av尤物一区二区| 精品美女在线观看视频在线观看| 色哟哟国产精品入口| 免费无毒热热热热热热久| 欧美激情精品在线观看| 亚洲一区二区三区精品乱码| 青青青青爽手机在线| 九色精品视频在线播放| 五月精品丁香久久久久福利社| 蜜臀av久久久久蜜臀av麻豆| 精品一线二线三线日本| 免费男阳茎伸入女阳道视频 | 激情啪啪啪啪一区二区三区| 国产在线一区二区三区麻酥酥| 中文字幕一区二 区二三区四区| 超碰97免费人妻麻豆| eeuss鲁片一区二区三区| 亚洲天堂精品福利成人av| 91‖亚洲‖国产熟女| 在线视频这里只有精品自拍| 欧美视频不卡一区四区| 日本在线一区二区不卡视频| 岛国黄色大片在线观看| 青青青青爽手机在线| 狠狠躁狠狠爱网站视频| 免费在线黄色观看网站| 日韩精品中文字幕播放| 另类av十亚洲av| 亚洲综合在线观看免费| 黄色成年网站午夜在线观看| 人妻在线精品录音叫床| 亚洲 中文 自拍 另类 欧美| 扒开让我视频在线观看| 成年人该看的视频黄免费| 精品久久久久久高潮| 综合精品久久久久97| 狠狠嗨日韩综合久久| 天天日天天干天天插舔舔| 偷拍3456eee| 久久这里只有精品热视频| 91久久综合男人天堂| 亚洲综合另类精品小说| av大全在线播放免费| 中文字幕无码一区二区免费| 在线成人日韩av电影| 国产变态另类在线观看| 一区二区三区视频,福利一区二区 丰满的子国产在线观看 | 狠狠的往里顶撞h百合| 黄色黄色黄片78在线| 国产精品国产三级麻豆| 国产精品视频一区在线播放| 国产精品亚洲在线观看| 免费大片在线观看视频网站| 日韩美在线观看视频黄| 亚洲成人国产综合一区| 亚洲福利精品福利精品福利| 大尺度激情四射网站| 99精品免费久久久久久久久a| 91中文字幕免费在线观看| 40道精品招牌菜特色| 久碰精品少妇中文字幕av| 日本a级视频老女人| 男生舔女生逼逼视频| 黄色中文字幕在线播放| 色综合久久无码中文字幕波多| 最新91九色国产在线观看| 91高清成人在线视频| 天天日天天操天天摸天天舔| 播放日本一区二区三区电影| 在线观看视频网站麻豆| 蜜臀av久久久久久久| 黄色三级网站免费下载| 人妻激情图片视频小说| 国产普通话插插视频| 久久久精品国产亚洲AV一| 在线播放一区二区三区Av无码| 亚洲午夜伦理视频在线| 精品人人人妻人人玩日产欧| 天堂v男人视频在线观看| 午夜精品九一唐人麻豆嫩草成人| 日本人妻欲求不满中文字幕| 亚洲日产av一区二区在线| yy96视频在线观看| www久久久久久久久久久| 91chinese在线视频| 日韩少妇人妻精品无码专区| 亚洲av一妻不如妾| 成人av电影免费版| 美女 午夜 在线视频| 91国内精品自线在拍白富美| 日本精品一区二区三区在线视频。| 欧美伊人久久大香线蕉综合| 男人插女人视频网站| 午夜精品一区二区三区福利视频| 男人操女人的逼免费视频| 日韩北条麻妃一区在线| 欧美 亚洲 另类综合| 日本高清成人一区二区三区| 五月精品丁香久久久久福利社| 日韩av大胆在线观看| 天天日天天干天天要| 黄色成年网站午夜在线观看| 欧美国产亚洲中英文字幕| 亚洲日本一区二区三区| 大香蕉大香蕉大香蕉大香蕉大香蕉| 亚洲2021av天堂| 国产精品自偷自拍啪啪啪| 国产又粗又猛又爽又黄的视频在线 | 97超碰国语国产97超碰| 欧美在线精品一区二区三区视频 | 婷婷午夜国产精品久久久| 91福利在线视频免费观看| 午夜精品亚洲精品五月色| 久碰精品少妇中文字幕av| 性色蜜臀av一区二区三区| 亚洲在线一区二区欧美| 国产精品人妻66p| 亚洲综合一区成人在线| 日韩成人综艺在线播放| 午夜精品一区二区三区福利视频| 漂亮 人妻被中出中文| 最后99天全集在线观看| 少妇深喉口爆吞精韩国| 性色蜜臀av一区二区三区| 一区二区三区久久久91| 啪啪啪啪啪啪啪啪av| av在线免费观看亚洲天堂| 亚洲蜜臀av一区二区三区九色| 蜜桃视频入口久久久| 亚洲专区激情在线观看视频| 中文字幕综合一区二区| 真实国模和老外性视频| 国产实拍勾搭女技师av在线| heyzo蜜桃熟女人妻| 亚洲自拍偷拍综合色| 91精品国产91久久自产久强| 熟妇一区二区三区高清版| 蜜桃专区一区二区在线观看| 亚洲免费福利一区二区三区| 亚洲 清纯 国产com| 人妻少妇一区二区三区蜜桃| 日本高清在线不卡一区二区| 中文字幕一区二区三区人妻大片| 一区二区三区的久久的蜜桃的视频| 亚洲国产成人在线一区| 在线观看免费视频色97| 可以在线观看的av中文字幕| 插逼视频双插洞国产操逼插洞| 97国产精品97久久| 欧美一区二区三区乱码在线播放| 亚洲一级av无码一级久久精品| 区一区二区三国产中文字幕| 又粗又硬又猛又黄免费30| 中文字幕乱码av资源| 久精品人妻一区二区三区| 国产真实灌醉下药美女av福利| av中文字幕国产在线观看| 在线免费91激情四射| 视频一区 视频二区 视频| 亚洲成人国产av在线| 久久久精品精品视频视频| 蜜桃专区一区二区在线观看| 日韩美av高清在线| 91免费放福利在线观看| 97欧洲一区二区精品免费| 97超碰国语国产97超碰| 亚洲国产在线精品国偷产拍| 青娱乐蜜桃臀av色| 99精品免费观看视频| 特黄老太婆aa毛毛片| 亚洲欧美一卡二卡三卡| 人人人妻人人澡人人| 青青草成人福利电影| 亚洲另类图片蜜臀av| 成人网18免费视频版国产| 亚洲一区二区人妻av| 啊啊啊想要被插进去视频| 亚洲成av人无码不卡影片一| 老司机福利精品视频在线| 亚洲激情唯美亚洲激情图片| 特大黑人巨大xxxx| 欧美偷拍亚洲一区二区| 天天干天天爱天天色| 亚洲 中文 自拍 无码| 亚洲中文字幕国产日韩| 女人精品内射国产99| 在线不卡成人黄色精品| 2020国产在线不卡视频| 欧美综合婷婷欧美综合| 大尺度激情四射网站| 天天射,天天操,天天说| 一区二区三区麻豆福利视频| 成人高清在线观看视频| 免费无码人妻日韩精品一区二区| 韩国一级特黄大片做受| 在线视频免费观看网| 亚洲成人黄色一区二区三区| 人妻另类专区欧美制服| 亚洲中文字幕综合小综合| 特一级特级黄色网片| 超碰在线中文字幕一区二区| 亚洲美女高潮喷浆视频| 91精品啪在线免费| 婷婷激情四射在线观看视频| 久久久麻豆精亚洲av麻花| 久久久久国产成人精品亚洲午夜| 自拍 日韩 欧美激情| 欧美视频综合第一页| 亚洲护士一区二区三区| 免费福利av在线一区二区三区| 成年人该看的视频黄免费| 美女福利写真在线观看视频| 大胆亚洲av日韩av| 中文字幕高清在线免费播放| 自拍偷拍,中文字幕| 日韩欧美一级精品在线观看| 丝袜肉丝一区二区三区四区在线 | 黑人性生活视频免费看| 成人精品视频99第一页| 久久久久久99国产精品| 国产成人自拍视频播放| 亚洲综合一区成人在线| 亚洲另类综合一区小说| 自拍 日韩 欧美激情| 欧美中国日韩久久精品| 偷拍自拍亚洲美腿丝袜| 亚国产成人精品久久久| 888亚洲欧美国产va在线播放| 麻豆性色视频在线观看| 偷拍自拍亚洲视频在线观看| 快点插进来操我逼啊视频| 精品人妻每日一部精品| 天堂va蜜桃一区入口| 操操网操操伊剧情片中文字幕网| 国产在线观看黄色视频| 人妻另类专区欧美制服| 狠狠的往里顶撞h百合| 美女福利视频网址导航| 国产大鸡巴大鸡巴操小骚逼小骚逼| 亚洲精品午夜久久久久| 日辽宁老肥女在线观看视频| 一区二区三区国产精选在线播放| 强行扒开双腿猛烈进入免费版 | 亚洲av在线观看尤物| 色哟哟在线网站入口| 国产精品久久久久网| av视屏免费在线播放| 天天干天天日天天干天天操| 美味人妻2在线播放| 女生被男生插的视频网站| 精品久久婷婷免费视频| 亚洲av无女神免非久久| 国产精品欧美日韩区二区| 天天摸天天日天天操| 欧美日韩情色在线观看| 2020av天堂网在线观看| 超级福利视频在线观看| av中文字幕在线导航| av手机免费在线观看高潮| av在线资源中文字幕| brazzers欧熟精品系列| 国产不卡av在线免费| 中国熟女@视频91| 成年午夜影片国产片| 色天天天天射天天舔| 熟女在线视频一区二区三区| 无码日韩人妻精品久久| 亚洲欧美激情国产综合久久久| 特级无码毛片免费视频播放| 中文字幕一区二 区二三区四区| 国产女孩喷水在线观看| 在线观看911精品国产| v888av在线观看视频| 99热99这里精品6国产| 国产熟妇人妻ⅹxxxx麻豆| 农村胖女人操逼视频| 黄色片年轻人在线观看| 国产视频网站一区二区三区| 国产av福利网址大全| 久久这里有免费精品| 91久久综合男人天堂| 日韩欧美中文国产在线| 午夜久久久久久久精品熟女| 欧美一区二区三区久久久aaa| 亚洲在线一区二区欧美| 色av色婷婷人妻久久久精品高清| 绯色av蜜臀vs少妇| www天堂在线久久| 可以在线观看的av中文字幕| 青青青国产片免费观看视频| 久久精品美女免费视频| 91精品资源免费观看| 伊人日日日草夜夜草| 欧洲国产成人精品91铁牛tv| 777奇米久久精品一区| 亚洲成人激情视频免费观看了| 免费大片在线观看视频网站| 日本人妻少妇18—xx| 人妻丰满熟妇综合网| 亚洲人成精品久久久久久久| 中文字幕一区的人妻欧美日韩| 不卡日韩av在线观看| 97成人免费在线观看网站| 激情五月婷婷综合色啪| 人妻熟女中文字幕aⅴ在线| 在线国产中文字幕视频| 毛茸茸的大外阴中国视频| 国产高清女主播在线| 韩国一级特黄大片做受| 亚洲va天堂va国产va久| 久久www免费人成一看片| 国产污污污污网站在线| 欧美精产国品一二三区| 男女之间激情网午夜在线| 东游记中文字幕版哪里可以看到| rct470中文字幕在线| 一区二区三区精品日本| 超碰在线观看免费在线观看| 超碰在线中文字幕一区二区| 91国语爽死我了不卡| 亚洲另类图片蜜臀av| 国产超码片内射在线| 天天操天天爽天天干| 亚洲av日韩av第一区二区三区| 亚欧在线视频你懂的| 2021久久免费视频| 91精品国产高清自在线看香蕉网| 91人妻精品久久久久久久网站| 国产亚洲精品视频合集| 色婷婷久久久久swag精品| 一区二区三区av高清免费| av男人天堂狠狠干| 扒开腿挺进肉嫩小18禁视频| 久久久久久久久久久久久97| 青青青青青青青青青国产精品视频| 在线视频自拍第三页| 五月婷婷在线观看视频免费| 真实国模和老外性视频| 91香蕉成人app下载| 欧美 亚洲 另类综合| 9国产精品久久久久老师| 欧美日韩不卡一区不区二区| 操人妻嗷嗷叫视频一区二区| 老鸭窝在线观看一区| 大陆胖女人与丈夫操b国语高清| 鸡巴操逼一级黄色气| 精品久久久久久久久久中文蒉| 国产揄拍高清国内精品对白| 在线免费观看靠比视频的网站| 欧美特色aaa大片| 久久久久五月天丁香社区| 午夜蜜桃一区二区三区| 91成人精品亚洲国产| 国产精品亚洲а∨天堂免| 日本免费一级黄色录像 | heyzo蜜桃熟女人妻| 青青青青青青青青青青草青青 | 一二三中文乱码亚洲乱码one| 一区二区三区四区中文| 快点插进来操我逼啊视频| 中文字幕第1页av一天堂网| gogo国模私拍视频| 中文字幕日韩无敌亚洲精品| 五月天中文字幕内射| 日本美女成人在线视频| 在线观看黄色成年人网站| 蜜桃臀av蜜桃臀av| 污污小视频91在线观看| 四川乱子伦视频国产vip| av日韩在线免费播放| 97青青青手机在线视频| 中文字幕av熟女人妻| 粗大的内捧猛烈进出爽大牛汉子| av天堂中文免费在线| 三级等保密码要求条款| 中国视频一区二区三区| 在线国产日韩欧美视频| 日韩写真福利视频在线观看| 中文字幕在线第一页成人| 人妻丝袜av在线播放网址| 久久久制服丝袜中文字幕| 又黄又刺激的午夜小视频| 日本女人一级免费片| 日韩欧美一级精品在线观看| 国产高清精品一区二区三区| 国产大学生援交正在播放| 一区二区三区美女毛片| 婷婷激情四射在线观看视频| 中文字幕一区二区三区蜜月| 亚洲va国产va欧美va在线| 在线观看的黄色免费网站| 国产亚洲精品视频合集| 亚洲熟色妇av日韩熟色妇在线| 91试看福利一分钟| 成熟丰满熟妇高潮xx×xx| 国产女人被做到高潮免费视频 | 黄网十四区丁香社区激情五月天| 黑人进入丰满少妇视频| 午夜在线观看岛国av,com| 午夜激情精品福利视频| 综合页自拍视频在线播放| 少妇人妻真实精品视频| 成人24小时免费视频| 久草视频 久草视频2| 亚洲av无硬久久精品蜜桃| 日本韩国在线观看一区二区| 国产成人精品一区在线观看| 少妇露脸深喉口爆吞精| 天堂女人av一区二区| av网址在线播放大全| 青青草在观免费国产精品| 大骚逼91抽插出水视频| 天天操天天弄天天射| 人人爽亚洲av人人爽av| 视频在线亚洲一区二区| 五月婷婷在线观看视频免费| 高清一区二区欧美系列| 国产精品久久久久网| 女警官打开双腿沦为性奴| 日韩精品中文字幕福利| 日韩二区视频一线天婷婷五| 99久久久无码国产精品性出奶水| 97小视频人妻一区二区| 女生自摸在线观看一区二区三区 | 国产福利小视频二区| 天天夜天天日天天日| 18禁免费av网站| 黄色视频成年人免费观看| 2020韩国午夜女主播在线| 2020久久躁狠狠躁夜夜躁 | av天堂中文免费在线| 亚洲av日韩精品久久久| 亚洲激情唯美亚洲激情图片| 国产97视频在线精品| 自拍偷拍一区二区三区图片| 美女福利视频网址导航| 亚洲蜜臀av一区二区三区九色| 国产性生活中老年人视频网站| 欧美一区二区三区久久久aaa| 天天爽夜夜爽人人爽QC| 中文字幕人妻av在线观看| 国产不卡av在线免费| eeuss鲁片一区二区三区| 欲乱人妻少妇在线视频裸| 中文字幕+中文字幕| 只有精品亚洲视频在线观看| 超碰公开大香蕉97| 极品粉嫩小泬白浆20p主播| 男女啪啪啪啪啪的网站| 中文字幕在线一区精品| 午夜的视频在线观看| 日本最新一二三区不卡在线| 精品黑人一区二区三区久久国产| 中文字幕高清资源站| 中文字幕亚洲中文字幕| 午夜精品一区二区三区城中村| 毛片一级完整版免费| 国产中文精品在线观看| 伊人开心婷婷国产av| 手机看片福利盒子日韩在线播放| 美女 午夜 在线视频| 98精产国品一二三产区区别| 亚洲伊人久久精品影院一美女洗澡| 日辽宁老肥女在线观看视频| 免费国产性生活视频| 国产精品入口麻豆啊啊啊| 中国视频一区二区三区| 一区二区三区日韩久久| 中出中文字幕在线观看 | 在线观看的a站 最新| 国产日韩欧美视频在线导航| 天天日天天干天天爱| 999热精品视频在线| 亚洲自拍偷拍精品网| 日韩a级精品一区二区| 91she九色精品国产| 国产av自拍偷拍盛宴| 久久久久久久精品成人热| 边摸边做超爽毛片18禁色戒| 亚洲欧洲av天堂综合| 亚洲免费视频欧洲免费视频| 亚洲精品成人网久久久久久小说 | 欧美国品一二三产区区别| 首之国产AV医生和护士小芳| 欧美一区二区三区久久久aaa| 欧洲黄页网免费观看| 一区国内二区日韩三区欧美| 超黄超污网站在线观看| 日韩近亲视频在线观看| 天天日夜夜干天天操| 9l人妻人人爽人人爽| 久久久久久久亚洲午夜综合福利| 中文字幕亚洲久久久| 三上悠亚和黑人665番号| 日韩黄色片在线观看网站| 啊慢点鸡巴太大了啊舒服视频| 日本丰满熟妇大屁股久久| 另类av十亚洲av| 99精品一区二区三区的区| 国产日韩精品一二三区久久久 | 大胸性感美女羞爽操逼毛片| 亚洲女人的天堂av| 国产精品久久综合久久| 亚洲欧美激情中文字幕| 又黄又刺激的午夜小视频| 中文字幕一区二 区二三区四区 | 不卡日韩av在线观看| av在线免费资源站| 夜夜躁狠狠躁日日躁麻豆内射 | 又粗又长 明星操逼小视频| 热99re69精品8在线播放| 亚洲综合在线视频可播放| 天天操,天天干,天天射| 精品国产亚洲av一淫| 社区自拍揄拍尻屁你懂的| 91国产在线免费播放| 1区2区3区4区视频在线观看| 中文字幕,亚洲人妻| 中文字幕日本人妻中出| 日韩国产乱码中文字幕| 免费在线福利小视频| 久久农村老妇乱69系列| 性欧美激情久久久久久久| 日本免费视频午夜福利视频| av手机在线免费观看日韩av| 国产揄拍高清国内精品对白| 国产免费av一区二区凹凸四季| 1024久久国产精品| 亚洲另类伦春色综合小| 亚洲国产在线精品国偷产拍| 午夜精品一区二区三区城中村| 一区二区熟女人妻视频| 国产熟妇一区二区三区av| 日韩人妻在线视频免费| 38av一区二区三区| 只有精品亚洲视频在线观看| 欧美aa一级一区三区四区| 动漫黑丝美女的鸡巴| 啊慢点鸡巴太大了啊舒服视频| 亚洲成av人无码不卡影片一| 宅男噜噜噜666国产| 日本特级片中文字幕| gav成人免费播放| 日韩欧美国产精品91| 91精品啪在线免费| 国产亚洲欧美另类在线观看| 最新91精品视频在线| 一个人免费在线观看ww视频| 日本女人一级免费片| 特大黑人巨大xxxx| 日韩欧美国产一区ab| 蜜桃视频17c在线一区二区| 精品suv一区二区69| 亚洲专区激情在线观看视频| 岛国青草视频在线观看| 丰满的继坶3中文在线观看| 黄色资源视频网站日韩| 阿v天堂2014 一区亚洲| 蜜臀av久久久久久久| gav成人免费播放| 精品久久久久久久久久久99| 好吊视频—区二区三区| 午夜毛片不卡在线看| 加勒比视频在线免费观看| 91精品资源免费观看| 欧美亚洲一二三区蜜臀| 在线观看日韩激情视频| 亚洲 中文字幕在线 日韩| 亚洲蜜臀av一区二区三区九色| 欧美精产国品一二三区| 亚洲综合乱码一区二区| 啪啪啪啪啪啪啪免费视频| 国产第一美女一区二区三区四区| 美女张开腿让男生操在线看| 91p0rny九色露脸熟女| 免费在线看的黄片视频| 欧美一区二区三区久久久aaa| 国产福利小视频大全| 亚洲精品亚洲人成在线导航| 久久香蕉国产免费天天| 伊拉克及约旦宣布关闭领空| 91在线视频在线精品3| 五月天色婷婷在线观看视频免费| 一级黄色av在线观看| 综合精品久久久久97| 高潮视频在线快速观看国家快速 | 日本福利午夜电影在线观看| 99精品国产aⅴ在线观看| aⅴ五十路av熟女中出| 在线播放 日韩 av| 久久久91蜜桃精品ad| 午夜影院在线观看视频羞羞羞| 内射久久久久综合网| 天堂av在线播放免费| 人妻少妇精品久久久久久| 鸡巴操逼一级黄色气| 成人av免费不卡在线观看| 热思思国产99re| 日韩av熟妇在线观看| 插小穴高清无码中文字幕| 黑人解禁人妻叶爱071| 国产精品久久综合久久| 大鸡巴操娇小玲珑的女孩逼| 成人蜜臀午夜久久一区| 亚洲人妻av毛片在线| 国产精品视频一区在线播放| 激情伦理欧美日韩中文字幕| 午夜精彩视频免费一区| 成人av在线资源网站| 国产又粗又硬又大视频| 久久久久久久久久久免费女人| 日韩欧美制服诱惑一区在线| 亚洲一区二区三区偷拍女厕91| 伊人成人在线综合网| 亚洲av午夜免费观看| 天天日天天操天天摸天天舔| 亚欧在线视频你懂的| av在线免费中文字幕| 日本少妇人妻xxxxx18| 老司机福利精品免费视频一区二区| 大鸡吧插逼逼视频免费看| 青草青永久在线视频18| 亚洲人妻av毛片在线| 天天艹天天干天天操| 国产aⅴ一线在线观看| 黄片色呦呦视频免费看| 亚洲Av无码国产综合色区| 青青青青草手机在线视频免费看| www骚国产精品视频| 97人妻总资源视频| 国内自拍第一页在线观看| av大全在线播放免费| 视频久久久久久久人妻| 亚洲综合自拍视频一区| 国产高清精品一区二区三区| 九一传媒制片厂视频在线免费观看| 欧美在线偷拍视频免费看| 亚洲狠狠婷婷综合久久app| 蜜臀av久久久久蜜臀av麻豆| 熟女91pooyn熟女| 亚洲精品久久视频婷婷| 中文字幕在线观看极品视频| 亚洲av日韩高清hd| 三上悠亚和黑人665番号| 美女大bxxxx内射| 国产精品久久久久久久久福交| 九色精品视频在线播放| 日韩av大胆在线观看| 黄色在线观看免费观看在线| 中文字幕熟女人妻久久久| 91九色国产porny蝌蚪| 人妻少妇av在线观看| 免费在线播放a级片| 亚洲欧美在线视频第一页| 韩国女主播精品视频网站| 国产精品黄页网站视频| 亚洲综合另类精品小说| 高清成人av一区三区| 91精品国产麻豆国产| 亚洲熟妇久久无码精品| 成人精品视频99第一页| 美洲精品一二三产区区别| 久久丁香婷婷六月天| 含骚鸡巴玩逼逼视频| 亚洲精品在线资源站| 男人的天堂一区二区在线观看| 亚洲国产欧美一区二区三区…| 亚洲av琪琪男人的天堂| 青青青艹视频在线观看| 狠狠操狠狠操免费视频| 97人妻人人澡爽人人精品| 日本三极片中文字幕| 97青青青手机在线视频| 国产福利小视频大全| 日日夜夜狠狠干视频| 国产在线一区二区三区麻酥酥| 国产成人精品一区在线观看| 青春草视频在线免费播放| 精品久久久久久久久久久久人妻 | 中文字幕,亚洲人妻| 免费在线播放a级片| 亚洲 色图 偷拍 欧美| 老熟妇凹凸淫老妇女av在线观看| 亚洲国产最大av综合| 久久农村老妇乱69系列| 久久精品美女免费视频| 日韩a级黄色小视频| 国产久久久精品毛片| 黄色在线观看免费观看在线| av一区二区三区人妻| 精品久久婷婷免费视频| 国产亚洲国产av网站在线| 中文字幕免费在线免费| 热99re69精品8在线播放| 亚洲综合一区成人在线| 漂亮 人妻被中出中文| 欧美 亚洲 另类综合| 好吊视频—区二区三区| 视频在线亚洲一区二区| 欧美在线一二三视频| 亚洲午夜高清在线观看| 亚洲精品av在线观看| 国产亚洲视频在线观看| 3344免费偷拍视频| 天天操天天污天天射| 欧美男同性恋69视频| 亚洲熟女久久久36d| 91啪国自产中文字幕在线| 啊啊啊想要被插进去视频| 精品乱子伦一区二区三区免费播| 日韩精品一区二区三区在线播放| 做爰视频毛片下载蜜桃视频1| 五月婷婷在线观看视频免费| 噜噜色噜噜噜久色超碰| 午夜91一区二区三区| 日本韩国在线观看一区二区| 午夜免费观看精品视频| 人妻少妇亚洲精品中文字幕| 免费在线黄色观看网站| 欧洲日韩亚洲一区二区三区| 天天操天天插天天色| 天天干天天啪天天舔| 自拍偷拍vs一区二区三区| 午夜激情久久不卡一区二区| 国产性生活中老年人视频网站| 亚洲综合色在线免费观看| 亚洲免费福利一区二区三区| 亚洲欧美综合另类13p| 亚洲国产美女一区二区三区软件 | 天天日天天舔天天射进去| 免费黄页网站4188| 国产精品入口麻豆啊啊啊| 黄片三级三级三级在线观看| 日本一区二区三区免费小视频| 夜色撩人久久7777| 亚洲国产第一页在线观看| 久久麻豆亚洲精品av| 91国偷自产一区二区三区精品| 自拍偷拍日韩欧美亚洲| 国产精品久久久久久久女人18| 日韩欧美一级精品在线观看| 欧美精产国品一二三产品区别大吗| 扒开让我视频在线观看| 精品久久久久久高潮| wwwxxx一级黄色片| 日韩黄色片在线观看网站| 大屁股肉感人妻中文字幕在线| 激情伦理欧美日韩中文字幕| 成人性黑人一级av| 精品久久久久久久久久久久人妻| 很黄很污很色的午夜网站在线观看| 青青青青青青青在线播放视频| 免费黄色成人午夜在线网站| 日比视频老公慢点好舒服啊| 天天射,天天操,天天说| 99精品国产自在现线观看| 色av色婷婷人妻久久久精品高清| 扒开腿挺进肉嫩小18禁视频| 国产午夜福利av导航| 天天色天天操天天透| 亚洲免费va在线播放| 男女之间激情网午夜在线| 精品国产成人亚洲午夜| 91精品国产观看免费| 快点插进来操我逼啊视频| 国产露脸对白在线观看| 精品久久久久久久久久久久人妻| 亚洲成a人片777777| 97国产在线观看高清| 大胸性感美女羞爽操逼毛片| sejizz在线视频| 一区二区在线视频中文字幕| 天天日天天添天天爽| 亚洲欧美综合在线探花| 日日摸夜夜添夜夜添毛片性色av| 人人爽亚洲av人人爽av| 免费在线黄色观看网站| 中文字幕人妻三级在线观看| 亚洲国产欧美一区二区丝袜黑人| 日韩欧美高清免费在线| 亚洲国产免费av一区二区三区| 天天日天天天天天天天天天天 | 欧美一区二区三区四区性视频| 人妻丰满熟妇综合网| 天天干天天日天天谢综合156| av在线资源中文字幕| 99re国产在线精品| 91麻豆精品久久久久| 精品久久久久久久久久中文蒉| 成人精品在线观看视频| 亚洲国际青青操综合网站| 免费一级黄色av网站| 老鸭窝日韩精品视频观看| 日本www中文字幕| 亚洲精品国产久久久久久| 亚洲欧美激情人妻偷拍| 男人天堂最新地址av| 久久久久久97三级| 1769国产精品视频免费观看| 国产精品久久久黄网站| 老鸭窝日韩精品视频观看| 97人妻无码AV碰碰视频| 51国产成人精品视频| 亚洲综合一区二区精品久久| 人人妻人人澡欧美91精品| 亚洲免费福利一区二区三区| 美女骚逼日出水来了| 男生用鸡操女生视频动漫 | 大香蕉日本伊人中文在线| 一区二区三区四区五区性感视频| 最近中文2019年在线看| 国产之丝袜脚在线一区二区三区 | 91人妻精品久久久久久久网站| 国产成人自拍视频在线免费观看| 日韩欧美在线观看不卡一区二区| 欧美亚洲少妇福利视频| 国产在线91观看免费观看| 国产中文精品在线观看| 天堂av中文在线最新版| 欧美少妇性一区二区三区| 一本一本久久a久久精品综合不卡| 超碰公开大香蕉97| 五月天久久激情视频| 黄色av网站免费在线| 成年人的在线免费视频| 亚洲一级美女啪啪啪| 国产内射中出在线观看| 日韩在线中文字幕色| 强行扒开双腿猛烈进入免费版| 国产精品久久9999| 免费观看国产综合视频| 91九色porny蝌蚪国产成人| 亚洲一区制服丝袜美腿| 午夜场射精嗯嗯啊啊视频| 黄工厂精品视频在线观看| 日韩三级黄色片网站| 自拍偷拍 国产资源| 黄色成人在线中文字幕| av手机在线免费观看日韩av| 中文字幕日韩人妻在线三区| 一区二区三区四区五区性感视频| 亚洲欧美成人综合视频| 亚洲在线一区二区欧美| 超碰97免费人妻麻豆| 亚洲精品乱码久久久久久密桃明| 久久久久久久久久久免费女人| 亚洲偷自拍高清视频| 91久久综合男人天堂| 国产精品自拍偷拍a| 中国老熟女偷拍第一页| av线天堂在线观看| av完全免费在线观看av| 孕妇奶水仑乱A级毛片免费看| 成人网18免费视频版国产| 一个人免费在线观看ww视频| 亚洲一区二区三区精品视频在线| 亚洲成人精品女人久久久| 最新中文字幕免费视频| 中文字幕AV在线免费看 | 亚洲在线一区二区欧美| 国产女孩喷水在线观看| 东京热男人的av天堂| 丝袜美腿视频诱惑亚洲无| 日噜噜噜夜夜噜噜噜天天噜噜噜| 亚洲天堂精品久久久| 欧美精品一二三视频| 91免费福利网91麻豆国产精品| 久久久久久久一区二区三| 国产亚洲欧美45p| 一区二区三区美女毛片| 亚洲特黄aaaa片| 中文字幕高清资源站| 9l人妻人人爽人人爽| 天天日天天敢天天干| 精品一区二区三区午夜| 人妻久久无码中文成人| 亚洲一区二区三区在线高清| 91精品高清一区二区三区| 天天干天天日天天谢综合156| 日本特级片中文字幕| 一个色综合男人天堂| 天天操,天天干,天天射| gogo国模私拍视频| 大肉大捧一进一出好爽在线视频 | 日本丰满熟妇BBXBBXHD| av天堂资源最新版在线看| av中文字幕网址在线| 日韩无码国产精品强奸乱伦| 成人av久久精品一区二区| 国产黄色大片在线免费播放| 熟女91pooyn熟女| 大香蕉伊人中文字幕| 19一区二区三区在线播放| 午夜免费体验区在线观看| 大屁股肉感人妻中文字幕在线| AV无码一区二区三区不卡| 亚洲麻豆一区二区三区| 中文字幕av一区在线观看| 国产成人精品一区在线观看 | 又粗又硬又猛又黄免费30| 9久在线视频只有精品| 熟女视频一区,二区,三区| 欧美成一区二区三区四区| 久久热这里这里只有精品| 日本一道二三区视频久久| 亚洲少妇高潮免费观看| 一区二区三区国产精选在线播放 | 午夜激情高清在线观看| 青青伊人一精品视频| 老司机免费视频网站在线看| 国产精品一区二区三区蜜臀av | 五十路av熟女松本翔子| 最近的中文字幕在线mv视频| 精品久久婷婷免费视频| 97香蕉碰碰人妻国产樱花| 青青青国产免费视频| 男女之间激情网午夜在线| 亚洲欧美在线视频第一页| 亚洲人妻av毛片在线| 黑人借宿ntr人妻的沦陷2| 亚洲自拍偷拍综合色| 男女之间激情网午夜在线| 日本成人不卡一区二区| 免费高清自慰一区二区三区网站 | 欧美天堂av无线av欧美| 日韩av中文在线免费观看| 日韩中文字幕在线播放第二页| 亚洲中文精品字幕在线观看| 嫩草aⅴ一区二区三区| 亚洲一级av无码一级久久精品| 在线免费观看国产精品黄色| 国产妇女自拍区在线观看| 青青青视频自偷自拍38碰| 国产精品视频男人的天堂| 99精品久久久久久久91蜜桃| jiuse91九色视频| 国内自拍第一页在线观看| 欧美精品黑人性xxxx| 亚洲av在线观看尤物| 天天日天天干天天干天天日| 天美传媒mv视频在线观看| 国产福利在线视频一区| 国产三级影院在线观看| 国产精品久久久久网| 天天操天天干天天日狠狠插| 特黄老太婆aa毛毛片| 国产一区二区视频观看| 亚洲国产美女一区二区三区软件| 午夜精彩视频免费一区| 快点插进来操我逼啊视频| 国产精品成久久久久三级蜜臀av| 免费在线福利小视频| 亚洲一区二区三区在线高清 | 亚洲欧美人精品高清| 无套猛戳丰满少妇人妻| 天天日天天舔天天射进去| 男生舔女生逼逼视频| 国产精品黄片免费在线观看| 精品亚洲在线免费观看| 日本精品一区二区三区在线视频。 | 国产又粗又硬又猛的毛片视频| 成年美女黄网站18禁久久| 伊人精品福利综合导航| 中文字幕亚洲中文字幕| 9色在线视频免费观看| 成人蜜臀午夜久久一区| 在线观看视频污一区| 色综合久久久久久久久中文| 国产美女一区在线观看| 国产男女视频在线播放| 天天日夜夜干天天操| 99久久成人日韩欧美精品| 亚洲成人激情视频免费观看了| 最新的中文字幕 亚洲| 青青社区2国产视频| 亚洲最大免费在线观看| 成人av中文字幕一区| 日本男女操逼视频免费看| 成人国产小视频在线观看| 日本人妻少妇18—xx| 少妇人妻100系列| 精产国品久久一二三产区区别| 亚洲高清国产自产av| 黑人性生活视频免费看| 中国把吊插入阴蒂的视频| 久久久久久久精品老熟妇| 日韩精品一区二区三区在线播放| 日韩人妻在线视频免费| 国产美女精品福利在线| 青娱乐最新视频在线| brazzers欧熟精品系列| 视频二区在线视频观看| 日韩一个色综合导航| 青青青青在线视频免费观看| 青青擦在线视频国产在线| 欧美成人综合视频一区二区| 91色老99久久九九爱精品| 视频二区在线视频观看| 一区二区三区 自拍偷拍| 91福利在线视频免费观看| 精品欧美一区二区vr在线观看 | 日韩av大胆在线观看| 最近中文2019年在线看| 无码日韩人妻精品久久| 日韩欧美国产一区不卡| 一二三区在线观看视频| 免费看国产又粗又猛又爽又黄视频 | 新97超碰在线观看| 偷拍自拍视频图片免费| 天天干天天操天天插天天日| 亚洲 欧美 精品 激情 偷拍| 亚洲国产精品黑丝美女| av网站色偷偷婷婷网男人的天堂| 东京干手机福利视频| 任你操任你干精品在线视频| 少妇系列一区二区三区视频| 精品视频一区二区三区四区五区| 亚洲成人国产综合一区| 无套猛戳丰满少妇人妻| 亚洲一区av中文字幕在线观看| 天天日天天透天天操| 国产精品久久综合久久| 人人妻人人澡欧美91精品| 69精品视频一区二区在线观看| 亚洲精品 欧美日韩| 亚洲人成精品久久久久久久| 五十路息与子猛烈交尾视频| 青青青青青青草国产| 大鸡巴操娇小玲珑的女孩逼| 日韩美女搞黄视频免费| 在线观看的黄色免费网站| 成人乱码一区二区三区av| 日本性感美女写真视频| 最新欧美一二三视频| 亚洲一区二区三区在线高清 | 日韩av有码中文字幕| 婷婷激情四射在线观看视频| 免费岛国喷水视频在线观看| 日本特级片中文字幕| 伊人成人综合开心网| 中文字幕在线免费第一页| 精品少妇一二三视频在线| 蜜桃臀av蜜桃臀av| 日本真人性生活视频免费看| 精品国产午夜视频一区二区| 91精品视频在线观看免费| 91人妻精品一区二区在线看| 亚洲第一黄色在线观看| 狠狠鲁狠狠操天天晚上干干| 红桃av成人在线观看| 一区二区三区美女毛片| 美女张开两腿让男人桶av| 97成人免费在线观看网站| 天美传媒mv视频在线观看| 国产不卡av在线免费| av黄色成人在线观看| 免费男阳茎伸入女阳道视频| 狠狠的往里顶撞h百合| av破解版在线观看| 亚洲一区二区三区五区| 黄色三级网站免费下载| 日日日日日日日日夜夜夜夜夜夜| 大香蕉日本伊人中文在线| 韩国AV无码不卡在线播放| 亚洲av日韩av网站| 日韩近亲视频在线观看| 亚洲老熟妇日本老妇| 日韩欧美制服诱惑一区在线| 久久国产精品精品美女| 2018在线福利视频| 日曰摸日日碰夜夜爽歪歪| 国产精品国产三级麻豆| 欧美一区二区三区乱码在线播放| 2022国产精品视频| 午夜福利资源综合激情午夜福利资| 精品av国产一区二区三区四区| 在线制服丝袜中文字幕| 好太好爽好想要免费| 五十路熟女人妻一区二区9933 | 国产麻豆乱子伦午夜视频观看| 亚洲图片偷拍自拍区| 少妇ww搡性bbb91| 人人妻人人爽人人添夜| 加勒比视频在线免费观看| 999九九久久久精品| 亚洲男人让女人爽的视频| 日本免费一级黄色录像 | 专门看国产熟妇的网站| 亚洲 欧美 精品 激情 偷拍 | 天天躁日日躁狠狠躁av麻豆| 欧美色呦呦最新网址| 青青草精品在线视频观看| 中文字幕亚洲中文字幕| 国产综合精品久久久久蜜臀| 久碰精品少妇中文字幕av| 精品suv一区二区69| 亚洲va国产va欧美精品88| 欧美久久一区二区伊人| 欧美激情电影免费在线| 在线可以看的视频你懂的| 美女操逼免费短视频下载链接| 一区二区在线视频中文字幕 | 2021最新热播中文字幕| 亚洲国产成人无码麻豆艾秋| 久久久91蜜桃精品ad| 国产chinesehd精品麻豆| 精品欧美一区二区vr在线观看| 国产九色91在线视频| 国产精品sm调教视频| 免费费一级特黄真人片| 久久香蕉国产免费天天| 青青草精品在线视频观看| 在线免费观看黄页视频| 天天干天天爱天天色| 亚洲精品中文字幕下载| 中国熟女@视频91| 337p日本大胆欧美人| 国产麻豆剧传媒精品国产av蜜桃| 亚洲av色图18p| 97人妻总资源视频| 2022国产精品视频| lutube在线成人免费看| 91老熟女连续高潮对白| 亚洲激情偷拍一区二区| 天堂v男人视频在线观看| 神马午夜在线观看视频| 一区二区在线视频中文字幕| 亚国产成人精品久久久| 亚洲午夜电影在线观看| 91人妻精品久久久久久久网站| 护士小嫩嫩又紧又爽20p| 亚洲av无码成人精品区辽| 大香蕉福利在线观看| 2020中文字幕在线播放| 国产白袜脚足J棉袜在线观看| 男生舔女生逼逼视频| 热99re69精品8在线播放| 偷拍3456eee| 亚洲国产精品久久久久久6| 亚洲综合另类欧美久久| 成人精品视频99第一页| 亚洲欧洲一区二区在线观看| 11久久久久久久久久久| 不卡日韩av在线观看| 欧美熟妇一区二区三区仙踪林| 少妇人妻二三区视频| 成年人午夜黄片视频资源| 91一区精品在线观看| 婷婷六月天中文字幕| 成人国产激情自拍三区| 青青伊人一精品视频| 欧美老妇精品另类不卡片| 人妻丝袜诱惑我操她视频| av高潮迭起在线观看| 久碰精品少妇中文字幕av| 91国产在线视频免费观看| 亚洲成人国产综合一区| 成熟丰满熟妇高潮xx×xx| 国产精品视频一区在线播放| 亚洲免费视频欧洲免费视频| 最新欧美一二三视频| 丝袜长腿第一页在线| 1000部国产精品成人观看视频 | 宅男噜噜噜666免费观看| 国产不卡av在线免费| 天堂资源网av中文字幕| 大胆亚洲av日韩av| 久草极品美女视频在线观看| 19一区二区三区在线播放| 9国产精品久久久久老师| 在线观看免费岛国av| 亚洲护士一区二区三区| 中文字幕人妻一区二区视频 | 欧美精品激情在线最新观看视频| 国产日韩精品电影7777| 偷拍自拍亚洲视频在线观看| 国内精品在线播放第一页| 狠狠操狠狠操免费视频| 成人30分钟免费视频| AV无码一区二区三区不卡| 肏插流水妹子在线乐播下载 | 青青尤物在线观看视频网站| 亚洲中文精品字幕在线观看| 亚洲av天堂在线播放| 成人精品在线观看视频| 97国产福利小视频合集| 欧美精产国品一二三产品区别大吗| 91精品视频在线观看免费| 熟女妇女老妇一二三区| 天天干狠狠干天天操| 婷婷久久一区二区字幕网址你懂得| 99国产精品窥熟女精品| av乱码一区二区三区| 亚洲人妻av毛片在线| 男人的网址你懂的亚洲欧洲av| 夜色17s精品人妻熟女| 日本又色又爽又黄又粗| 岛国青草视频在线观看| 57pao国产一区二区| 青青青青青青青青青国产精品视频| 91精品国产综合久久久蜜| 日韩不卡中文在线视频网站| 这里有精品成人国产99| 2020久久躁狠狠躁夜夜躁| 国产高清精品一区二区三区| 国产成人自拍视频播放| 沙月文乃人妻侵犯中文字幕在线| 日韩精品中文字幕在线| 伊人情人综合成人久久网小说| av久久精品北条麻妃av观看| 超碰97人人澡人人| 五十路息与子猛烈交尾视频| 红杏久久av人妻一区| 美女视频福利免费看| 久草福利电影在线观看| 日视频免费在线观看| 亚洲 欧美 精品 激情 偷拍| 亚洲 清纯 国产com| 韩国黄色一级二级三级| 国产实拍勾搭女技师av在线| 男人的网址你懂的亚洲欧洲av| 97超碰国语国产97超碰| 端庄人妻堕落挣扎沉沦| 国产老熟女伦老熟妇ⅹ| 欲乱人妻少妇在线视频裸| 亚洲图片偷拍自拍区| 国产熟妇一区二区三区av| 黄页网视频在线免费观看| 最新激情中文字幕视频| 日本女大学生的黄色小视频| 99婷婷在线观看视频| 99热这里只有精品中文| 亚洲 欧美 自拍 偷拍 在线| 亚洲一区二区三区精品乱码| 最后99天全集在线观看| 夜色福利视频在线观看| 一二三中文乱码亚洲乱码one | 久久香蕉国产免费天天| 国产精品探花熟女在线观看| 91桃色成人网络在线观看| 在线免费视频 自拍| 亚洲激情,偷拍视频| 999久久久久999| 天天干天天操天天摸天天射| 亚洲精品麻豆免费在线观看| 亚洲av黄色在线网站| 欧美成人精品在线观看| 免费人成黄页网站在线观看国产| 精品美女在线观看视频在线观看| av网址在线播放大全| 亚洲一区二区三区偷拍女厕91| 免费十精品十国产网站| 色花堂在线av中文字幕九九| 1区2区3区4区视频在线观看| 日韩欧美亚洲熟女人妻| 99精品视频在线观看免费播放| 97国产在线av精品| 91精品视频在线观看免费| 少妇高潮一区二区三区| 99热碰碰热精品a中文| 欧美老鸡巴日小嫩逼| 亚洲精品成人网久久久久久小说| 日韩精品中文字幕在线| 白白操白白色在线免费视频| 久久精品国产23696| 日韩av免费观看一区| 五月精品丁香久久久久福利社| 日本韩国免费福利精品| 免费国产性生活视频| 国产一区成人在线观看视频| 一区二区在线观看少妇| 熟女俱乐部一二三区| 久久久久久99国产精品| 亚洲精品欧美日韩在线播放 | 摧残蹂躏av一二三区| 午夜成午夜成年片在线观看| 成熟熟女国产精品一区| av中文字幕在线导航| 国产综合视频在线看片| 亚洲精品欧美日韩在线播放 | 亚洲av琪琪男人的天堂| 婷婷久久久综合中文字幕| 婷婷六月天中文字幕| 3337p日本欧洲大胆色噜噜| 久久久精品精品视频视频| 天天日天天干天天干天天日| 在线播放 日韩 av| 免费福利av在线一区二区三区| 国产密臀av一区二区三| 国产欧美精品不卡在线| 日本熟妇丰满厨房55| 免费一级特黄特色大片在线观看| 青青青青草手机在线视频免费看| 亚洲的电影一区二区三区 | 自拍偷拍日韩欧美亚洲| 自拍偷拍 国产资源| 欧美精品一区二区三区xxxx| 人妻熟女中文字幕aⅴ在线| 大香蕉日本伊人中文在线| 日噜噜噜夜夜噜噜噜天天噜噜噜 | 亚洲国产欧美国产综合在线| 2021久久免费视频| 亚洲天天干 夜夜操| 一区二区三区久久久91| 中文字幕 亚洲av| 夜夜骑夜夜操夜夜奸| 真实国产乱子伦一区二区| 亚洲国际青青操综合网站| 五色婷婷综合狠狠爱| 三级黄色亚洲成人av| 亚洲超碰97人人做人人爱| 色综合久久久久久久久中文| 日本精品视频不卡一二三| 中文字幕熟女人妻久久久| 在线可以看的视频你懂的| 欧美精品资源在线观看| 成人性爱在线看四区| 日本成人一区二区不卡免费在线| 日韩精品中文字幕播放| 美女在线观看日本亚洲一区| 亚洲精品亚洲人成在线导航| 亚洲成人精品女人久久久| 91综合久久亚洲综合| 大鸡吧插入女阴道黄色片| 欧美久久一区二区伊人| 在线免费视频 自拍| 日本又色又爽又黄又粗| 特黄老太婆aa毛毛片| 人妻久久久精品69系列| 国产精品入口麻豆啊啊啊| 亚洲精品一区二区三区老狼| 久久久久久久久久一区二区三区| 国产熟妇乱妇熟色T区| 亚洲视频乱码在线观看| 91破解版永久免费| av乱码一区二区三区| 国产一级麻豆精品免费| www,久久久,com| 午夜91一区二区三区| 日韩中文字幕精品淫| 北条麻妃高跟丝袜啪啪| 直接能看的国产av| 香港三日本三韩国三欧美三级| 瑟瑟视频在线观看免费视频| 国产精品熟女久久久久浪潮| 男女之间激情网午夜在线| 水蜜桃一区二区三区在线观看视频| 97国产在线观看高清| 亚洲国产中文字幕啊啊啊不行了 | 国产视频网站一区二区三区| 久久久久久久精品成人热| av手机在线观播放网站| 国产成人自拍视频在线免费观看| 大肉大捧一进一出好爽在线视频| 亚洲av极品精品在线观看| 老有所依在线观看完整版| 成年人中文字幕在线观看| 美女少妇亚洲精选av| 色哟哟国产精品入口| 久久久麻豆精亚洲av麻花| 首之国产AV医生和护士小芳| 2019av在线视频| 精品国产在线手机在线| 久草视频在线看免费| 噜噜色噜噜噜久色超碰| 日韩影片一区二区三区不卡免费| 成年人该看的视频黄免费| 欧美一级片免费在线成人观看|