国产无遮挡裸体免费直播视频,久久精品国产蜜臀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)論

国产janese在线播放| 中国熟女@视频91| 亚洲av自拍天堂网| 五十路熟女人妻一区二| 一区二区三区四区中文| 啪啪啪啪啪啪啪啪啪啪黄色| 亚洲成人黄色一区二区三区| 欧亚日韩一区二区三区观看视频| 9色精品视频在线观看| 丝袜肉丝一区二区三区四区在线看| 国产乱子伦一二三区| 亚洲综合自拍视频一区| 顶级尤物粉嫩小尤物网站| 中文字幕高清免费在线人妻| 国产高清女主播在线| 岳太深了紧紧的中文字幕| 日本啪啪啪啪啪啪啪| 日韩美女精品视频在线观看网站| 另类av十亚洲av| 国产a级毛久久久久精品| 国产+亚洲+欧美+另类| 日本美女成人在线视频| 亚洲精品ww久久久久久| 天天干天天啪天天舔| 男生舔女生逼逼视频| 亚洲美女美妇久久字幕组| 国产又色又刺激在线视频| 午夜精品久久久久麻豆影视| 大鸡吧插入女阴道黄色片| 美女吃鸡巴操逼高潮视频| 青青青青青手机视频| 欧美黑人性猛交xxxxⅹooo| 大陆av手机在线观看| 欧美一区二区三区久久久aaa| 国产变态另类在线观看| 在线免费观看欧美小视频| 动色av一区二区三区| 一区二区三区 自拍偷拍| 夜夜骑夜夜操夜夜奸| 在线观看国产免费麻豆| 欧美美女人体视频一区| 日韩一个色综合导航| sw137 中文字幕 在线| 人妻凌辱欧美丰满熟妇| 人妻另类专区欧美制服| 男女啪啪视频免费在线观看| 天堂av在线播放免费| 免费av岛国天堂网站| 国产综合高清在线观看| 93精品视频在线观看| 欧美视频一区免费在线| 88成人免费av网站| 夜鲁夜鲁狠鲁天天在线| 中文字幕高清在线免费播放| 国产女人被做到高潮免费视频| 中文字幕人妻被公上司喝醉在线| 色偷偷伊人大杳蕉综合网| 在线观看欧美黄片一区二区三区| 99精品一区二区三区的区| 一级黄片久久久久久久久| 福利国产视频在线观看| 中国黄片视频一区91| 在线可以看的视频你懂的| 日日操综合成人av| 99精品免费久久久久久久久a| 91‖亚洲‖国产熟女| 端庄人妻堕落挣扎沉沦| 在线免费观看黄页视频| 亚洲国产欧美国产综合在线| 鸡巴操逼一级黄色气| 青青青国产片免费观看视频| 一区二区三区久久中文字幕| 欧美偷拍自拍色图片| 日本免费视频午夜福利视频| 大尺度激情四射网站| 老鸭窝日韩精品视频观看| av在线观看网址av| 欧美中文字幕一区最新网址| 91成人精品亚洲国产| 国产成人精品一区在线观看 | 欧美viboss性丰满| 最新欧美一二三视频| 91精品国产黑色丝袜| 在线免费观看日本片| 国产污污污污网站在线| 亚洲嫩模一区二区三区| 2021久久免费视频| 五月天色婷婷在线观看视频免费| 亚洲精品高清自拍av| 中文字幕国产专区欧美激情| 久久丁香花五月天色婷婷| 亚洲中文精品人人免费| 欧美老妇精品另类不卡片| 亚洲精品国品乱码久久久久| 福利视频一区二区三区筱慧| 99久久99一区二区三区| 一区二区三区美女毛片| 顶级尤物粉嫩小尤物网站| 天天干天天爱天天色| 快插进小逼里大鸡吧视频| 亚洲成人激情视频免费观看了| 亚洲福利午夜久久久精品电影网| 11久久久久久久久久久| 欧美一区二区三区激情啪啪啪| 亚洲欧美福利在线观看| 中文字母永久播放1区2区3区| 亚洲精品中文字幕下载| 性色蜜臀av一区二区三区| 最新国产精品网址在线观看| 极品性荡少妇一区二区色欲| 婷婷久久久综合中文字幕| lutube在线成人免费看| 老师啊太大了啊啊啊尻视频| 夜夜骑夜夜操夜夜奸| 欧美亚洲少妇福利视频| 在线免费视频 自拍| 国产黄色片在线收看| 中文字幕亚洲久久久| 一区二区熟女人妻视频| av网址国产在线观看| 成人sm视频在线观看| 青青青青青手机视频| 日韩北条麻妃一区在线| 亚洲精品久久综合久| 欧美精品免费aaaaaa| 98精产国品一二三产区区别| 欧美va亚洲va天堂va| 日韩人妻丝袜中文字幕| 国产成人精品亚洲男人的天堂| 中文字幕在线视频一区二区三区| 国产福利小视频二区| 成人国产小视频在线观看| 91传媒一区二区三区| 被大鸡吧操的好舒服视频免费| av中文字幕在线导航| 欲满人妻中文字幕在线| 91 亚洲视频在线观看| 亚洲va国产va欧美精品88| 人人妻人人爱人人草| 婷婷久久久综合中文字幕| 欧美成人黄片一区二区三区| 欧美偷拍自拍色图片| 亚洲偷自拍高清视频| 男生舔女生逼逼的视频| 日本特级片中文字幕| 天天日天天做天天日天天做| 青青青青青手机视频| 亚洲图库另类图片区| 天天操天天插天天色| 欧美色婷婷综合在线| av天堂中文字幕最新| 国产极品精品免费视频| 激情小视频国产在线| 又色又爽又黄的美女裸体| 国产精品欧美日韩区二区| 天天日天天操天天摸天天舔| 婷婷综合蜜桃av在线| 春色激情网欧美成人| 一区二区三区四区中文| 丝袜美腿视频诱惑亚洲无| 天堂女人av一区二区| 99的爱精品免费视频| 国产乱子伦一二三区| 男人天堂色男人av| 偷偷玩弄新婚人妻h视频| 亚洲青青操骚货在线视频| 成年美女黄网站18禁久久| 亚洲综合一区成人在线| 日本av高清免费网站| 久精品人妻一区二区三区| 青青社区2国产视频| 福利午夜视频在线观看| 国产精品入口麻豆啊啊啊| 精品人妻每日一部精品| 国产极品美女久久久久久| 久久久久久性虐视频| 午夜青青草原网在线观看| 大鸡巴插入美女黑黑的阴毛| 欧美viboss性丰满| 一级黄色av在线观看| 91天堂精品一区二区| 女同久久精品秋霞网| 超级碰碰在线视频免费观看| 99久久激情婷婷综合五月天| 亚洲熟妇无码一区二区三区| 在线免费91激情四射| 天天操天天干天天日狠狠插| 青青青青青手机视频| 性欧美激情久久久久久久| 无码精品一区二区三区人| 天天日夜夜干天天操| 亚洲 欧美 精品 激情 偷拍| 啪啪啪啪啪啪啪啪av| 亚洲av天堂在线播放| 午夜精品福利一区二区三区p | 色综合久久无码中文字幕波多| 欧美一级色视频美日韩| 黄色在线观看免费观看在线| 亚洲熟女女同志女同| 午夜在线精品偷拍一区二| 中文字幕一区二区三区人妻大片| 无套猛戳丰满少妇人妻 | 老熟妇凹凸淫老妇女av在线观看 | 欧美精品伦理三区四区| 日本xx片在线观看| 青青青视频自偷自拍38碰| 91中文字幕最新合集| 在线观看操大逼视频| 免费在线看的黄网站| 男生用鸡操女生视频动漫| 国产精品久久久黄网站| lutube在线成人免费看| 51国产偷自视频在线播放 | 亚洲av日韩av网站| 色综合久久无码中文字幕波多| 午夜91一区二区三区| 午夜久久久久久久精品熟女| 天天操天天插天天色| 骚逼被大屌狂草视频免费看| 日本精品一区二区三区在线视频。 | 免费国产性生活视频| 最后99天全集在线观看| 天天干天天日天天干天天操| 在线免费观看欧美小视频| 亚洲av黄色在线网站| 成人色综合中文字幕| 欧美韩国日本国产亚洲| 1000部国产精品成人观看视频| 亚洲免费在线视频网站| 免费一级特黄特色大片在线观看 | 国产在线一区二区三区麻酥酥| 中文字幕AV在线免费看 | 午夜激情久久不卡一区二区| 91av精品视频在线| 精品国产污污免费网站入口自| 亚洲精品在线资源站| 在线亚洲天堂色播av电影| 欧美日本国产自视大全| 精品成人午夜免费看| 干逼又爽又黄又免费的视频| 日本一区美女福利视频| 中文字幕第一页国产在线| 欧美黄色录像免费看的| 91免费福利网91麻豆国产精品| 中文 成人 在线 视频| 欧美亚洲中文字幕一区二区三区| 日韩北条麻妃一区在线| 亚洲欧美国产麻豆综合| 国产精品熟女久久久久浪潮| 欧美麻豆av在线播放| 国产福利小视频免费观看| 欧美成人黄片一区二区三区 | 熟女人妻在线观看视频| 天天射夜夜操狠狠干| 亚洲综合乱码一区二区| 中文字幕日韩91人妻在线| 欧美精品久久久久久影院| 天堂av中文在线最新版| 亚洲综合在线观看免费| 福利片区一区二体验区| 国产品国产三级国产普通话三级| 69精品视频一区二区在线观看| 国产又粗又猛又爽又黄的视频在线| 国产福利小视频大全| 在线视频这里只有精品自拍| 老司机免费视频网站在线看| 91九色porny蝌蚪国产成人| 漂亮 人妻被中出中文| 天天干天天操天天扣| 午夜毛片不卡在线看| 日韩亚洲高清在线观看| 日本丰满熟妇BBXBBXHD| 日本在线一区二区不卡视频| 特黄老太婆aa毛毛片| 中文字幕高清资源站| 动漫av网站18禁| 老司机99精品视频在线观看 | 蜜臀av久久久久蜜臀av麻豆| 精品高潮呻吟久久av| 插小穴高清无码中文字幕| 国产在线免费观看成人| 丰满少妇人妻xxxxx| 亚洲av日韩精品久久久久久hd| 大白屁股精品视频国产| 亚洲 中文 自拍 无码| 一区二区三区四区五区性感视频| 亚洲男人在线天堂网| 黄色片一级美女黄色片| 国产一线二线三线的区别在哪 | 91麻豆精品久久久久| 99婷婷在线观看视频| 日韩精品电影亚洲一区| 老熟妇凹凸淫老妇女av在线观看| 免费福利av在线一区二区三区| 最近的中文字幕在线mv视频| 被大鸡吧操的好舒服视频免费| 国产一级麻豆精品免费| 人妻另类专区欧美制服| 亚洲图库另类图片区| 伊人精品福利综合导航| 日韩黄色片在线观看网站| 日韩伦理短片在线观看| 视频在线免费观看你懂得| 国产精品成人xxxx| 欧美国品一二三产区区别| 日视频免费在线观看| 99热99re在线播放| 欧美第一页在线免费观看视频| 国产之丝袜脚在线一区二区三区| 污污小视频91在线观看| 三级av中文字幕在线观看| 91极品大一女神正在播放| 亚洲va国产va欧美va在线| 把腿张开让我插进去视频| 亚洲一区二区三区精品视频在线| 午夜美女少妇福利视频| 特黄老太婆aa毛毛片| 自拍偷拍一区二区三区图片| 青娱乐蜜桃臀av色| AV天堂一区二区免费试看| 蜜桃久久久久久久人妻| 久久精品国产23696| 亚洲欧美人精品高清| av大全在线播放免费| 日本免费视频午夜福利视频| 亚洲码av无色中文| 黄色av网站免费在线| 亚洲专区激情在线观看视频| 亚洲一级av大片免费观看| 亚洲熟妇久久无码精品| 亚洲激情av一区二区| 91精品综合久久久久3d动漫| 粉嫩av蜜乳av蜜臀| 欧美日韩情色在线观看| 老师啊太大了啊啊啊尻视频| 久久精品亚洲国产av香蕉| 亚洲av日韩av网站| 丝袜长腿第一页在线| 51国产成人精品视频| 国产精品黄片免费在线观看| 日本熟女精品一区二区三区| 亚洲欧美自拍另类图片| jul—619中文字幕在线| 狠狠地躁夜夜躁日日躁| 精品久久久久久久久久久久人妻| 三级等保密码要求条款| 精品人人人妻人人玩日产欧| 中文字幕,亚洲人妻| 国产精品久久久久网| 亚洲精品亚洲人成在线导航| 日本脱亚入欧是指什么| 亚洲va国产va欧美va在线| 青青青艹视频在线观看| 91老熟女连续高潮对白| 欧美专区第八页一区在线播放| 毛茸茸的大外阴中国视频| 一区二区三区毛片国产一区| 亚洲国产在线精品国偷产拍| 色哟哟国产精品入口| 亚洲日本一区二区三区| 亚洲最大黄 嗯色 操 啊| 久久久久只精品国产三级| 在线免费观看国产精品黄色| 亚洲精品乱码久久久本| 国产成人精品一区在线观看| 亚洲激情,偷拍视频| www久久久久久久久久久| 天天干天天操天天扣| 丝袜肉丝一区二区三区四区在线| 亚洲综合乱码一区二区| 中文字幕成人日韩欧美| 蜜桃视频在线欧美一区| 亚洲日产av一区二区在线| 香蕉av影视在线观看| 黄色男人的天堂视频| 国产性生活中老年人视频网站| 日本精品美女在线观看| 成人动漫大肉棒插进去视频| 9国产精品久久久久老师| 欧美专区第八页一区在线播放| 最新激情中文字幕视频| 天天干狠狠干天天操| 日日操综合成人av| 搡老妇人老女人老熟女| 97精品综合久久在线| 中文字幕免费在线免费| 美女吃鸡巴操逼高潮视频| 国产又大又黄免费观看| 日本少妇的秘密免费视频| 日美女屁股黄邑视频| AV天堂一区二区免费试看| 日本又色又爽又黄又粗| 午夜精品一区二区三区福利视频| 亚洲高清国产一区二区三区| 久草极品美女视频在线观看| 欧美日韩v中文在线| 欧美成人综合视频一区二区| 欧美偷拍亚洲一区二区| jiuse91九色视频| 国产老熟女伦老熟妇ⅹ| 在线观看欧美黄片一区二区三区| 人妻爱爱 中文字幕| av中文在线天堂精品| 国产又大又黄免费观看| 日日夜夜大香蕉伊人| 日本一二三中文字幕| 风流唐伯虎电视剧在线观看| 极品粉嫩小泬白浆20p主播| 大鸡吧插入女阴道黄色片| 日韩熟女系列一区二区三区| 国产成人精品午夜福利训2021| 色噜噜噜噜18禁止观看| 9国产精品久久久久老师| 天天色天天操天天舔| 91大屁股国产一区二区| 国产麻豆剧果冻传媒app| 1000部国产精品成人观看视频| 天天想要天天操天天干| 国产精品久久久久久久久福交| 爱有来生高清在线中文字幕| 激情综合治理六月婷婷| 亚洲欧美福利在线观看| 在线观看视频 你懂的| 2020久久躁狠狠躁夜夜躁| 男人的天堂一区二区在线观看| 超级碰碰在线视频免费观看| 亚洲成人三级在线播放| 3344免费偷拍视频| 黄色av网站免费在线| 天码人妻一区二区三区在线看| 国产男女视频在线播放| 青青青青青免费视频| 日韩一区二区三区三州| 日韩成人免费电影二区| 日韩熟女系列一区二区三区| 98精产国品一二三产区区别| yellow在线播放av啊啊啊| 欧洲黄页网免费观看| 亚洲精品一区二区三区老狼| 国产精品人妻66p| 在线观看视频一区麻豆| 91自产国产精品视频| 一级黄色片夫妻性生活| 日韩欧美中文国产在线| 免费啪啪啪在线观看视频| 国产福利在线视频一区| 日韩美在线观看视频黄| 漂亮 人妻被中出中文| 欧美黑人巨大性xxxxx猛交| 国产精选一区在线播放| 日韩三级黄色片网站| 特级无码毛片免费视频播放 | 欧美韩国日本国产亚洲| 欧美亚洲一二三区蜜臀| 欲乱人妻少妇在线视频裸| 欧美特级特黄a大片免费| 韩国男女黄色在线观看| 动漫黑丝美女的鸡巴| 亚洲精品三级av在线免费观看| 伊人情人综合成人久久网小说| 亚洲欧美人精品高清| 一区二区在线视频中文字幕| 亚洲 清纯 国产com| caoporn蜜桃视频| 伊人成人在线综合网| 亚洲免费在线视频网站| 日本又色又爽又黄又粗| caoporn蜜桃视频| 欧美性感尤物人妻在线免费看| 任你操视频免费在线观看| 在线观看免费av网址大全| 日曰摸日日碰夜夜爽歪歪| 亚洲免费av在线视频| 精品久久久久久久久久久99| 日韩黄色片在线观看网站| 亚洲专区激情在线观看视频| 一区二区三区久久中文字幕| 亚洲天堂精品福利成人av| 日本丰满熟妇大屁股久久| 国产一区成人在线观看视频 | 欧美精品中文字幕久久二区| 久久麻豆亚洲精品av| 国产成人午夜精品福利| 首之国产AV医生和护士小芳| 大鸡巴插入美女黑黑的阴毛| 国产亚洲精品品视频在线| ka0ri在线视频| 自拍偷区二区三区麻豆| 一区二区三区av高清免费| 99国产精品窥熟女精品| 国产美女午夜福利久久| 午夜av一区二区三区| 久久久久久九九99精品| av在线免费中文字幕| 久久这里有免费精品| 日本黄色三级高清视频| 91国产资源在线视频| 久草极品美女视频在线观看| 亚洲最大免费在线观看| 97超碰最新免费在线观看| 亚洲午夜电影在线观看| 人妻丝袜av在线播放网址| 欧美精品资源在线观看| av资源中文字幕在线观看| 国产免费av一区二区凹凸四季| 亚洲免费在线视频网站| av一本二本在线观看| 日韩av免费观看一区| 日韩特级黄片高清在线看| 无码中文字幕波多野不卡| 北条麻妃肉色丝袜视频| 精品久久久久久久久久久a√国产| 免费国产性生活视频| 婷婷六月天中文字幕| 青草亚洲视频在线观看| 黄色片一级美女黄色片| 黄色无码鸡吧操逼视频| 91自产国产精品视频| 18禁精品网站久久| 国产午夜激情福利小视频在线| 女同互舔一区二区三区| 国产一区av澳门在线观看| 99精品视频在线观看婷婷| 国产日本欧美亚洲精品视| 99av国产精品欲麻豆| 国产高清在线观看1区2区| 久久久久国产成人精品亚洲午夜| 岛国黄色大片在线观看| 亚洲免费va在线播放| 色婷婷综合激情五月免费观看| 换爱交换乱高清大片| 97超碰国语国产97超碰| 婷婷色中文亚洲网68| 蜜桃精品久久久一区二区| 夜鲁夜鲁狠鲁天天在线| 午夜精品九一唐人麻豆嫩草成人| 免费费一级特黄真人片| 亚洲精品麻豆免费在线观看| 午夜激情精品福利视频| 亚洲天堂有码中文字幕视频| 综合激情网激情五月天| 国产精品久久久久久久久福交| 亚洲成人av一区久久| 97国产在线av精品| 这里只有精品双飞在线播放| www天堂在线久久| 黄色录像鸡巴插进去| 国产精品一区二区久久久av| 国产精品黄页网站视频| 国产极品精品免费视频| 75国产综合在线视频| 国产中文精品在线观看| 亚洲天堂精品福利成人av| www久久久久久久久久久| 五十路息与子猛烈交尾视频| 欧美久久一区二区伊人| 欧美韩国日本国产亚洲| 不卡精品视频在线观看| 日韩三级黄色片网站| 成年女人免费播放视频| 久久久久只精品国产三级| 2025年人妻中文字幕乱码在线| 啊啊好慢点插舔我逼啊啊啊视频| 日本后入视频在线观看| 少妇被强干到高潮视频在线观看| 婷婷综合蜜桃av在线| 都市激情校园春色狠狠| 久久三久久三久久三久久| 日本乱人一区二区三区| 五月天色婷婷在线观看视频免费| 中文字幕在线乱码一区二区| 天天日天天干天天干天天日| 99久久99一区二区三区| 成人av电影免费版| 777奇米久久精品一区| 999九九久久久精品| 狠狠鲁狠狠操天天晚上干干| 亚洲成人激情视频免费观看了 | jiuse91九色视频| 国产性感美女福利视频| 端庄人妻堕落挣扎沉沦| 视频久久久久久久人妻| 亚洲一区二区三区精品乱码| 久久久久久久精品老熟妇| 男人操女人逼逼视频网站| 男人天堂av天天操| 18禁免费av网站| 午夜美女福利小视频| 最新中文字幕乱码在线| 1区2区3区4区视频在线观看| 九九视频在线精品播放| 国产va精品免费观看| 国产精品国产三级国产午| 欧美精品 日韩国产| 久草视频中文字幕在线观看| 美女操逼免费短视频下载链接| 爆乳骚货内射骚货内射在线| 国产一区av澳门在线观看| 精品视频一区二区三区四区五区| 社区自拍揄拍尻屁你懂的| 91免费观看国产免费| 欧美日韩激情啪啪啪| 亚洲女人的天堂av| 欧美亚洲国产成人免费在线| 91麻豆精品久久久久| 久久人人做人人妻人人玩精品vr| 人妻少妇一区二区三区蜜桃| 亚洲精品福利网站图片| 欧美在线偷拍视频免费看| 日韩亚洲高清在线观看| 最新中文字幕乱码在线| 自拍偷拍亚洲另类色图| 99精品视频之69精品视频| 欧美在线精品一区二区三区视频 | 婷婷激情四射在线观看视频| 黄色男人的天堂视频| 国产超码片内射在线| 欧美在线一二三视频| 国产黄色高清资源在线免费观看| 日比视频老公慢点好舒服啊| 欧美在线精品一区二区三区视频| 亚洲国产中文字幕啊啊啊不行了| 国产超码片内射在线| 视频在线免费观看你懂得| 黄色片黄色片wyaa| 国产福利小视频免费观看| 久久久久久99国产精品| 亚洲国产在人线放午夜| 2020韩国午夜女主播在线| 久久久久久久精品成人热| 亚洲一级美女啪啪啪| 国产精品一区二区三区蜜臀av | 午夜毛片不卡免费观看视频| 国产清纯美女al在线| 国产91久久精品一区二区字幕| 久久美欧人妻少妇一区二区三区| 欧美视频一区免费在线| 久草电影免费在线观看| 亚洲精品精品国产综合| 三级av中文字幕在线观看| 日韩精品啪啪视频一道免费| 久久亚洲天堂中文对白| 亚洲1卡2卡三卡4卡在线观看| 亚洲高清视频在线不卡| 午夜91一区二区三区| 综合精品久久久久97| 亚洲第一伊人天堂网| 2017亚洲男人天堂| 曰本无码人妻丰满熟妇啪啪| 激情色图一区二区三区| 888亚洲欧美国产va在线播放| 国产视频精品资源网站| 青青青青青青青青青青草青青 | 伊人开心婷婷国产av| 久久久久久久精品老熟妇| 非洲黑人一级特黄片| 五月精品丁香久久久久福利社| 影音先锋女人av噜噜色| 狠狠鲁狠狠操天天晚上干干| 97人妻人人澡爽人人精品| 日韩午夜福利精品试看| 亚洲男人的天堂a在线| 日韩av有码中文字幕| 亚洲高清国产拍青青草原| 亚洲成人线上免费视频观看| 亚洲国产最大av综合| 亚洲成人线上免费视频观看| 国产亚洲成人免费在线观看| 亚洲av一妻不如妾| 啪啪啪啪啪啪啪免费视频| 婷婷六月天中文字幕| 老熟妇凹凸淫老妇女av在线观看| 大鸡吧插逼逼视频免费看| 国产一区二区神马久久| av中文字幕福利网| 天天日天天日天天擦| 国产黄色片在线收看| 国产美女一区在线观看| 沙月文乃人妻侵犯中文字幕在线| 亚洲成高清a人片在线观看| av中文在线天堂精品| 亚洲在线免费h观看网站| 国产高清女主播在线| 91亚洲手机在线视频播放| 性生活第二下硬不起来| 亚洲 色图 偷拍 欧美| 在线国产中文字幕视频| 久草福利电影在线观看| 亚洲嫩模一区二区三区| 高潮视频在线快速观看国家快速| 天天日天天日天天擦| 视频 一区二区在线观看| 亚洲综合在线观看免费| 日本熟妇喷水xxx| 国语对白xxxx乱大交| 欧美日韩激情啪啪啪| 中文字幕在线第一页成人| 天天操天天插天天色| 国产中文精品在线观看| 91久久综合男人天堂| 姐姐的朋友2在线观看中文字幕 | 晚上一个人看操B片| 天天操天天爽天天干| 国产又大又黄免费观看| 综合色区亚洲熟妇shxstz| 亚洲午夜高清在线观看| 沙月文乃人妻侵犯中文字幕在线 | 在线亚洲天堂色播av电影| 午夜精品福利91av| 大屁股熟女一区二区三区| 国产在线91观看免费观看| 亚洲最大黄 嗯色 操 啊| 任你操视频免费在线观看| 亚洲中文精品人人免费| 黄页网视频在线免费观看| 中国熟女@视频91| okirakuhuhu在线观看| 97成人免费在线观看网站| 日韩成人性色生活片| 国产欧美日韩第三页| 精彩视频99免费在线| 岛国免费大片在线观看| 97色视频在线观看| 国产麻豆91在线视频| 亚洲图片偷拍自拍区| 国产卡一卡二卡三乱码手机| 福利午夜视频在线观看| 欧美日韩在线精品一区二区三| 欧美精品黑人性xxxx| sw137 中文字幕 在线| 动漫黑丝美女的鸡巴| 免费黄高清无码国产| 东京热男人的av天堂| 亚洲欧美一区二区三区电影| 午夜精品亚洲精品五月色| 精品国产乱码一区二区三区乱| 国产精品伦理片一区二区| 密臀av一区在线观看| 亚洲高清免费在线观看视频| 青青草成人福利电影| 日本熟妇色熟妇在线观看| 免费成人va在线观看| 久久久久五月天丁香社区 | 精品久久久久久高潮| 青青草在观免费国产精品| 日韩不卡中文在线视频网站| 宅男噜噜噜666国产| 看一级特黄a大片日本片黑人| 九色精品视频在线播放| 日韩人妻丝袜中文字幕| 免费观看理论片完整版| 爆乳骚货内射骚货内射在线| 日本少妇高清视频xxxxx| 经典国语激情内射视频| 肏插流水妹子在线乐播下载| 性感美女高潮视频久久久| 中文字幕一区二区人妻电影冢本| 亚洲成人免费看电影| 阿v天堂2014 一区亚洲| 福利片区一区二体验区| 青青青青青操视频在线观看| 免费高清自慰一区二区三区网站| 99久久激情婷婷综合五月天| 手机看片福利盒子日韩在线播放 | 亚洲中文字字幕乱码| 一区二区三区 自拍偷拍| 国产 在线 免费 精品| 久久精品36亚洲精品束缚| 精品国产污污免费网站入口自| 社区自拍揄拍尻屁你懂的 | 青青青青操在线观看免费| 99热久久极品热亚洲| 在线观看的a站 最新| 在线观看欧美黄片一区二区三区 | 欧美黄片精彩在线免费观看| 一级黄片久久久久久久久| 国产成人午夜精品福利| 97成人免费在线观看网站| 欧美精品 日韩国产| 天天综合天天综合天天网| 北条麻妃高跟丝袜啪啪| 天天日天天干天天舔天天射| 国产女人被做到高潮免费视频| av高潮迭起在线观看| 天天操天天污天天射| v888av在线观看视频| 国产日本精品久久久久久久 | 午夜青青草原网在线观看| 啪啪啪啪啪啪啪啪啪啪黄色| 国产精品久久久久久久精品视频 | 亚洲图片欧美校园春色| 日韩av有码中文字幕| 99婷婷在线观看视频| 国产精品人久久久久久| 天天操天天干天天插| 清纯美女在线观看国产| 日韩北条麻妃一区在线| 888欧美视频在线| 91免费观看在线网站| 偷拍自拍国产在线视频| 夜夜嗨av蜜臀av| 免费啪啪啪在线观看视频| 日本韩国在线观看一区二区| 抽查舔水白紧大视频| 99国产精品窥熟女精品| 一级黄色av在线观看| 国产美女精品福利在线| 美女张开两腿让男人桶av| 中文字幕亚洲久久久| 久久久极品久久蜜桃| 国产成人综合一区2区| 日韩特级黄片高清在线看| 久久午夜夜伦痒痒想咳嗽P| 亚洲 欧美 精品 激情 偷拍| 日韩欧美一级aa大片| 中文字幕第一页国产在线| 久久精品国产亚洲精品166m| 综合页自拍视频在线播放| 午夜精品在线视频一区| 91精品综合久久久久3d动漫| 好了av中文字幕在线| 天天干夜夜操啊啊啊| 精品一区二区三区三区88| 亚洲麻豆一区二区三区| 日本人妻少妇18—xx| 欧美特色aaa大片| 天天色天天操天天舔| 大骚逼91抽插出水视频| 国产亚洲视频在线二区| 熟女人妻三十路四十路人妻斩| 亚洲 图片 欧美 图片| 扒开腿挺进肉嫩小18禁视频| 日本性感美女写真视频| 高潮视频在线快速观看国家快速| av乱码一区二区三区| 日韩精品中文字幕福利| 国产麻豆国语对白露脸剧情| 班长撕开乳罩揉我胸好爽| 国产亚洲视频在线二区| 97年大学生大白天操逼| 91快播视频在线观看| 2022国产综合在线干| www天堂在线久久| 日本熟女精品一区二区三区| 国产麻豆国语对白露脸剧情| 国产亚洲精品视频合集| 男人天堂最新地址av| 国产欧美精品免费观看视频| 顶级尤物粉嫩小尤物网站| 亚洲精品国产在线电影| 九九热99视频在线观看97| 国产成人综合一区2区| 亚洲图片欧美校园春色| 亚洲熟妇久久无码精品| 五月色婷婷综合开心网4438| 一本久久精品一区二区| 和邻居少妇愉情中文字幕| 成人av亚洲一区二区| 91人妻精品一区二区在线看| 一区二区三区另类在线| 亚洲超碰97人人做人人爱| av日韩在线免费播放| 亚洲av男人天堂久久| 黄色视频成年人免费观看| 人妻少妇一区二区三区蜜桃| 午夜久久久久久久精品熟女| 青青青青在线视频免费观看| 精品av国产一区二区三区四区| 中文乱理伦片在线观看| 91av中文视频在线| 免费黄色成人午夜在线网站| 久久国产精品精品美女| 都市家庭人妻激情自拍视频| 欧美 亚洲 另类综合| 99热久久极品热亚洲| 日韩精品中文字幕播放| 亚洲中文字幕校园春色| 国产超码片内射在线| 一二三区在线观看视频| 亚洲欧美综合在线探花| 丝袜长腿第一页在线| 午夜av一区二区三区| 春色激情网欧美成人| 老司机免费视频网站在线看| 亚洲天堂成人在线观看视频网站| 亚洲 中文 自拍 无码| 大屁股肉感人妻中文字幕在线| 夏目彩春在线中文字幕| 都市家庭人妻激情自拍视频| 中文字幕在线免费第一页| 99热这里只有国产精品6| xxx日本hd高清| 好太好爽好想要免费| 97精品成人一区二区三区| 啪啪啪啪啪啪啪免费视频| 国产九色91在线视频| 女蜜桃臀紧身瑜伽裤| 日韩三级电影华丽的外出| 亚欧在线视频你懂的| 精品日产卡一卡二卡国色天香| 亚洲av无女神免非久久| 色97视频在线播放| aⅴ精产国品一二三产品| 亚洲成人熟妇一区二区三区| 欧美精品黑人性xxxx| 黑人乱偷人妻中文字幕| 2021天天色天天干| av新中文天堂在线网址| 亚洲熟女女同志女同| 国产精品亚洲在线观看| 成人av天堂丝袜在线观看| 中文字幕 亚洲av| 欧美精品亚洲精品日韩在线| 国产V亚洲V天堂无码欠欠| 2020中文字幕在线播放| 午夜在线一区二区免费| 日韩欧美一级精品在线观看| 国产白袜脚足J棉袜在线观看| 2020久久躁狠狠躁夜夜躁 | 久久久精品999精品日本| 熟女人妻在线中出观看完整版| 黄色成人在线中文字幕| 亚洲成高清a人片在线观看| 日本a级视频老女人| 日韩三级黄色片网站| 人人爽亚洲av人人爽av| 女生被男生插的视频网站| 岛国免费大片在线观看| 中文字幕高清免费在线人妻 | 欧美区一区二区三视频| 97精品人妻一区二区三区精品| 国产成人精品亚洲男人的天堂| 这里有精品成人国产99| 国产精品自拍偷拍a| 91小伙伴中女熟女高潮| 最新的中文字幕 亚洲| 中文字幕亚洲中文字幕| 国产黄色片在线收看| 2o22av在线视频| 手机看片福利盒子日韩在线播放 | 午夜精品福利91av| av天堂加勒比在线| 午夜精品亚洲精品五月色| 成熟熟女国产精品一区| 高清一区二区欧美系列| 人妻少妇中文有码精品| av中文字幕电影在线看| 狠狠操狠狠操免费视频| 亚洲国产免费av一区二区三区| 一区二区三区美女毛片| 欧美亚洲自偷自拍 在线| 国产刺激激情美女网站| 国产视频一区在线观看| 日本丰满熟妇大屁股久久| 狍和女人的王色毛片| 久久久极品久久蜜桃| 美女大bxxxx内射| 国产女人叫床高潮大片视频| 精品av国产一区二区三区四区| 亚洲成人av一区久久| 欧美日韩v中文在线| 性色蜜臀av一区二区三区| 大胸性感美女羞爽操逼毛片| 欧美韩国日本国产亚洲| 国产精品视频欧美一区二区| 青娱乐极品视频青青草| 91老熟女连续高潮对白| 亚洲青青操骚货在线视频| 很黄很污很色的午夜网站在线观看| 免费无码人妻日韩精品一区二区| 中文字幕第三十八页久久| 丰满的继坶3中文在线观看| 成人蜜臀午夜久久一区| 经典亚洲伊人第一页| 久久精品国产亚洲精品166m| 97超碰免费在线视频| 精品av国产一区二区三区四区| 男人在床上插女人视频| 自拍偷拍,中文字幕| 天天日天天干天天搡| 日本后入视频在线观看| 欧美日韩不卡一区不区二区| av视屏免费在线播放| 亚洲最大免费在线观看| 日本女大学生的黄色小视频| 好太好爽好想要免费| 91快播视频在线观看| 亚洲欧美激情中文字幕| 亚洲精品高清自拍av| 欧美viboss性丰满| 国产一区二区视频观看| 国产精品久久久久久美女校花| 国产一级麻豆精品免费| 亚洲av极品精品在线观看| 精品一区二区三区欧美| 中文字幕一区二 区二三区四区 | 亚洲专区激情在线观看视频| 3344免费偷拍视频| 亚洲成人激情视频免费观看了 | 亚洲国产成人最新资源| 一区二区三区av高清免费| 丝袜美腿欧美另类 中文字幕| lutube在线成人免费看| 一区二区视频视频视频| 91免费观看国产免费| 欧美在线精品一区二区三区视频| av线天堂在线观看| 欧美视频综合第一页| 国产一区二区三免费视频| 天天干狠狠干天天操| 亚洲综合乱码一区二区| 人人妻人人澡人人爽人人dvl| 一区二区三区精品日本| 欧美亚洲自偷自拍 在线| 日本韩国免费福利精品| 午夜频道成人在线91| 521精品视频在线观看| 久草极品美女视频在线观看| 视频二区在线视频观看| 国产熟妇乱妇熟色T区| huangse网站在线观看| 亚洲精品国产久久久久久| 久久久精品精品视频视频| 在线观看亚洲人成免费网址| 自拍偷拍 国产资源| 亚洲精品在线资源站| 亚洲欧美一卡二卡三卡| 日韩亚洲高清在线观看| 91免费放福利在线观看| 亚洲最大黄了色网站| 在线免费观看av日韩| 日韩精品中文字幕在线| 色狠狠av线不卡香蕉一区二区 | 欧美成人小视频在线免费看| 精品亚洲在线免费观看| 亚洲变态另类色图天堂网| sspd152中文字幕在线| tube69日本少妇| 免费黄页网站4188| 人人妻人人人操人人人爽| 青娱乐最新视频在线| 亚洲天堂精品福利成人av| 最新的中文字幕 亚洲| 午夜精品福利91av| 男女啪啪视频免费在线观看| 午夜精品一区二区三区城中村| 毛片av在线免费看| 亚洲图片偷拍自拍区| 99精品国产免费久久| 男人的天堂av日韩亚洲| 不卡精品视频在线观看| 精品欧美一区二区vr在线观看| 中文字幕中文字幕人妻| 亚洲熟色妇av日韩熟色妇在线| 天天射夜夜操狠狠干| 日本黄色特一级视频| 精品久久久久久久久久久久人妻| 手机看片福利盒子日韩在线播放| 日本欧美视频在线观看三区| 一区二区视频在线观看视频在线| 91chinese在线视频| 日本裸体熟妇区二区欧美| 好吊视频—区二区三区| 国产成人综合一区2区| 国产一区二区火爆视频| 天堂中文字幕翔田av| 亚洲一区二区久久久人妻| gay gay男男瑟瑟在线网站| www日韩毛片av| 国产女人叫床高潮大片视频| 青青尤物在线观看视频网站| 人人妻人人爱人人草| 都市激情校园春色狠狠| 中文字幕网站你懂的| 男生用鸡操女生视频动漫| 天天干天天爱天天色| 精品美女福利在线观看| 日韩精品啪啪视频一道免费| 9l人妻人人爽人人爽| 51精品视频免费在线观看| 91传媒一区二区三区| 91精品国产91青青碰| 青青草国内在线视频精选| 天天日天天干天天插舔舔| 亚洲av极品精品在线观看| 天堂av狠狠操蜜桃| 欧美黄片精彩在线免费观看| 色婷婷六月亚洲综合香蕉| 亚洲精品国产在线电影| 天天日天天透天天操| 白嫩白嫩美女极品国产在线观看| 久青青草视频手机在线免费观看 | 亚洲中文精品字幕在线观看| 午夜福利人人妻人人澡人人爽| 日本黄色特一级视频| 又色又爽又黄的美女裸体| 99视频精品全部15| 人妻激情图片视频小说| 天天日天天日天天擦| 红桃av成人在线观看| 丁香花免费在线观看中文字幕| 日本一二三中文字幕| 很黄很污很色的午夜网站在线观看| 40道精品招牌菜特色| 国产欧美精品一区二区高清| 岛国毛片视频免费在线观看| 青青青视频手机在线观看| 亚洲av午夜免费观看| 一个色综合男人天堂| 日本熟女精品一区二区三区| 动漫美女的小穴视频| 成人午夜电影在线观看 久久| 国产变态另类在线观看| 亚洲午夜伦理视频在线| 欧美一区二区三区激情啪啪啪| 黄色三级网站免费下载| 伊人精品福利综合导航| 五十路息与子猛烈交尾视频 | 欧美黑人巨大性xxxxx猛交| 国产精品探花熟女在线观看| 久久久精品国产亚洲AV一| 大香蕉伊人国产在线| 亚洲国产精品中文字幕网站| 亚洲欧美激情中文字幕| 美女视频福利免费看| 国产日韩精品免费在线| 亚洲av第国产精品| 亚洲成人激情av在线| 91九色porny国产蝌蚪视频| 亚洲精品国偷自产在线观看蜜桃| 欧美精产国品一二三产品区别大吗| 国产变态另类在线观看| 日日夜夜大香蕉伊人| 日本av高清免费网站| 宅男噜噜噜666免费观看| 农村胖女人操逼视频| 大香蕉大香蕉在线有码 av| 久久精品久久精品亚洲人| 男女啪啪视频免费在线观看| 欧美一区二区三区乱码在线播放| 国产乱弄免费视频观看| 久久久噜噜噜久久熟女av| 适合午夜一个人看的视频| 国产91精品拍在线观看| 一区二区免费高清黄色视频| lutube在线成人免费看| 日韩美女搞黄视频免费| 国产普通话插插视频| 欧美成人精品欧美一级黄色| 天天操天天爽天天干| 1769国产精品视频免费观看| 亚洲av日韩精品久久久久久hd| 婷婷综合亚洲爱久久| 午夜精品在线视频一区| 做爰视频毛片下载蜜桃视频1 | av黄色成人在线观看| 午夜大尺度无码福利视频| 国产亚洲欧美视频网站| 亚洲av人人澡人人爽人人爱| jul—619中文字幕在线| 成人精品视频99第一页| 天天干天天爱天天色| 亚洲国际青青操综合网站| 日本xx片在线观看| 一区二区三区蜜臀在线| 2021国产一区二区| 超级福利视频在线观看| 青青在线视频性感少妇和隔壁黑丝| 亚洲精品成人网久久久久久小说| 国产一区二区三免费视频| 97国产精品97久久| 国产精品人妻熟女毛片av久| 3344免费偷拍视频| 亚洲2021av天堂| 国产中文精品在线观看| 日本在线一区二区不卡视频| 成人亚洲精品国产精品| 免费观看污视频网站| 2020国产在线不卡视频 | 91av中文视频在线| 在线国产精品一区二区三区| 亚洲高清国产拍青青草原| 男人天堂av天天操| 亚洲天堂有码中文字幕视频| 最新黄色av网站在线观看| 日韩熟女av天堂系列| 国产又粗又黄又硬又爽| 精品人人人妻人人玩日产欧| 成人蜜臀午夜久久一区| 啪啪啪啪啪啪啪啪av| 久久一区二区三区人妻欧美 | 日本黄色特一级视频| 日本性感美女视频网站| 精品一区二区三区在线观看| 亚洲国产最大av综合| 狠狠的往里顶撞h百合| 超碰97免费人妻麻豆| 中文字幕高清在线免费播放| 在线播放国产黄色av| 精品av国产一区二区三区四区| 91啪国自产中文字幕在线| 欧美一区二区三区高清不卡tv| 自拍 日韩 欧美激情| 中文字幕第三十八页久久 | 精品suv一区二区69| 中文字幕人妻被公上司喝醉在线| 亚洲成人黄色一区二区三区| 成人性黑人一级av| 日韩三级黄色片网站| 天天射,天天操,天天说| 欧美另类重口味极品在线观看| 超黄超污网站在线观看| 国产熟妇一区二区三区av| 亚洲午夜电影在线观看| 欧美天堂av无线av欧美| 日韩加勒比东京热二区| 精品美女福利在线观看| 在线免费观看日本伦理| 2021久久免费视频| 国产视频在线视频播放| 直接观看免费黄网站| 99久久超碰人妻国产| 日本熟女精品一区二区三区| 好男人视频在线免费观看网站| AV天堂一区二区免费试看| 爆乳骚货内射骚货内射在线| 黑人解禁人妻叶爱071| 亚洲欧美国产综合777| 亚洲国产精品久久久久蜜桃| sw137 中文字幕 在线| 中文字幕中文字幕 亚洲国产| 青青草成人福利电影| 国产精品久久久黄网站| 欧洲日韩亚洲一区二区三区| 国产精品日韩欧美一区二区| 国产又大又黄免费观看| 91人妻精品久久久久久久网站| 亚洲天堂av最新网址| 91精品国产91久久自产久强| 丝袜长腿第一页在线| 色婷婷精品大在线观看| 青青青青青免费视频| gogo国模私拍视频| 中国熟女一区二区性xx| 一区二区麻豆传媒黄片| 天天日天天干天天要| 91免费观看在线网站| 青青色国产视频在线| 区一区二区三国产中文字幕| 亚洲av色香蕉一区二区三区| 日日夜夜大香蕉伊人| 99精品免费久久久久久久久a| 一区二区麻豆传媒黄片| 三级黄色亚洲成人av| 自拍偷拍亚洲精品第2页| 男人靠女人的逼视频| 欧美中文字幕一区最新网址 | 欧美精品中文字幕久久二区| 日本av熟女在线视频| 国产精品久久综合久久| 天天操夜夜骑日日摸| 日曰摸日日碰夜夜爽歪歪| 大香蕉伊人国产在线| 亚洲精品久久视频婷婷| 亚洲免费在线视频网站| 99婷婷在线观看视频| 日本裸体熟妇区二区欧美| 99av国产精品欲麻豆| 人妻3p真实偷拍一二区| 18禁美女黄网站色大片下载| 国产又粗又硬又猛的毛片视频| 亚洲国产香蕉视频在线播放| 在线观看视频污一区| 国产chinesehd精品麻豆| 97超碰免费在线视频| 亚洲嫩模一区二区三区| 日韩写真福利视频在线观看| 人人人妻人人澡人人| 欧美乱妇无乱码一区二区| 性色蜜臀av一区二区三区| 狠狠躁夜夜躁人人爽天天天天97| 天天操夜夜操天天操天天操| 在线观看日韩激情视频| 欧美亚洲免费视频观看| 少妇深喉口爆吞精韩国| 久久精品亚洲国产av香蕉| 欧美精品欧美极品欧美视频| 黑人巨大精品欧美视频| 成人av久久精品一区二区| 亚洲av自拍偷拍综合| 99av国产精品欲麻豆| 超鹏97历史在线观看| 成人sm视频在线观看| 欧美另类一区二区视频| av网址国产在线观看| 在线视频自拍第三页| av中文在线天堂精品| 超级av免费观看一区二区三区| 一区二区熟女人妻视频| 直接能看的国产av| 91国语爽死我了不卡| 国产一区成人在线观看视频| 北条麻妃肉色丝袜视频| 免费在线看的黄片视频| 天天操夜夜操天天操天天操| 性欧美日本大妈母与子| 日本后入视频在线观看| 91九色国产熟女一区二区| 传媒在线播放国产精品一区| 久久久久久久久久一区二区三区| 换爱交换乱高清大片| 玩弄人妻熟妇性色av少妇| 亚洲精品久久视频婷婷| 国产一级麻豆精品免费| 日韩av大胆在线观看| 男女啪啪啪啪啪的网站| 中国无遮挡白丝袜二区精品| 人人妻人人爱人人草| 国产成人精品久久二区91| 亚洲熟妇久久无码精品| 最新日韩av传媒在线| h国产小视频福利在线观看| 国产精品污污污久久| 国产白袜脚足J棉袜在线观看| 亚洲一区二区三区精品乱码| 蜜桃专区一区二区在线观看| 97a片免费在线观看| 国产精品熟女久久久久浪潮| 欧洲国产成人精品91铁牛tv| 国产高清在线观看1区2区| 国产美女午夜福利久久| 中文字幕1卡1区2区3区| 日噜噜噜夜夜噜噜噜天天噜噜噜| 亚洲 中文 自拍 另类 欧美 | 丝袜肉丝一区二区三区四区在线看| 男人插女人视频网站| 亚洲欧美一区二区三区爱爱动图| 蜜臀av久久久久久久| av久久精品北条麻妃av观看| 日本av高清免费网站| 韩国一级特黄大片做受| 欧美视频中文一区二区三区| jul—619中文字幕在线| av亚洲中文天堂字幕网| 日韩午夜福利精品试看| 天天日天天干天天舔天天射| 自拍 日韩 欧美激情| 骚逼被大屌狂草视频免费看| 亚洲黄色av网站免费播放| 91人妻人人做人人爽在线| 亚洲国产在线精品国偷产拍| 国产在线观看黄色视频| 日韩av大胆在线观看| 一区二区三区四区五区性感视频| 午夜精品一区二区三区福利视频| 色偷偷伊人大杳蕉综合网| 偷拍自拍亚洲视频在线观看| 在线观看一区二区三级| 久久免费看少妇高潮完整版| 久久这里有免费精品| 51精品视频免费在线观看| 国产精品女邻居小骚货| 啪啪啪18禁一区二区三区| 精产国品久久一二三产区区别| 亚洲熟色妇av日韩熟色妇在线| 国产极品美女久久久久久| 岛国一区二区三区视频在线| 欧美国品一二三产区区别| 日本午夜爽爽爽爽爽视频在线观看 | 午夜激情高清在线观看| 九色视频在线观看免费| 蜜桃色婷婷久久久福利在线| 亚洲在线免费h观看网站| 天天通天天透天天插| 日噜噜噜夜夜噜噜噜天天噜噜噜 | aiss午夜免费视频| 亚洲嫩模一区二区三区| yy6080国产在线视频| 亚欧在线视频你懂的| 日韩在线视频观看有码在线| 亚洲第一伊人天堂网| 91传媒一区二区三区| 91免费黄片可看视频| 好男人视频在线免费观看网站| 国产夫妻视频在线观看免费| 天天干天天操天天玩天天射| 午夜精品亚洲精品五月色| 欧美地区一二三专区| 激情人妻校园春色亚洲欧美| 亚洲欧美久久久久久久久| 人妻少妇一区二区三区蜜桃| 亚洲中文字幕乱码区| 免费费一级特黄真人片| 影音先锋女人av噜噜色| 18禁污污污app下载| 国产福利小视频二区| 国产aⅴ一线在线观看| 国产精品系列在线观看一区二区| 一级黄片大鸡巴插入美女| 在线免费观看视频一二区| 精品视频国产在线观看| 亚洲码av无色中文| 中文字幕无码一区二区免费| 亚洲伊人色一综合网| 孕妇奶水仑乱A级毛片免费看| 97人妻无码AV碰碰视频| 中文字幕乱码av资源| 精品国产在线手机在线| 大鸡巴插入美女黑黑的阴毛| 福利一二三在线视频观看| 亚洲特黄aaaa片| 亚洲一级特黄特黄黄色录像片| 欧美黄片精彩在线免费观看| 日本韩国免费福利精品| 春色激情网欧美成人| 一区二区三区四区中文| 亚洲国产精品久久久久久6| 男女之间激情网午夜在线| 久久久久国产成人精品亚洲午夜| 性色av一区二区三区久久久| 亚洲 自拍 色综合图| 午夜影院在线观看视频羞羞羞| 久久久噜噜噜久久熟女av| 精品美女久久久久久| 日本xx片在线观看| 天堂av在线播放免费| 中文亚洲欧美日韩无线码| 国产黄色片在线收看| 一级黄片久久久久久久久| 久久久久久9999久久久久| 熟妇一区二区三区高清版| 精品区一区二区三区四区人妻| 99热99这里精品6国产| 国产日韩精品一二三区久久久| 国产欧美精品一区二区高清 | 欧美亚洲牲夜夜综合久久| 99热久久这里只有精品8| 日本韩国在线观看一区二区| 91中文字幕最新合集| 成人免费做爰高潮视频| weyvv5国产成人精品的视频| www日韩毛片av| 亚洲国产美女一区二区三区软件| 国产福利小视频二区| 青青草在观免费国产精品| 欧美乱妇无乱码一区二区| 老有所依在线观看完整版| 深田咏美亚洲一区二区| 香蕉av影视在线观看| 精品一区二区三区在线观看| 日本熟女50视频免费| 黑人巨大精品欧美视频| 中文字幕欧美日韩射射一| 麻豆性色视频在线观看| 国产成人精品亚洲男人的天堂| 视频一区二区三区高清在线| 一本久久精品一区二区| 国产极品精品免费视频| 天天日天天舔天天射进去| 一个色综合男人天堂| 色综合天天综合网国产成人| 午夜久久久久久久精品熟女| 免费无码人妻日韩精品一区二区| 人妻少妇av在线观看| 亚洲av日韩av网站| 久精品人妻一区二区三区| 国产视频精品资源网站| 婷婷久久久综合中文字幕| 欧美一区二区三区四区性视频| 91精品啪在线免费| 黄色片一级美女黄色片| 国产白袜脚足J棉袜在线观看| 亚洲乱码中文字幕在线| 插逼视频双插洞国产操逼插洞| 国产午夜无码福利在线看| 免费在线看的黄网站| 91‖亚洲‖国产熟女| 视频二区在线视频观看| 无码中文字幕波多野不卡| huangse网站在线观看| 含骚鸡巴玩逼逼视频| 蜜桃精品久久久一区二区| 久碰精品少妇中文字幕av| 成人免费公开视频无毒| 亚洲精品国品乱码久久久久| 日本中文字幕一二区视频| 人妻少妇性色欲欧美日韩| 免费黄高清无码国产| 欧美美女人体视频一区| 亚洲一区制服丝袜美腿| 日本av在线一区二区三区| 亚洲一区二区人妻av| 亚洲熟色妇av日韩熟色妇在线| 护士小嫩嫩又紧又爽20p| 亚洲 中文 自拍 另类 欧美| 精品美女在线观看视频在线观看| 天天日天天爽天天干| 国产又色又刺激在线视频 | 天天操天天射天天操天天天| 欧美日韩熟女一区二区三区| 男人操女人的逼免费视频| 成人动漫大肉棒插进去视频| 国产 在线 免费 精品| 一区二区免费高清黄色视频| 视频一区二区在线免费播放 | 国产视频在线视频播放| 少妇一区二区三区久久久| 国产激情av网站在线观看| 国产欧美日韩在线观看不卡| 中文字幕日韩无敌亚洲精品| 人妻另类专区欧美制服| 男生用鸡操女生视频动漫 | 中文字日产幕乱六区蜜桃| 丝袜国产专区在线观看| 老司机深夜免费福利视频在线观看| 国产免费高清视频视频| 免费看美女脱光衣服的视频| 亚洲va国产va欧美va在线| 亚洲国产成人最新资源| 年轻的人妻被夫上司侵犯| 啪啪啪18禁一区二区三区| 国产欧美日韩在线观看不卡| 老司机福利精品视频在线| 免费观看成年人视频在线观看| 亚欧在线视频你懂的| 中文字幕午夜免费福利视频| 91av精品视频在线| 亚洲av黄色在线网站| 粗大的内捧猛烈进出爽大牛汉子| 亚洲精品午夜久久久久| 色天天天天射天天舔| 好男人视频在线免费观看网站| 国产av福利网址大全| 少妇深喉口爆吞精韩国| 久久久久久九九99精品| 97年大学生大白天操逼| 亚洲av无硬久久精品蜜桃| 亚洲视频在线视频看视频在线| 99国内精品永久免费视频| 自拍偷拍,中文字幕| 大陆胖女人与丈夫操b国语高清 | 日日夜夜精品一二三| av网址在线播放大全| 成人av亚洲一区二区| 欧美xxx成人在线| 欧美aa一级一区三区四区| 黄色av网站免费在线| 久久精品国产23696| 日本一区二区三区免费小视频| 熟女俱乐部一二三区| 在线视频这里只有精品自拍| 中文字幕一区二区三区人妻大片| 男人操女人的逼免费视频| 中文字幕 人妻精品| 欧美特色aaa大片| 青青青青青青草国产| 青青青青草手机在线视频免费看| 日韩美av高清在线| 天天摸天天干天天操科普| 国产极品美女久久久久久| 日本性感美女视频网站| 亚洲熟妇无码一区二区三区| 又粗又硬又猛又爽又黄的| 在线观看911精品国产| 婷婷色中文亚洲网68| 夜夜操,天天操,狠狠操| 国产又粗又硬又猛的毛片视频 | 国产精品自拍在线视频| yy96视频在线观看| 欧美日韩国产一区二区三区三州| 中文字幕 亚洲av| 黄片三级三级三级在线观看| 成人av在线资源网站| 国产美女精品福利在线| 绝顶痉挛大潮喷高潮无码 | 久久久久久久久久久久久97| 中文字幕人妻三级在线观看| 丰满少妇人妻xxxxx| 亚洲国际青青操综合网站| 夜色撩人久久7777| av无限看熟女人妻另类av| 免费福利av在线一区二区三区| 国产大学生援交正在播放| 成人亚洲精品国产精品| 99精品亚洲av无码国产另类| 99久久超碰人妻国产| 少妇人妻久久久久视频黄片| 日本在线不卡免费视频| 日韩影片一区二区三区不卡免费| 婷婷五月亚洲综合在线| 青青操免费日综合视频观看| 美女操逼免费短视频下载链接 | 色哟哟在线网站入口| 91九色国产porny蝌蚪| 99一区二区在线观看| 国产熟妇一区二区三区av| av日韩在线免费播放| 欧美日本在线观看一区二区 | 女同性ⅹxx女同h偷拍| 在线不卡日韩视频播放| 国产精品一二三不卡带免费视频| 精品国产在线手机在线| 亚洲蜜臀av一区二区三区九色 | 99婷婷在线观看视频| 天堂女人av一区二区| 亚洲免费在线视频网站| 中国熟女@视频91| 2o22av在线视频| 亚洲男人在线天堂网| 99精品视频在线观看婷婷| 久久久久久久精品老熟妇| 免费在线福利小视频| 四川五十路熟女av| 成年女人免费播放视频| 99热国产精品666| 中文字幕av熟女人妻| 91色老99久久九九爱精品| 日韩美女搞黄视频免费| 欧美麻豆av在线播放| 青青热久免费精品视频在线观看| 欧美精品一区二区三区xxxx| 天天插天天狠天天操| av中文字幕在线导航| 人妻少妇性色欲欧美日韩| 国产亚洲欧美另类在线观看| 久久热久久视频在线观看| 91福利视频免费在线观看| 五月天中文字幕内射| 99人妻视频免费在线| 中国黄片视频一区91| 日韩欧美一级黄片亚洲| 插逼视频双插洞国产操逼插洞| 国产精品女邻居小骚货| 欧美韩国日本国产亚洲| 中文字幕在线免费第一页| 中文字幕乱码人妻电影| 亚洲成人黄色一区二区三区| 抽查舔水白紧大视频| 中国把吊插入阴蒂的视频| 大香蕉福利在线观看| 自拍 日韩 欧美激情| av高潮迭起在线观看| 日韩中文字幕在线播放第二页| 中文字幕在线永久免费播放| 在线观看av亚洲情色| 大胸性感美女羞爽操逼毛片| 男人操女人逼逼视频网站| 亚洲成人黄色一区二区三区| 久久精品亚洲成在人线a| 夜色撩人久久7777| 日韩欧美在线观看不卡一区二区 | 亚洲精品乱码久久久本| 少妇ww搡性bbb91| 亚洲最大黄 嗯色 操 啊| 国产精品中文av在线播放| 国产一区二区神马久久| 欧美日韩高清午夜蜜桃大香蕉 | 亚洲视频在线视频看视频在线| 午夜毛片不卡在线看| 真实国产乱子伦一区二区| 一区二区免费高清黄色视频| 中国把吊插入阴蒂的视频| 亚洲精品av在线观看| 亚洲1069综合男同| 国产在线自在拍91国语自产精品| 丝袜美腿视频诱惑亚洲无| 亚洲免费在线视频网站| 欧美精产国品一二三产品区别大吗| 大鸡八强奸视频在线观看| 日韩二区视频一线天婷婷五| 亚洲欧洲一区二区在线观看| weyvv5国产成人精品的视频| 日本女大学生的黄色小视频| 精品suv一区二区69| 色婷婷精品大在线观看| 精品亚洲国产中文自在线| 姐姐的朋友2在线观看中文字幕| sspd152中文字幕在线| 日噜噜噜夜夜噜噜噜天天噜噜噜| 亚洲国产欧美一区二区三区久久| 国产chinesehd精品麻豆| 一区二区视频视频视频| 亚洲成人熟妇一区二区三区| 日韩激情文学在线视频| 久久精品国产23696| 免费观看理论片完整版| 日韩a级精品一区二区| 大香蕉玖玖一区2区| 精品av国产一区二区三区四区| 夜女神免费福利视频| 男女之间激情网午夜在线| 午夜免费体验区在线观看| 国产a级毛久久久久精品| 欧美国品一二三产区区别| 传媒在线播放国产精品一区| 男人天堂最新地址av| 日韩欧美亚洲熟女人妻| 91中文字幕最新合集| a v欧美一区=区三区| 国产精品精品精品999| 3D动漫精品啪啪一区二区下载| 亚洲av可乐操首页| 久草视频在线一区二区三区资源站 | 成人sm视频在线观看| 免费黄色成人午夜在线网站| 福利视频一区二区三区筱慧 | 一二三区在线观看视频| 天天日天天玩天天摸| www,久久久,com| 四川乱子伦视频国产vip| 日韩精品中文字幕播放| 亚洲欧美人精品高清| 亚洲欧美综合另类13p| 成人sm视频在线观看| 99久久久无码国产精品性出奶水 | 亚洲伊人久久精品影院一美女洗澡| 少妇一区二区三区久久久| 中文人妻AV久久人妻水| 99热久久极品热亚洲| 国产精品久久久久网| 都市家庭人妻激情自拍视频| 美女福利视频导航网站| 在线免费观看黄页视频| 亚洲天堂第一页中文字幕| 国产又粗又猛又爽又黄的视频美国| 91快播视频在线观看| 欧美黑人性暴力猛交喷水| 绝顶痉挛大潮喷高潮无码| 欧美va亚洲va天堂va| 国产亚洲精品视频合集| 一区二区三区欧美日韩高清播放| 久久这里只有精品热视频| 伊人综合免费在线视频| 无码国产精品一区二区高潮久久4| 午夜精品一区二区三区更新| 国产日韩精品免费在线| 精品区一区二区三区四区人妻| 欧美日韩一级黄片免费观看| 中国视频一区二区三区| 2021最新热播中文字幕| 最新91精品视频在线| 国产精品欧美日韩区二区| 国产精品成久久久久三级蜜臀av| 好吊视频—区二区三区| 红桃av成人在线观看| 青青青艹视频在线观看| 最新国产精品拍在线观看| 黄页网视频在线免费观看| 国产久久久精品毛片| 日本黄色特一级视频| 午夜场射精嗯嗯啊啊视频| 亚洲图库另类图片区| 青娱乐蜜桃臀av色| 66久久久久久久久久久| 天天日天天敢天天干| 亚洲av一妻不如妾| 久久国产精品精品美女| 亚洲av天堂在线播放| 亚洲国产免费av一区二区三区 | 999久久久久999| 91香蕉成人app下载| 日本熟妇色熟妇在线观看| 天天操天天弄天天射| 中文字幕高清在线免费播放| 国产真实灌醉下药美女av福利| 人人爽亚洲av人人爽av| 天天日天天日天天射天天干| 国产真实乱子伦a视频| 极品粉嫩小泬白浆20p主播| 人妻丝袜诱惑我操她视频| 中文字幕一区二区人妻电影冢本| 国产成人精品福利短视频| 风流唐伯虎电视剧在线观看| 亚洲天堂有码中文字幕视频| 大香蕉伊人中文字幕| 东京热男人的av天堂| 人妻熟女中文字幕aⅴ在线| 国产精品黄片免费在线观看| 国产熟妇乱妇熟色T区| 男生舔女生逼逼的视频| 国产亚洲精品欧洲在线观看| 少妇与子乱在线观看| 久久www免费人成一看片| 91亚洲手机在线视频播放| 亚洲在线一区二区欧美| av天堂中文免费在线| 免费费一级特黄真人片| 精品高潮呻吟久久av| 亚洲精品高清自拍av| 日韩少妇人妻精品无码专区| 成年人的在线免费视频| 东游记中文字幕版哪里可以看到| 男人的天堂av日韩亚洲| 丝袜亚洲另类欧美变态| 888欧美视频在线| 精品高跟鞋丝袜一区二区| 国产美女精品福利在线| 欧美xxx成人在线| 国产老熟女伦老熟妇ⅹ| 色婷婷六月亚洲综合香蕉| 国产aⅴ一线在线观看| 国产chinesehd精品麻豆| 白白操白白色在线免费视频| 国产精品国色综合久久| 精品人妻每日一部精品| 全国亚洲男人的天堂| 亚洲欧美综合在线探花| 韩国黄色一级二级三级| 综合精品久久久久97| 视频 一区二区在线观看| 馒头大胆亚洲一区二区| 国产+亚洲+欧美+另类| 亚洲欧美综合另类13p| 啊啊好大好爽啊啊操我啊啊视频| 青青操免费日综合视频观看| 黄色中文字幕在线播放| 午夜精品九一唐人麻豆嫩草成人| 91国产资源在线视频| 在线观看的a站 最新| 日韩人妻丝袜中文字幕| 天天日天天干天天搡| 超pen在线观看视频公开97| 激情啪啪啪啪一区二区三区| 一二三中文乱码亚洲乱码one| 在线视频这里只有精品自拍| 欧美专区日韩专区国产专区| 大香蕉大香蕉在线有码 av| 大白屁股精品视频国产| 成人精品在线观看视频| caoporn蜜桃视频| 人妻久久无码中文成人| 亚洲一级美女啪啪啪| 视频二区在线视频观看| 免费看高清av的网站| 国产精品人妻一区二区三区网站| av网址在线播放大全| 亚洲高清国产自产av| 亚洲精品 日韩电影| 中文字幕高清在线免费播放| 国产一区二区神马久久| 美女在线观看日本亚洲一区| 三级等保密码要求条款| 97欧洲一区二区精品免费| 视频啪啪啪免费观看| 亚洲av日韩精品久久久| 人妻3p真实偷拍一二区| 亚洲少妇人妻无码精品| 欧美viboss性丰满| 精彩视频99免费在线| 天天爽夜夜爽人人爽QC| 大骚逼91抽插出水视频| 日噜噜噜夜夜噜噜噜天天噜噜噜| 国产成人精品午夜福利训2021| 中文字幕日韩91人妻在线| 中文字幕午夜免费福利视频| 亚洲熟色妇av日韩熟色妇在线| 91天堂精品一区二区| 91久久综合男人天堂| 北条麻妃高跟丝袜啪啪| 青青热久免费精品视频在线观看 | 亚洲成人激情视频免费观看了| eeuss鲁片一区二区三区| 91极品新人『兔兔』精品新作| 男生舔女生逼逼视频| 91桃色成人网络在线观看| 欲乱人妻少妇在线视频裸| 自拍 日韩 欧美激情| 亚洲精品午夜aaa久久| 亚洲精品无码色午夜福利理论片| 久久热久久视频在线观看| 综合一区二区三区蜜臀| 美女被肏内射视频网站| 91极品大一女神正在播放| av破解版在线观看| 乱亲女秽乱长久久久| 亚洲高清视频在线不卡| 中文亚洲欧美日韩无线码| av老司机精品在线观看| 青青青青青免费视频| 93视频一区二区三区| 亚洲天堂第一页中文字幕| 在线观看一区二区三级| 精品黑人巨大在线一区| 在线视频国产欧美日韩| 成年人的在线免费视频| 国产精品黄页网站视频| 中文字幕免费在线免费| 在线观看欧美黄片一区二区三区| 国产aⅴ一线在线观看| 欧美精品伦理三区四区| 九九热99视频在线观看97| 涩涩的视频在线观看视频| 久久热久久视频在线观看| 欧美成人综合色在线噜噜| 亚洲av在线观看尤物| 香港一级特黄大片在线播放| 含骚鸡巴玩逼逼视频| 天天躁日日躁狠狠躁av麻豆| 香蕉av影视在线观看| 在线观看日韩激情视频| 午夜青青草原网在线观看| 99的爱精品免费视频| 国产精品久久久久久久久福交| 天天日天天干天天干天天日| 大陆精品一区二区三区久久| 99精品国产免费久久| 天天干天天搞天天摸| 日本高清撒尿pissing| 欧美精品久久久久久影院| 亚洲一区二区三区精品视频在线| 国产熟妇一区二区三区av| 日韩美女精品视频在线观看网站| 91天堂精品一区二区| 亚洲2021av天堂| 青青青爽视频在线播放| 国产午夜亚洲精品麻豆| 日韩成人性色生活片| 亚洲中文字幕综合小综合| 中文字幕免费福利视频6| 国产精品一区二区三区蜜臀av | 国产成人精品av网站| 伊人综合免费在线视频| 人妻熟女中文字幕aⅴ在线| 亚洲精品国产综合久久久久久久久| 成人亚洲精品国产精品| 性欧美激情久久久久久久| 久久精品久久精品亚洲人| 欧美国产亚洲中英文字幕| 女生自摸在线观看一区二区三区| 91精品资源免费观看| 亚洲欧美色一区二区| 久精品人妻一区二区三区| 在线观看av亚洲情色| 免费在线看的黄网站| 直接能看的国产av| 2020韩国午夜女主播在线| 日本人妻精品久久久久久| 宅男噜噜噜666免费观看| 午夜精品亚洲精品五月色| 少妇高潮无套内谢麻豆| 熟女人妻三十路四十路人妻斩| 天天通天天透天天插| 88成人免费av网站| 国产精品人久久久久久| 内射久久久久综合网| 日本午夜久久女同精女女| 亚洲人妻国产精品综合| 这里只有精品双飞在线播放| 一区二区三区日本伦理| 亚洲欧美人精品高清| 水蜜桃一区二区三区在线观看视频 | 老有所依在线观看完整版 | 3337p日本欧洲大胆色噜噜| 天天做天天干天天操天天射| 免费黄页网站4188| 欧美viboss性丰满| h国产小视频福利在线观看| 日韩av有码中文字幕| av完全免费在线观看av| 日日夜夜大香蕉伊人| 国产综合高清在线观看| 在线不卡成人黄色精品| 中文字幕日本人妻中出| 绯色av蜜臀vs少妇| www骚国产精品视频| 伊人成人在线综合网| 一区二区三区 自拍偷拍| 75国产综合在线视频| 综合国产成人在线观看| 免费观看理论片完整版| 亚洲成av人无码不卡影片一| 久久久精品欧洲亚洲av| 午夜精品亚洲精品五月色| 91香蕉成人app下载| 玩弄人妻熟妇性色av少妇| 国产精品人久久久久久| 日本精品一区二区三区在线视频。| 国产亚洲四十路五十路| 女同性ⅹxx女同hd| 天天射夜夜操狠狠干| 美女福利写真在线观看视频| 2020国产在线不卡视频| 在线观看av观看av| 中出中文字幕在线观看| 精品91自产拍在线观看一区| free性日本少妇| 啪啪啪啪啪啪啪啪av| 久久免费看少妇高潮完整版| 成人免费做爰高潮视频| 亚洲av自拍偷拍综合| 亚洲码av无色中文| 黄色片一级美女黄色片| 亚洲一级av大片免费观看| 中文字幕奴隷色的舞台50| 骚逼被大屌狂草视频免费看| 精品一区二区三区午夜| 亚洲欧美激情中文字幕| 日韩欧美一级aa大片| 瑟瑟视频在线观看免费视频| 免费岛国喷水视频在线观看| 熟女国产一区亚洲中文字幕| 少妇人妻100系列| 国产麻豆剧传媒精品国产av蜜桃 | 日韩午夜福利精品试看| 国产欧美日韩第三页| 中字幕人妻熟女人妻a62v网| 在线网站你懂得老司机| 亚洲一区二区久久久人妻| 国产精品国色综合久久| 午夜久久久久久久精品熟女| 成人国产小视频在线观看| 农村胖女人操逼视频| 亚洲成人激情视频免费观看了| 亚洲av香蕉一区区二区三区犇| 中文字幕 人妻精品| 国产中文字幕四区在线观看| 一区二区麻豆传媒黄片| 青青草原网站在线观看| 日韩加勒比东京热二区| 天天日天天玩天天摸| 适合午夜一个人看的视频| 午夜精品一区二区三区更新| 亚洲国产精品久久久久久6| 国产精品视频一区在线播放| 一级黄片大鸡巴插入美女| 综合一区二区三区蜜臀| 97成人免费在线观看网站| 在线观看国产免费麻豆| 自拍偷拍vs一区二区三区| 亚洲成a人片777777| 欧美viboss性丰满| 国产中文精品在线观看| 日本特级片中文字幕| 黄网十四区丁香社区激情五月天| 国产精品自拍偷拍a| 蜜臀av久久久久久久| 青青草国内在线视频精选| 国产真实灌醉下药美女av福利| 精品91自产拍在线观看一区| 亚洲另类在线免费观看| 新婚人妻聚会被中出| 91久久精品色伊人6882| 五月天久久激情视频| 日韩影片一区二区三区不卡免费| 亚洲在线免费h观看网站| 天天日天天干天天搡| 亚洲激情,偷拍视频| 日本性感美女写真视频| 久久久久久久精品老熟妇| 亚洲天天干 夜夜操| 国产精品福利小视频a| 午夜精品九一唐人麻豆嫩草成人 | 视频一区二区综合精品| 日本少妇的秘密免费视频| 国产大学生援交正在播放| 99国内精品永久免费视频| 少妇系列一区二区三区视频| 欧美老鸡巴日小嫩逼| 99热99这里精品6国产| 97精品人妻一区二区三区精品| 欧美视频中文一区二区三区| 亚洲熟妇无码一区二区三区| 都市激情校园春色狠狠| 欧美韩国日本国产亚洲| 午夜在线观看岛国av,com| 天天干天天日天天干天天操| 天天做天天爽夜夜做少妇| 中文字日产幕乱六区蜜桃| 青青色国产视频在线| 热久久只有这里有精品| 欧美日本在线观看一区二区 | 93精品视频在线观看| 黄色成年网站午夜在线观看 | 成年美女黄网站18禁久久| 亚洲在线免费h观看网站| 2021最新热播中文字幕| 国产精品3p和黑人大战| 男人的天堂一区二区在线观看| 国产chinesehd精品麻豆| 999热精品视频在线| 国产精品系列在线观看一区二区| 黄色录像鸡巴插进去| 天天通天天透天天插| 免费福利av在线一区二区三区| 93精品视频在线观看| 天天干天天操天天扣| 亚洲中文字幕综合小综合| 久久这里只有精品热视频| 久久热这里这里只有精品| 夜夜骑夜夜操夜夜奸| 亚洲无码一区在线影院| 成人免费做爰高潮视频| 亚洲av第国产精品| 中国黄片视频一区91| 91麻豆精品秘密入口在线观看| 一区二区三区四区视频在线播放| 青青青青青青青在线播放视频| 久久久精品欧洲亚洲av| 唐人色亚洲av嫩草| 亚洲国产40页第21页| 偷拍自拍视频图片免费| 一区二区三区 自拍偷拍| 欧美激情电影免费在线| 国产欧美日韩在线观看不卡| 天天操天天操天天碰| 国产a级毛久久久久精品| 精品少妇一二三视频在线| 亚洲成a人片777777| 红桃av成人在线观看| 人妻少妇亚洲精品中文字幕| 80电影天堂网官网| 黄片大全在线观看观看| 在线视频国产欧美日韩| 55夜色66夜色国产精品站| 成人伊人精品色xxxx视频| 一区二区三区日本伦理| 国内精品在线播放第一页| 激情图片日韩欧美人妻| 伊人情人综合成人久久网小说| 老师让我插进去69AV| 白嫩白嫩美女极品国产在线观看| 日韩国产乱码中文字幕| 国产高清女主播在线| 久草视频在线看免费| 免费男阳茎伸入女阳道视频| 日韩欧美中文国产在线| 国产av欧美精品高潮网站| 国产精品手机在线看片| 日韩av免费观看一区| 免费看高清av的网站| 在线观看国产免费麻豆| 欧美xxx成人在线| 国产又粗又黄又硬又爽| av在线观看网址av| 蜜桃专区一区二区在线观看| 天天干天天操天天插天天日| 91九色porny国产蝌蚪视频| 久久久久久9999久久久久| 熟女91pooyn熟女| 大香蕉大香蕉大香蕉大香蕉大香蕉 | 巨乳人妻日下部加奈被邻居中出| 国产亚州色婷婷久久99精品| tube69日本少妇| 午夜的视频在线观看| 九色porny九色9l自拍视频| 免费黄高清无码国产| 欧美成一区二区三区四区| 最新97国产在线视频| 亚洲中文字字幕乱码| 欧美精品欧美极品欧美视频| 1024久久国产精品| 日本一道二三区视频久久| 亚洲av成人网在线观看| 色哟哟国产精品入口| 免费看国产又粗又猛又爽又黄视频| 美女av色播在线播放| 国产精品熟女久久久久浪潮| 亚洲精品一区二区三区老狼| 日韩av大胆在线观看| 国产chinesehd精品麻豆| 亚洲中文字幕综合小综合| 免费在线福利小视频| 欧美日韩情色在线观看| 丝袜肉丝一区二区三区四区在线看| 亚洲图片偷拍自拍区| 热思思国产99re| 九九视频在线精品播放| 大胸性感美女羞爽操逼毛片| 在线观看黄色成年人网站| av在线免费中文字幕| 色在线观看视频免费的| 亚洲中文字幕综合小综合| 国产一区二区欧美三区| 综合激情网激情五月五月婷婷| 人妻少妇亚洲精品中文字幕| 一区二区视频在线观看免费观看 | 亚洲护士一区二区三区| 天天日天天做天天日天天做| 白嫩白嫩美女极品国产在线观看| 久久麻豆亚洲精品av| 人妻丝袜精品中文字幕| 午夜av一区二区三区| 欧美性感尤物人妻在线免费看| 蜜桃视频在线欧美一区| 亚洲精品色在线观看视频| 成人精品视频99第一页| 中文字幕一区二区亚洲一区| 11久久久久久久久久久| 国产综合精品久久久久蜜臀| AV天堂一区二区免费试看| 欧美偷拍自拍色图片| 可以在线观看的av中文字幕 | 98精产国品一二三产区区别| 夜女神免费福利视频| 青青青视频手机在线观看| 日本少妇的秘密免费视频| 国产品国产三级国产普通话三级| 孕妇奶水仑乱A级毛片免费看| 久草免费人妻视频在线| 日韩欧美一级黄片亚洲| 欧美视频不卡一区四区| 经典av尤物一区二区| 搡老妇人老女人老熟女| sw137 中文字幕 在线| 亚洲免费在线视频网站| 精品国产乱码一区二区三区乱| 国产精品久久久久久久久福交| 日韩人妻xxxxx| 一级黄色片夫妻性生活| 美女视频福利免费看| 国产实拍勾搭女技师av在线| 91天堂精品一区二区| 男人和女人激情视频| 丰满少妇翘臀后进式| 91精品国产91青青碰| 成人亚洲精品国产精品| 免费十精品十国产网站| 午夜频道成人在线91| 国产黄色高清资源在线免费观看| 97黄网站在线观看| 亚洲特黄aaaa片| 午夜91一区二区三区| 美女福利写真在线观看视频| 老熟妇凹凸淫老妇女av在线观看| 久久久精品999精品日本 | 丝袜长腿第一页在线| 成人av久久精品一区二区| 国产av国片精品一区二区| 日本熟女精品一区二区三区| 少妇人妻二三区视频| 亚洲精品 日韩电影| 80电影天堂网官网| 2021最新热播中文字幕| 亚洲精品av在线观看| 动色av一区二区三区| 亚洲人妻国产精品综合| 国产97视频在线精品| 亚洲综合另类精品小说| 和邻居少妇愉情中文字幕| 亚洲高清国产拍青青草原| 硬鸡巴动态操女人逼视频| 国产成人精品午夜福利训2021| 久久尻中国美女视频| 熟妇一区二区三区高清版| 91九色porny国产蝌蚪视频| 欧美黑人与人妻精品| 大陆胖女人与丈夫操b国语高清| 少妇系列一区二区三区视频| 制丝袜业一区二区三区| 大黑人性xxxxbbbb| 夜夜嗨av一区二区三区中文字幕| 91精品国产综合久久久蜜| 国产男女视频在线播放| 久久久久久cao我的性感人妻| 欲满人妻中文字幕在线| 天天日天天爽天天爽| av中文字幕在线导航| 99久久久无码国产精品性出奶水| 大黑人性xxxxbbbb| 成人av免费不卡在线观看| 成人国产激情自拍三区| 亚洲欧美国产麻豆综合| 日韩av中文在线免费观看| 国语对白xxxx乱大交| 久久久精品精品视频视频| ka0ri在线视频| 欧美精品国产综合久久| 亚洲成人午夜电影在线观看| 一区二区三区激情在线| 亚洲特黄aaaa片| 日美女屁股黄邑视频| av中文字幕网址在线| 亚洲女人的天堂av| 日韩剧情片电影在线收看| 韩国男女黄色在线观看| 欧美成人一二三在线网| 超碰中文字幕免费观看| 黄色中文字幕在线播放| 很黄很污很色的午夜网站在线观看| 欧洲欧美日韩国产在线| 99一区二区在线观看| 中文字幕一区二区人妻电影冢本| 亚洲图库另类图片区| 亚洲欧美色一区二区| 男人插女人视频网站| 色婷婷久久久久swag精品| 日本女人一级免费片| 国产福利小视频大全| 免费男阳茎伸入女阳道视频| 视频一区二区在线免费播放| 久久99久久99精品影院| 欧美爆乳肉感大码在线观看| 国产视频网站一区二区三区 | 精品美女在线观看视频在线观看| 很黄很污很色的午夜网站在线观看| 在线不卡成人黄色精品| 亚洲国产精品黑丝美女| 一级黄色片夫妻性生活| 国产又粗又黄又硬又爽| 999久久久久999| 精品高跟鞋丝袜一区二区| 天天日天天日天天射天天干| 欧美成人一二三在线网| 国产欧美日韩第三页| 绝色少妇高潮3在线观看| 亚洲精品av在线观看| 成人色综合中文字幕| 亚洲女人的天堂av| 区一区二区三国产中文字幕| 黑人巨大的吊bdsm| 日本av高清免费网站| 中文字幕成人日韩欧美| 日本在线不卡免费视频| 欧美xxx成人在线| 99re6热在线精品| 国产黑丝高跟鞋视频在线播放| 国产精品人妻一区二区三区网站 | 日韩亚国产欧美三级涩爱| 日韩加勒比东京热二区| 天堂资源网av中文字幕| 色婷婷六月亚洲综合香蕉| 最后99天全集在线观看| 人妻丝袜精品中文字幕| 自拍偷区二区三区麻豆| 欧美女同性恋免费a| 亚洲欧美一区二区三区爱爱动图| av乱码一区二区三区| 日本真人性生活视频免费看| 18禁网站一区二区三区四区| 自拍偷拍一区二区三区图片| 亚洲免费视频欧洲免费视频| 偷拍自拍 中文字幕| av男人天堂狠狠干| 丰满的继坶3中文在线观看| 最新黄色av网站在线观看| 特黄老太婆aa毛毛片| 国际av大片在线免费观看| 国产亚洲欧美另类在线观看| 天天日夜夜操天天摸| 国产熟妇一区二区三区av| 亚洲天堂有码中文字幕视频| 岛国青草视频在线观看| 国产在线自在拍91国语自产精品| 亚洲免费国产在线日韩| 国产精品探花熟女在线观看| 蜜桃专区一区二区在线观看| 日韩精品一区二区三区在线播放| 国产自拍黄片在线观看| 日韩av有码一区二区三区4 | 欧美亚洲国产成人免费在线| 五十路在线观看完整版| lutube在线成人免费看| 中文字幕第三十八页久久| 日韩欧美国产一区ab| 班长撕开乳罩揉我胸好爽| 大鸡吧插逼逼视频免费看| 色花堂在线av中文字幕九九 | 国产黄色高清资源在线免费观看| 97年大学生大白天操逼| 中文字幕中文字幕 亚洲国产| 在线成人日韩av电影| 亚洲精品乱码久久久本| 午夜频道成人在线91| 在线亚洲天堂色播av电影| 欧美精产国品一二三区| 成年人该看的视频黄免费| 一区二区三区另类在线| 国产精彩对白一区二区三区 | 国产亚洲精品欧洲在线观看| 91成人精品亚洲国产| 亚洲少妇高潮免费观看| 超碰97人人做人人爱| 国产污污污污网站在线| 国产中文精品在线观看| 91精品国产高清自在线看香蕉网| 夜色撩人久久7777| 欧美精品一区二区三区xxxx| 欧美美女人体视频一区| 青青操免费日综合视频观看| 啊啊啊想要被插进去视频| 女警官打开双腿沦为性奴| 亚洲人妻国产精品综合| 人妻熟女中文字幕aⅴ在线| 久久免费看少妇高潮完整版| 亚洲黄色av网站免费播放| 欧美日韩v中文在线| av在线shipin| 91九色porny国产蝌蚪视频| 中文字幕—97超碰网| 欧美日韩中文字幕欧美| 欧美精品黑人性xxxx| 日韩精品激情在线观看| 97超碰免费在线视频| 国产亚洲精品品视频在线| 亚洲av一妻不如妾| 高清成人av一区三区| 亚洲av天堂在线播放| 日本黄色特一级视频| 免费费一级特黄真人片| wwwxxx一级黄色片| 国产大学生援交正在播放| 麻豆性色视频在线观看| 老熟妇凹凸淫老妇女av在线观看| 91国偷自产一区二区三区精品| 韩国黄色一级二级三级| 成人性爱在线看四区| 亚洲一区自拍高清免费视频| 久久香蕉国产免费天天| 欧美视频不卡一区四区| 成人av久久精品一区二区| 天天射夜夜操综合网| www日韩a级s片av| 啪啪啪啪啪啪啪啪啪啪黄色| 国产精品3p和黑人大战| 最新激情中文字幕视频| 美味人妻2在线播放| 久久精品亚洲国产av香蕉| 黑人进入丰满少妇视频| 91亚洲国产成人精品性色| 男人的天堂一区二区在线观看| 欧美地区一二三专区| 不卡一区一区三区在线| 亚洲日本一区二区久久久精品| 福利片区一区二体验区| 狠狠鲁狠狠操天天晚上干干| 91试看福利一分钟| 视频久久久久久久人妻| 在线观看免费视频色97| 中文字幕熟女人妻久久久|