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

Redis 分頁 + 多條件模糊查詢太頭疼?這套方案幫你輕松搞定!

數據庫 Redis
根據不同的業務場景選擇合適的數據結構,比如有序集合適合需要排序和范圍查詢的場景,集合適合需要去重和交集、并集操作的場景,字符串適合存儲單個對象的詳細信息。

我猜不少搞 Java 開發的兄弟,在項目里碰到 Redis 分頁和多條件模糊查詢的時候,都跟我一樣,心里直犯嘀咕:"這玩意兒咋整啊?咋就這么難搞呢?" 別慌,今兒個咱就來好好嘮嘮,怎么把這倆難題輕松搞定,讓你在同事面前狠狠露一手!

一、先搞明白為啥 Redis 分頁和多條件模糊查詢讓人頭大

咱先說說 Redis 分頁。用過 Redis 的都知道,它和咱們熟悉的 MySQL 這些關系型數據庫不一樣。MySQL 里有個 LIMIT 關鍵字,分頁查詢那叫一個方便,直接就能指定查第幾頁、每頁多少條。可 Redis 呢,它主要是基于內存的鍵值對存儲,數據結構雖然豐富,但原生就沒有像數據庫那樣專門的分頁功能。

你要是存的數據是放在列表(List)里,想分頁的話,可能得用 LRANGE 命令。比如說列表鍵是 users,想查第 1 頁,每頁 10 條,就用 LRANGE users 0 9。乍一看好像還行,可要是列表里的數據是動態變化的,比如經常有新增、刪除操作,列表里元素的位置就會變,這時候用 LRANGE 分頁,結果可能就不準確了。而且要是列表特別大,每次用 LRANGE 都得遍歷一堆元素,性能也會受影響。

再看看多條件模糊查詢。Redis 本身的查詢能力比較有限,不像數據庫能支持復雜的 SQL 語句,什么 LIKE 啊、多個條件組合啊都能輕松搞定。Redis 里的鍵匹配,一般就靠 KEYS 命令或者 SCAN 命令。KEYS 命令能根據通配符匹配鍵,比如 KEYS user:* 能查出所有以 user: 開頭的鍵,可這玩意兒有個大問題,它是全量掃描,在生產環境用的話,要是鍵的數量特別多,會把 Redis 搞得很慢,甚至卡住。

SCAN 命令雖然能增量掃描,避免全量掃描的問題,但它返回的只是鍵,要是你想根據鍵對應的值里的多個條件進行模糊查詢,比如用戶表里要根據用戶名包含 "張三",年齡在 20 到 30 之間來查詢,SCAN 就沒辦法直接做到了,你得把鍵對應的所有值都取出來,在應用層進行過濾,這就會增加應用服務器的負擔,而且效率也不高。

舉個簡單的例子,假設咱們有個電商項目,要在 Redis 里存儲商品信息,每個商品的鍵是 product:1、product:2 這樣的形式,值是 JSON 格式,包含商品名稱、價格、類別等信息。現在要查詢名稱里包含 "手機",價格在 2000 到 4000 之間的商品,并且要分頁顯示。這時候問題就來了,怎么根據商品名稱和價格這兩個條件來查詢呢?直接用 Redis 原生的功能很難實現,這就需要咱們想辦法來解決。

二、搞定 Redis 分頁的實用方案

(一)基于有序集合(Sorted Set)的分頁方案

有序集合是 Redis 里一個很強大的數據結構,它每個元素都有一個分數(score),可以根據分數對元素進行排序。咱們可以利用這個特性來實現分頁。

比如說,咱們還是以用戶數據為例,每個用戶有一個唯一的 ID,咱們可以把用戶 ID 作為有序集合的成員,把用戶的創建時間作為分數。這樣有序集合里的元素就是按照創建時間排序的。

要實現分頁查詢,假設每頁顯示 n 條數據,第 m 頁的起始索引就是 (m - 1) * n,結束索引就是 m * n - 1。然后用 ZRANGE 命令來獲取指定范圍內的成員。比如有序集合鍵是 users_sorted,查第 1 頁,每頁 10 條,就是 ZRANGE users_sorted 0 9。

但是這里有個問題,如果用戶數據是不斷更新的,比如有用戶刪除了,有序集合里的元素數量會減少,這時候原來的索引就會發生變化。不過對于大部分分頁場景來說,只要不是頻繁刪除中間的元素,這種方案還是比較可行的。

(二)記錄上一頁最后一個元素的分頁方案

這種方案適合數據是按照一定順序排列的情況,比如時間順序。咱們在查詢上一頁數據的時候,記錄下最后一個元素的相關信息,比如時間戳或者 ID,然后在下一頁查詢時,根據這個信息來獲取下一頁的數據。

比如,咱們還是以按創建時間排序的用戶數據為例,假設上一頁最后一個用戶的創建時間是 last_score,那么下一頁查詢的時候,就可以用 ZRANGEBYSCORE 命令,從 last_score 之后開始獲取數據。命令大概是這樣的:ZRANGEBYSCORE users_sorted (last_score 0 9,這里的 (last_score 表示不包含 last_score 這個分數的元素,然后獲取 10 條數據。

這種方案的好處是可以避免因為中間元素刪除導致索引變化的問題,而且每次查詢的時間復雜度比較低,適合大數據量的分頁場景。

三、解決 Redis 多條件模糊查詢的巧妙辦法

(一)預處理數據,建立多個索引

既然 Redis 原生不支持多條件模糊查詢,那咱們可以在數據寫入 Redis 的時候,對數據進行預處理,根據不同的查詢條件建立索引。

還是以電商商品為例,商品有名稱、價格、類別等屬性。咱們可以建立三個有序集合:

  • 以商品名稱為索引的有序集合 product_name_index,成員是商品 ID,分數可以是商品名稱的某種哈希值或者直接是名稱的拼音首字母(方便模糊查詢)。
  • 以價格為索引的有序集合 product_price_index,成員是商品 ID,分數就是商品的價格。
  • 以類別為索引的有序集合 product_category_index,成員是商品 ID,分數可以是類別 ID。

當要進行多條件模糊查詢時,比如查詢名稱包含 "手機",價格在 2000 到 4000 之間的商品,咱們可以先根據名稱條件,從 product_name_index 中獲取所有名稱包含 "手機" 的商品 ID 集合,再從 product_price_index 中獲取價格在 2000 到 4000 之間的商品 ID 集合,然后對這兩個集合取交集,得到同時滿足這兩個條件的商品 ID,最后根據這些商品 ID 去獲取具體的商品信息。

對于模糊查詢名稱包含 "手機",咱們可以在建立索引的時候,把商品名稱的所有可能的子串都作為索引的一部分,或者使用一些模糊匹配的算法,比如編輯距離算法,不過這可能會增加索引的存儲量。更簡單的辦法是,在應用層對輸入的模糊查詢關鍵詞進行處理,生成對應的通配符模式,然后在 Redis 中使用 SCAN 命令結合鍵的模式來獲取相關的索引鍵,再獲取對應的商品 ID 集合。

(二)使用 Redis 的位圖(Bitmap)

位圖可以用來表示某個元素是否存在,或者某個條件是否滿足。比如對于每個商品,我們可以用不同的位圖來表示不同的條件,比如價格是否在某個區間,類別是否屬于某一類等。

不過位圖在多條件查詢中的應用相對比較復雜,需要結合其他數據結構一起使用,這里咱們先重點介紹前面的索引方案。

四、綜合方案:讓分頁和多條件模糊查詢無縫結合

現在咱們把分頁和多條件模糊查詢結合起來,看看怎么在實際場景中應用。

假設咱們還是那個電商項目,要實現根據商品名稱模糊查詢、價格范圍查詢,并且進行分頁顯示的功能。具體步驟如下:

(一)數據寫入階段

  1. 當新增一個商品時,首先生成一個唯一的商品 ID,比如 product:1001。
  2. 將商品的詳細信息以 JSON 格式存儲在 Redis 的字符串鍵中,鍵為 product:1001,值為 {"name":"華為手機", "price":3000, "category":"電子產品", "other_info":"..."}。
  3. 建立名稱索引:將商品名稱進行處理,比如提取所有可能包含的關鍵詞,這里假設我們簡單地將整個名稱作為索引的一部分,在有序集合 product_name_index 中,以商品 ID 為成員,以名稱的拼音或者某種可以用于模糊查詢的標識為分數(這里為了方便,暫時以名稱本身作為分數,實際項目中可能需要更復雜的處理)。比如 ZADD product_name_index "華為手機" "product:1001"。
  4. 建立價格索引:在有序集合 product_price_index 中,以商品 ID 為成員,價格為分數,執行 ZADD product_price_index 3000 "product:1001"。
  5. 建立類別索引:在有序集合 product_category_index 中,以商品 ID 為成員,類別 ID 或者類別名稱為分數,假設類別是 "電子產品",執行 ZADD product_category_index "電子產品" "product:1001"。

(二)查詢階段

當用戶輸入查詢條件,比如名稱包含 "手機",價格在 2000 到 4000 之間,要查詢第 2 頁,每頁 10 條數據時:

  1. 處理名稱模糊查詢:生成名稱的通配符模式,比如 "手機",然后使用 SCAN 命令在 product_name_index 中查找所有分數包含 "手機" 的成員(這里需要注意,SCAN 命令本身不能直接根據分數的內容進行模糊查詢,所以前面的索引建立方式可能需要調整,更合理的做法是將商品名稱的關鍵詞提取出來,作為有序集合的成員,分數作為商品 ID,或者使用其他數據結構來存儲關鍵詞和商品 ID 的映射關系。這里為了方便演示,假設我們有一個鍵為 name:手機 的集合,里面存儲了所有名稱包含 "手機" 的商品 ID)。
  2. 獲取價格在 2000 到 4000 之間的商品 ID 集合,使用 ZRANGEBYSCORE product_price_index 2000 4000。
  3. 對這兩個集合取交集,得到同時滿足名稱和價格條件的商品 ID 集合,可以使用 Redis 的 ZINTERSTORE 命令,將兩個有序集合的交集存儲到一個臨時有序集合中。
  4. 對臨時有序集合進行分頁查詢,假設我們要按價格排序(也可以按其他條件排序),使用 ZRANGE 命令,根據頁碼和每頁數量計算出起始和結束索引,比如第 2 頁,每頁 10 條,起始索引是 10,結束索引是 19,執行 ZRANGE temp_index 10 19,得到該頁的商品 ID。
  5. 根據商品 ID 從對應的字符串鍵中獲取商品的詳細信息,返回給用戶。

(三)代碼示例(Java 版本)

這里使用 Jedis 客戶端來演示部分代碼:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;
import java.util.*;
public class RedisQueryDemo {
    private Jedis jedis;
    public RedisQueryDemo() {
        jedis = new Jedis("localhost", 6379);
    }
    // 寫入商品數據并建立索引
    public void addProduct(String productId, String name, double price, String category) {
        // 存儲商品詳情
        String productKey = "product:" + productId;
        String productInfo = String.format("{\"name\":\"%s\", \"price\":%f, \"category\":\"%s\"}", name, price, category);
        jedis.set(productKey, productInfo);
        // 建立名稱索引(這里簡化處理,實際可能需要更復雜的關鍵詞提取)
        jedis.zadd("product_name_index", 0, name + ":" + productId); // 這里分數設為 0,僅作為存儲成員的方式,實際可根據需求設置
        // 建立價格索引
        jedis.zadd("product_price_index", price, productId);
        // 建立類別索引
        jedis.zadd("product_category_index", 0, category + ":" + productId); // 同理,分數設為 0
    }
    // 多條件模糊查詢并分頁
    public List<String> searchProducts(String nameKeyword, double minPrice, double maxPrice, int page, int pageSize) {
        List<String> resultProductIds = new ArrayList<>();
        // 獲取名稱包含關鍵詞的商品 ID 集合(簡化處理,實際需根據關鍵詞生成通配符并掃描)
        Set<String> nameMatchedProducts = new HashSet<>();
        // 這里模擬通過關鍵詞獲取相關成員,實際可能需要使用 SCAN 命令遍歷 product_name_index 并檢查成員是否包含關鍵詞
        Set<Tuple> nameIndexTuples = jedis.zrangeWithScores("product_name_index", 0, -1);
        for (Tuple tuple : nameIndexTuples) {
            String member = tuple.getElement();
            if (member.contains(nameKeyword)) {
                String productId = member.split(":")[1];
                nameMatchedProducts.add(productId);
            }
        }
        // 獲取價格范圍內的商品 ID 集合
        Set<String> priceMatchedProducts = jedis.zrangeByScore("product_price_index", minPrice, maxPrice);
        // 取交集
        priceMatchedProducts.retainAll(nameMatchedProducts);
        // 將交集轉換為有序集合(假設按價格排序)
        String tempIndexKey = "temp_index:" + UUID.randomUUID().toString();
        int score = 0;
        for (String productId : priceMatchedProducts) {
            jedis.zadd(tempIndexKey, jedis.zscore("product_price_index", productId), productId);
        }
        // 分頁查詢
        long start = (page - 1) * pageSize;
        long end = start + pageSize - 1;
        resultProductIds = jedis.zrange(tempIndexKey, start, end);
        // 刪除臨時索引
        jedis.del(tempIndexKey);
        return resultProductIds;
    }
    public static void main(String[] args) {
        RedisQueryDemo demo = new RedisQueryDemo();
        // 模擬寫入數據
        demo.addProduct("1001", "華為手機", 3000, "電子產品");
        demo.addProduct("1002", "小米手機", 2500, "電子產品");
        demo.addProduct("1003", "蘋果手機", 4000, "電子產品");
        demo.addProduct("1004", "華為平板", 2000, "電子產品");
        demo.addProduct("1005", "海爾冰箱", 3500, "家電");
        // 模擬查詢:名稱包含"手機",價格在 2000 - 4000 之間,第 1 頁,每頁 2 條
        List<String> productIds = demo.searchProducts("手機", 2000, 4000, 1, 2);
        for (String productId : productIds) {
            System.out.println("查詢到的商品 ID:" + productId);
            // 這里可以根據 productId 獲取具體的商品信息
        }
    }
}

五、注意事項和優化技巧

(一)索引維護

建立的索引會增加 Redis 的內存占用,所以要根據實際的查詢需求,合理選擇需要建立索引的條件,不要建立過多無用的索引。同時,在數據更新(比如刪除、修改)時,要及時更新對應的索引,保證索引的一致性。

(二)性能優化

  1. 對于大規模數據,使用 SCAN 命令代替 KEYS 命令進行鍵的掃描,避免全量掃描影響 Redis 性能。
  2. 在進行集合交集、并集等操作時,注意集合的大小,如果集合過大,操作可能會比較耗時,可以考慮在應用層進行部分過濾,減少 Redis 層的操作壓力。
  3. 可以對常用的查詢結果進行緩存,比如熱門的查詢條件和分頁結果,減少重復查詢的開銷。

(三)數據結構選擇

根據不同的業務場景選擇合適的數據結構,比如有序集合適合需要排序和范圍查詢的場景,集合適合需要去重和交集、并集操作的場景,字符串適合存儲單個對象的詳細信息。

六、總結

通過上面的方案,咱們基本上解決了 Redis 分頁和多條件模糊查詢的難題。利用有序集合、集合等數據結構建立索引,對數據進行預處理,結合分頁算法,能夠在 Redis 中實現高效的分頁和多條件查詢。當然,具體的實現還需要根據項目的實際需求進行調整和優化,比如索引的建立方式、數據結構的選擇、查詢條件的處理等。

責任編輯:武曉燕 來源: 石杉的架構筆記
相關推薦

2023-11-17 15:34:03

Redis數據庫

2025-02-06 10:00:52

RedisSpring高性能

2025-07-02 07:35:29

JSON字段SpringBoot

2010-05-06 14:11:55

Oracle多條件查詢

2022-06-20 15:19:51

前端監控方案

2010-04-30 09:34:24

Oracle多條件查詢

2021-04-17 07:40:01

N卡驅動應用NVCleanstal

2010-04-28 16:45:27

Oracle Inst

2009-09-15 09:33:46

linq多條件查詢

2018-06-11 17:27:56

APP流量華為

2023-07-12 08:01:28

FOADMROADMOXC

2009-09-15 11:34:47

Linq多條件查詢

2009-06-29 09:03:31

Hibernate多條

2010-11-09 15:18:37

SQL Server多

2021-03-25 15:32:21

深度學習編程人工智能

2010-09-25 16:42:45

sql語句

2024-12-16 07:10:00

DockerDrone開發

2021-12-23 17:04:26

戴爾

2022-09-14 08:11:06

分頁模糊查詢

2025-04-11 09:30:42

點贊
收藏

51CTO技術棧公眾號

9l视频白拍9色9l视频| 日本不卡高清视频| 91丨九色丨国产丨porny| 一区二区三区国产在线观看| 国产精品日韩欧美一区二区| 久久久久久国产免费a片| 国产美女一区视频| 99热在线成人| 色视频成人在线观看免| 国产精品久久久久久久久婷婷 | 三级视频在线| 欧美午夜a级限制福利片| 欧美性三三影院| 蜜桃视频日韩| 日韩 欧美 精品| 日本在线视频一区二区三区| 亚洲天堂免费在线观看视频| 国产精品日韩在线播放| 扒开jk护士狂揉免费| 国产美女高潮在线| 成人免费毛片app| 欧美人与性动交a欧美精品| 亚洲精品第三页| 秋霞成人影院| 紧缚奴在线一区二区三区| 在线观看亚洲区| 五月天丁香社区| а√在线中文在线新版| 国产精品色在线观看| 国产精品久久久久久亚洲调教| 99精品久久久久| 国产视频一区二区在线播放| 自拍偷拍欧美激情| 91久久爱成人| 日本一区二区欧美| 国产精品久久久久久久| 亚洲天堂免费在线| 无需播放器的av| 欧美性videos| 国产亚洲欧美日韩在线一区| 国产精品久久久久久久久久免费| 高潮毛片无遮挡| 国产精品调教| 日韩欧美亚洲一二三区| 日韩一区二区电影在线观看| 一区二区小视频| 亚洲网色网站| 亚洲国产天堂久久综合| 午夜dv内射一区二区| 欧美成人二区| 国产欧美综合在线| 成人有码视频在线播放| 欧美极品aaaaabbbbb| 日本一区福利在线| 欧美日韩高清一区二区三区| 日韩一级片一区二区| 午夜视频免费在线| 久久久综合网| 欧美www在线| 国产成人av无码精品| 日韩另类视频| 亚洲欧美日韩国产手机在线| 精品蜜桃传媒| 一起草av在线| 亚洲国产导航| xxxxx成人.com| 黄色污在线观看| 久久亚洲精品中文字幕| 黄色片网站免费| 日本一区视频在线播放| 在线免费黄色av| 牛牛精品成人免费视频| 亚洲第一二三四五区| 五月天婷婷激情视频| 日韩经典av| 国产欧美精品区一区二区三区| 久久99欧美| 国产又黄又大又爽| 欧美专区18| 欧美韩日一区二区| 美国精品一区二区| 色婷婷狠狠五月综合天色拍| 欧美一区二区三区啪啪| 国产原创中文在线观看 | 一区二区三区电影| 男人天堂综合网| 美女精品自拍一二三四| 中文在线不卡视频| 50一60岁老妇女毛片| 婷婷综合电影| 尤物九九久久国产精品的分类| 日韩黄色中文字幕| 亚洲自拍电影| 日韩久久久精品| 色综合色综合色综合色综合| 日韩三级一区| 色婷婷久久99综合精品jk白丝| 麻豆传媒网站在线观看| 成人亚洲性情网站www在线观看| 成人自拍视频在线观看| 美女被啪啪一区二区| 91美女视频在线| 久久精品无码一区二区三区| 精品高清视频| 午夜视频在线| 黑人玩欧美人三根一起进| 亚洲色图88| 97视频在线观看成人| 五月婷婷一区二区| 毛片一区二区| 成人动漫视频在线观看完整版| 国产免费视频一区二区三区| 久久精品久久精品| 国产精品二区三区四区| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 一本一道久久a久久精品| 精品久久久99| 91成人在线| 欧美亚洲精品一区| 中国特级黄色片| 亚洲va欧美va人人爽成人影院| 黑人操亚洲人| 五月激情综合网| 国产成人亚洲综合无码| 永久免费毛片在线播放| 亚洲成人一区在线| 日韩精品在线观看av| 羞羞视频在线观看不卡| 色哟哟日韩精品| 三级黄色片播放| 亚洲一区二区电影| 亚洲高清久久网| 亚洲一区电影在线观看| 亚洲精品国产首次亮相| 欧美老女人性生活| 中文字幕视频二区| 久久免费电影网| 一区二区成人国产精品| 91久久国产综合久久91猫猫| 在线观看欧美日本| 欧美激情第3页| 美日韩中文字幕| 中文字幕久久亚洲| 亚洲天堂一区在线| 鲁大师影院一区二区三区| 97se在线视频| 黄色av免费在线| 亚洲电影中文字幕在线观看| 久久精品视频在线观看免费| 91精品啪在线观看国产手机| y97精品国产97久久久久久| 波多野结衣在线电影| 国产一区三区三区| 国产综合18久久久久久| 丁香婷婷在线| 一区二区三区欧美| 成人av一级片| 日本在线一区二区| 中文字幕欧美亚洲| 亚洲手机在线观看| 国产成人免费在线| 欧美重口乱码一区二区| 黄色免费网站在线| 在线综合视频播放| 国产十八熟妇av成人一区| 国产精品vip| 人人做人人澡人人爽欧美| 一级黄色片免费| 中文字幕一区二区三区四区不卡| 大荫蒂性生交片| 3d欧美精品动漫xxxx无尽| 日韩写真欧美这视频| 亚洲色成人网站www永久四虎 | 国产无码精品在线播放| 日欧美一区二区| 亚洲xxx自由成熟| 羞羞网站在线免费观看| 亚洲国产成人久久| 精品国产xxx| 国产精品久久久久久久久晋中 | 国产精品视频麻豆| 福利视频999| 激情自拍一区| 成人啪啪免费看| 亚洲区欧洲区| 日韩av在线播放资源| 少妇人妻丰满做爰xxx| 国产精品一级| 国产精品久久国产三级国电话系列| 国模私拍视频在线播放| 亚洲女同性videos| 国产午夜久久久| 久久久精品国产免费观看同学| 免费看国产黄色片| 欧美激情综合色综合啪啪| 国产日韩欧美亚洲一区| 成人影院在线免费观看| 九九热精品视频| 黄色视屏网站在线免费观看| 疯狂做受xxxx高潮欧美日本| 老女人性生活视频| 999成人精品视频线3| 国产第一区电影| 你懂的在线观看| 疯狂做受xxxx高潮欧美日本| 潮喷失禁大喷水aⅴ无码| 国产成人免费在线观看不卡| 久久综合久久色| 欧美人妖在线| 99精品在线直播| 影音成人av| 国内精品小视频在线观看| 东京干手机福利视频| 一区二区三区日韩欧美| 波多野结衣电影免费观看| 男女精品网站| 99国产精品白浆在线观看免费| 精品香蕉视频| 国产精品视频xxx| 国产高潮在线| 欧美寡妇偷汉性猛交| 在线观看黄色av| 亚洲日本成人女熟在线观看| 伊人久久中文字幕| 欧美日韩精品中文字幕| 欧美又粗又大又长| 日韩理论片在线| 久久精品国产亚洲AV成人婷婷| 久久精品一区二区三区四区| 亚洲av成人精品一区二区三区| 国产制服丝袜一区| 中文字幕资源在线观看| 免费一级欧美片在线观看| 少妇高清精品毛片在线视频| 亚洲一区日韩在线| 少妇免费毛片久久久久久久久| 久久福利在线| 国产精品69av| 日韩天堂在线| 国产精品高潮呻吟视频| 成人小电影网站| 91高潮在线观看| av在线中文| 日韩高清av在线| 天天色综合av| 色综合欧美在线| 91无套直看片红桃在线观看| 91麻豆swag| 久久久久国产精品无码免费看| 成人av在线资源| 性欧美大战久久久久久久| 中文字幕一区二区三区在线视频 | 性欧美xxxx交| 丁香花电影在线观看完整版| 久久亚洲私人国产精品va| 国产色综合视频| 欧美午夜视频网站| 狠狠人妻久久久久久综合| 色94色欧美sute亚洲线路一ni| 日韩精品国产一区二区| 亚洲电影在线免费观看| 国产成人自拍网站| 99精品桃花视频在线观看| 每日在线更新av| 久久人人88| 日韩国产欧美精品| 精品久久久久久久| 日韩色妇久久av| 国产探花在线精品一区二区| 日日骚一区二区网站| 大胆日韩av| 国产a一区二区| 美女精品视频在线| 国模极品一区二区三区| 污污的视频在线观看| 午夜精品99久久免费| 亚洲风情在线资源| 国产欧美一区二区白浆黑人| 超碰免费公开在线| 欧美另类交人妖| 中文字幕在线看片| 国产福利视频一区二区| 国产第一精品| 亚洲va欧美va国产综合久久| www.日韩| 国产精品久久久久久网站| 色综合一区二区日本韩国亚洲| 91精品天堂| 五月国产精品| 精品国产乱码久久久久久108| 精品一区二区三区中文字幕老牛 | 北条麻妃一二三区| 精品日韩美女的视频高清| 日韩av免费网址| 欧美日本在线视频| 精品国产伦一区二区三区| 亚洲国产精品电影| 免费黄网站在线| 欧美激情在线观看视频| 午夜免费福利在线观看| 久久久av一区| 国产在线播放av| 久久亚洲精品小早川怜子66| 校园春色亚洲| 成人性生交大片免费观看嘿嘿视频| 日韩亚洲精品在线观看| 日韩精品不卡| 欧美+日本+国产+在线a∨观看| 麻豆av一区二区三区久久| 在线电影一区二区| 各处沟厕大尺度偷拍女厕嘘嘘| 日本不卡的三区四区五区| 波多野结衣视频播放| 国产精品区一区二区三区| 九九九在线视频| 欧美日韩国产不卡| 亚洲欧美日韩免费| 久久精品99国产精品酒店日本| 国产高清不卡| 99久久国产免费免费| 国产精品密蕾丝视频下载| 国产激情在线看| 日韩国产欧美视频| 国产全是老熟女太爽了| 亚洲一区二区三区中文字幕在线| 国产在线观看第一页| 欧美性videosxxxxx| 欧美亚洲精品在线观看| 久久精品国产亚洲一区二区| 99久久er| 欧美精品一区二区三区在线看午夜| 欧美a级片一区| 日韩成人av免费| 国产拍揄自揄精品视频麻豆| 国产极品美女在线| 欧美老肥妇做.爰bbww| 欧美激情一区二区三区免费观看 | 亚洲精品国产精华液| 在线免费一级片| 亚洲女人天堂成人av在线| 婷婷av在线| 91传媒视频在线观看| 99精品视频在线观看播放| 日本成人中文字幕在线| 国产日韩欧美激情| 在线观看日本网站| 亚洲香蕉av在线一区二区三区| 国模精品视频| 国产伦精品一区二区三区视频孕妇 | 91视频欧美| 99se婷婷在线视频观看| 国一区二区在线观看| 国产探花一区二区三区| 成人欧美一区二区三区1314| 国产毛片在线视频| 日韩最新av在线| 国产精品无码久久久久| 在线日韩av永久免费观看| 欧美bbbbb| 国产一级久久久久毛片精品| 欧美午夜寂寞影院| av在线电影观看| 成人网在线免费看| 亚洲视频电影在线| 黄页网站在线看| 高跟丝袜欧美一区| 日本一卡二卡四卡精品| 国产精品久久久999| 成人在线电影在线观看视频| 天天天干夜夜夜操| 亚洲欧洲制服丝袜| 亚洲产国偷v产偷v自拍涩爱| 欧美精品久久一区二区| 成人福利免费在线观看| 麻豆精品传媒视频| 免费久久精品视频| 极品色av影院| 欧美一二三四区在线| 高清精品在线| 日本午夜精品电影| 精品亚洲免费视频| 私库av在线播放| 日韩av在线直播| 欧美性生活一级| 久久久久久av无码免费网站下载| bt欧美亚洲午夜电影天堂| 久久久精品成人| 欧美乱熟臀69xxxxxx| av中文在线资源库| 日韩欧美在线观看强乱免费| 国产xxx精品视频大全| 国产激情在线免费观看| 欧美高清视频在线观看mv| 亚洲国产精品成人va在线观看| 在线免费av播放| 麻豆一区二区麻豆免费观看| 欧美日韩国产激情| 亚洲欧洲日本精品| 久久资源综合| 欧美激情第一页xxx|