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

Redis 浮點數(shù)累計實現(xiàn)

數(shù)據(jù)庫 Redis
按照官方文檔的說法 INCRBYFLOAT 可以表示小數(shù)位 17 位。比如按照 jedis 的 api 來說,我們能夠使用的就是在 double 的精度范圍內(nèi),也就是 15-16位。這里我也看了 redis 的源碼,他在底層實現(xiàn)是通過 c 語言的 long double 類型來進(jìn)行計算的。

Redis 浮點數(shù)累計主要是有兩個命令

  • INCRBYFLOAT 是 SET 指令的浮點數(shù)累計
  • HINCRBYFLOAT 是 HASH 類型的浮點數(shù)累計

在內(nèi)部 HINCRBYFLOAT 和 INCRBYFLOAT 自增實現(xiàn)相同。所以我們分析 INCRBYFLOAT 即可。

基本使用

直接使用指令。

INCRBYFLOAT mykey 0.1
INCRBYFLOAT mykey 1.111
INCRBYFLOAT mykey 1.111111

使用 lua 腳本的方式,因為 redis 可以通過 lua 腳本來保證操作的原子性,所以當(dāng)我們同時操作多個 key 的時候一般使用 lua 腳本的方式。

eval "return redis.call('INCRBYFLOAT', KEYS[1], ARGV[1])" 1 mykey1 "1.11" 
eval "return redis.call('INCRBYFLOAT', KEYS[1], ARGV[1])" 1 mykey1 "1.11111" 
eval "return redis.call('INCRBYFLOAT', KEYS[1], ARGV[1])" 1 mykey1 "1.11111"

INCRBYFLOAT 可表示范圍

按照官方文檔的說法 INCRBYFLOAT 可以表示小數(shù)位 17 位。比如按照 jedis 的 api 來說,我們能夠使用的就是在 double 的精度范圍內(nèi),也就是 15-16位。這里我也看了 redis 的源碼,他在底層實現(xiàn)是通過 c 語言的 long double 類型來進(jìn)行計算的。

void incrbyfloatCommand(client *c) {
    long double incr, value;
    robj *o, *new;

    o = lookupKeyWrite(c->db,c->argv[1]);
    if (checkType(c,o,OBJ_STRING)) return;
    if (getLongDoubleFromObjectOrReply(c,o,&value,NULL) != C_OK ||
        getLongDoubleFromObjectOrReply(c,c->argv[2],&incr,NULL) != C_OK)
        return;

    value += incr;
    if (isnan(value) || isinf(value)) {
        addReplyError(c,"increment would produce NaN or Infinity");
        return;
    }
    new = createStringObjectFromLongDouble(value,1);
    if (o)
        dbReplaceValue(c->db,c->argv[1],new);
    else
        dbAdd(c->db,c->argv[1],new);
    signalModifiedKey(c,c->db,c->argv[1]);
    notifyKeyspaceEvent(NOTIFY_STRING,"incrbyfloat",c->argv[1],c->db->id);
    server.dirty++;
    addReplyBulk(c,new);

    /* Always replicate INCRBYFLOAT as a SET command with the final value
     * in order to make sure that differences in float precision or formatting
     * will not create differences in replicas or after an AOF restart. */
    rewriteClientCommandArgument(c,0,shared.set);
    rewriteClientCommandArgument(c,2,new);
    rewriteClientCommandArgument(c,3,shared.keepttl);
}

源碼地址:https://github.com/redis/redis/blob/unstable/src/t_string.c long double 是 c 語言的長雙精度浮點型,在 x86 的 64 位操作系統(tǒng)上占通常占用 16 字節(jié)(128 位),相較于 8 字節(jié)的 double 類型具有更大的范圍和更高的精度。(這部分來源于 chatgpt) 因為 redis 采用的 long double 類型來做浮點數(shù)計算, 所以 redis 就可以保證到小數(shù)點后 17 位的精度。 整數(shù)位也可以表示 17 位 redis 的浮點數(shù)計算通常情況下會丟失精度嗎? 通常情況下是不會的,但是不能保證一定不會。

浮點數(shù)范圍測試

測試代碼如下:

public class RedisIncrByFloatTest {

    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        BigDecimal decimalIncr = java.math.BigDecimal.ZERO;
        String key = "IncrFloat:Digit100";


        //測試精度
        test_accuracy(jedis, decimalIncr, key);

        //測試正浮點數(shù)最大值
        test_max_positive_float(jedis, decimalIncr, key);

        jedis.disconnect();
        jedis.close();
    }

    private static void test_max_positive_float(Jedis jedis, BigDecimal decimalIncr, String key) {
        jedis.del(key);
        String value = "99999999999999999.00000000000000003";
        List<String> evalKeys = Collections.singletonList(key);
        List<String> evalArgs = Collections.singletonList(value);
        String luaStr = "redis.call('INCRBYFLOAT', KEYS[1], ARGV[1]) return redis.call('GET', KEYS[1])";
        Object result = jedis.eval(luaStr, evalKeys, evalArgs);
        decimalIncr = decimalIncr.add(new BigDecimal(value));
        BigDecimal redisIncr = new BigDecimal(String.valueOf(result));

        value = "0.99999999999999996";
        evalKeys = Collections.singletonList(key);
        evalArgs = Collections.singletonList(value);
        luaStr = "redis.call('INCRBYFLOAT', KEYS[1], ARGV[1]) return redis.call('GET', KEYS[1])";
        result = jedis.eval(luaStr, evalKeys, evalArgs);
        decimalIncr = decimalIncr.add(new BigDecimal(value));
        redisIncr = new BigDecimal(String.valueOf(result));


        boolean eq = comparteNumber(redisIncr, decimalIncr);
        if (eq) {
            System.out.println("累計結(jié)果正確, 整數(shù)位: " + 17 + "位, 結(jié)果期望值: decimalIncr " + decimalIncr.toPlainString() + ", 目標(biāo)值(redis):" + redisIncr.toPlainString());
        } else {
            System.out.println("累計結(jié)果不正確, 整數(shù)位: " + 17 + "位, 期望值: decimalIncr " + decimalIncr.toPlainString() + ", 目標(biāo)值(redis):" + redisIncr.toPlainString());
        }
    }

    private static void test_accuracy(Jedis jedis, BigDecimal decimalIncr, String key) {
        jedis.del(key);
        for (int i = 16; i < 30; i++) {
            String value = createValue(i);
            final List<String> evalKeys = Collections.singletonList(key);
            final List<String> evalArgs = Collections.singletonList(value);
            String luaStr = "redis.call('INCRBYFLOAT', KEYS[1], ARGV[1]) return redis.call('GET', KEYS[1])";

            Object result = jedis.eval(luaStr, evalKeys, evalArgs);
            decimalIncr = decimalIncr.add(new BigDecimal(value));
            BigDecimal redisIncr = new BigDecimal(String.valueOf(result));
            boolean eq = comparteNumber(redisIncr, decimalIncr);
            if (eq) {
                System.out.println("累計結(jié)果正確, 整數(shù)位: " + i + "位, 結(jié)果期望值: decimalIncr " + decimalIncr.toPlainString() + ", 目標(biāo)值(redis):" + redisIncr.toPlainString());
            } else {
                System.out.println("累計結(jié)果不正確, 整數(shù)位: " + i + "位, 期望值: decimalIncr " + decimalIncr.toPlainString() + ", 目標(biāo)值(redis):" + redisIncr.toPlainString());
                break;
            }
        }
    }

    private static String createValue(int i) {
        String result = "9" + "0".repeat(Math.max(0, i - 1));
        return result + ".00000000000000003";
    }

    private static boolean comparteNumber(BigDecimal redisIncr, BigDecimal decimalIncr) {
        return decimalIncr.compareTo(redisIncr) == 0;
    }
}

輸出結(jié)果:

累計結(jié)果正確, 整數(shù)位: 16位, 結(jié)果期望值: decimalIncr 9000000000000000.00000000000000003, 目標(biāo)值(redis):9000000000000000.00000000000000003
累計結(jié)果正確, 整數(shù)位: 17位, 結(jié)果期望值: decimalIncr 99000000000000000.00000000000000006, 目標(biāo)值(redis):99000000000000000.00000000000000006
累計結(jié)果不正確, 整數(shù)位: 18位, 期望值: decimalIncr 999000000000000000.00000000000000009, 目標(biāo)值(redis):999000000000000000
累計結(jié)果正確, 整數(shù)位: 17位, 結(jié)果期望值: decimalIncr 99999999999999999.99999999999999999, 目標(biāo)值(redis):99999999999999999.99999999999999999

INCRBYFLOAT 導(dǎo)致精度丟失

INCRBYFLOAT 導(dǎo)致精度丟失有兩種情況:

  1. 累計的范圍值超過 INCRBYFLOAT 所能表示的最大精度范圍,在 double 范圍內(nèi)。

INCRBYFLOAT 底層計算是通過long double 來計算的在 C語言中 long double占用128 位,其范圍為: 最小值: ±5.4×10^-4951 最大值: ±1.1×10^4932 能表示的有效數(shù)字在34~35位之間。

  1. 我們使用類似 jedis 的 api 提供的是 double 類型的參數(shù),可能在調(diào)用之前,參數(shù)轉(zhuǎn)換的過程就發(fā)生了精度問題。比如
StringRedisTemplate template = new StringRedisTemplate();        
template.opsForValue().increment("v1", 1.3D);

在 RedisTemplate 的這個 increment 接受的參數(shù)類型就是一個 double 所以會發(fā)生精度問題

C 語言長雙精度類型

因為 redis 底層采用的是long double 計算,所以這個問題轉(zhuǎn)化為長雙精度(long double)為什么沒有精度問題? 這是因為 long double 具有更大的范圍和更高的精度。long double 的范圍和精度高于 double 類型:

  • 范圍更大:long double 可以表示更大和更小的數(shù)字
  • 精度更高:long double 可以表示的有效數(shù)字多于 double 類型這意味著,對于同樣的浮點計算,long double 具有更少的舍入誤差。

具體來說,幾點原因造成 long double 沒有精度問題:

  1. long double 使用更多的bit位來表示浮點數(shù)。
  2. long double 使用四舍五入(rounding to nearest)而不是銀行家舍入(bankers' rounding),導(dǎo)致更少的誤差累加。
  3. 許多編譯器及 CPU 針對 long double 具有優(yōu)化, 會生成精度更高的機(jī)器碼來執(zhí)行 long double 計算。
  4. long double 內(nèi)部采用更大的指數(shù)域, 能更準(zhǔn)確地表示相同范圍內(nèi)的數(shù)字。

綜上,long double 的更廣范圍和更高精度,讓它在相同的浮點計算中具有更少的舍入誤差。這也就解釋了為什么 long double 沒有明顯的精度問題,因為它天生就是為了提供更高精度而設(shè)計的。相比之下,double 使用的位數(shù)相對有限,即使采用折中舍入法,在一些場景下它的誤差也可能累加顯著。所以總的來說,long double 之所以沒有精度問題,主要還是源于其更大的范圍和更高的內(nèi)在精度

問題總結(jié)

  1. Redis 浮點數(shù)累計操作 INCRBYFLOAT 不適合精度要求比較高的金額計算。
  2. Redis 浮點數(shù)累計操作 INCRBYFLOAT 也不能平替 BigDecimal 計算,如果一定需要存儲可以考慮通過 lua 腳本實現(xiàn) CAS 進(jìn)行修改,最終存儲為 String 類型的一個結(jié)果。
  3. Redis 的浮點數(shù)雖然做了比較好的優(yōu)化,但是沒有從根本解決計算精度問題。

參考文檔

  • https://redis.io/commands/incrbyfloat/。
  • https://wiki.c2.com/?BankersRounding。
  • https://www.wikihow.com/Round-to-the-Nearest-Tenth。
  • https://learn.microsoft.com/zh-cn/cpp/c-language/type-long-double?view=msvc-170。
  • https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/reference/strtold-strtold-l-wcstold-wcstold-l?view=msvc-170。
責(zé)任編輯:姜華 來源: 運維開發(fā)故事
相關(guān)推薦

2020-09-15 12:57:46

C 語言浮點數(shù)內(nèi)存

2017-10-16 10:42:27

前端JavaScript浮點數(shù)

2024-05-31 08:38:35

Python浮點數(shù)屬性

2015-12-02 10:21:34

JavaScript浮點數(shù)精度調(diào)整

2018-08-24 10:16:23

內(nèi)存浮點數(shù)存儲

2020-10-12 06:38:08

存儲定點數(shù)

2011-05-25 14:10:38

浮點數(shù)

2021-10-19 14:04:28

C++類型數(shù)字

2010-07-22 17:39:44

2009-05-19 10:10:01

Oracle時間加減時間操作

2010-01-15 15:21:35

C++

2021-11-15 09:32:06

浮點面試Java

2022-06-15 15:44:21

無損數(shù)據(jù)壓縮鴻蒙

2025-04-01 07:50:00

Dinero.js前端開發(fā)

2024-07-11 15:50:36

2025-08-22 09:31:38

2024-08-23 08:43:08

2025-03-03 04:20:00

2025-01-17 09:20:00

2023-11-08 13:32:00

JavaScript浮點數(shù)計算
點贊
收藏

51CTO技術(shù)棧公眾號

欧美α欧美αv大片| 国产精品自拍av| 国产婷婷97碰碰久久人人蜜臀| 日韩国产一级片| va婷婷在线免费观看| 国产精品久久777777毛茸茸| 在线观看国产欧美| wwwww在线观看| 韩国成人漫画| 亚洲欧美激情小说另类| 模特精品在线| 成人动漫精品一区二区| 成人久久久久久久| 亚洲精品mv在线观看| 好吊日视频在线观看| 国产福利视频一区二区三区| 91高潮在线观看| 国产精品av久久久久久无| 精品一区二区三区中文字幕 | 伊人影院在线视频| 成人av资源站| 国产噜噜噜噜噜久久久久久久久| 99草在线视频| 日本一区二区三区视频在线| 国产精品视频九色porn| 成人久久18免费网站漫画| 神马久久久久久久| 国产性生活网站| 国产男女无套免费网站| 欧美一级黄视频| 欧美午夜电影在线观看| 中文字幕日本乱码精品影院| 亚洲精品国产无天堂网2021| 精品福利影视| www香蕉视频| 麻豆国产精品一区二区三区| 91国产美女在线观看| frxxee中国xxx麻豆hd| 国产在线观看91一区二区三区| 欧美r级电影在线观看| 一区二区久久精品| 成人午夜在线| 欧美在线你懂得| aa在线免费观看| 理论片午夜视频在线观看| 一区二区三区精品| 亚洲国产一二三精品无码 | 亚洲精品午夜国产va久久成人| 综合精品一区| 美女久久久久久久久久久| 少妇太紧太爽又黄又硬又爽小说| 亚洲女娇小黑人粗硬| 亚洲精品久久久久久久久久久久久 | 国产精品一区二区三区在线播放| 天天爽夜夜爽夜夜爽精品| 在线免费高清一区二区三区| 欧美黄色成人网| 久草视频免费在线| 伊人久久大香线蕉综合热线| 久久久亚洲国产天美传媒修理工| 久久久精品一区二区涩爱| 欧美日一区二区三区在线观看国产免| 按摩亚洲人久久| 免费中文字幕在线| 亚洲小说区图片区| 久久人人看视频| 亚洲日本视频在线观看| 久久精品免费| 国产精品永久免费观看| 99热这里只有精品66| 国产91在线|亚洲| 久久精品国产精品国产精品污| 香蕉久久一区二区三区| 久久久久国产精品厨房| 亚洲综合首页| 欧美人与动牲性行为| 亚洲成人tv网| 日本老熟妇毛茸茸| 日韩一级特黄| 日韩美女在线视频| 三级黄色片网站| 欧美一区2区| 欧美大码xxxx| 日本中文字幕第一页| 久久9热精品视频| 成人免费视频观看视频| 欧美欧美欧美| 综合分类小说区另类春色亚洲小说欧美| 五月天综合婷婷| 2018av在线| 欧美日免费三级在线| 丰满人妻一区二区三区大胸| 色狼人综合干| 久久婷婷国产麻豆91天堂| 九九热国产视频| 麻豆视频观看网址久久| 国产成人av一区二区三区| 毛片网站在线观看| 亚洲一区二区三区四区不卡| 成人在线激情网| 免费观看亚洲视频大全| 亚洲精品永久免费| 麻豆亚洲av成人无码久久精品| 亚洲一区二区动漫| 92国产精品视频| 你懂的在线观看| 一区二区三区蜜桃网| 日本爱爱免费视频| 女仆av观看一区| 久久激情视频免费观看| 日韩三级一区二区| 成人午夜大片免费观看| 在线观看欧美一区| 写真福利精品福利在线观看| 日韩精品自拍偷拍| 一级性生活免费视频| 久久亚洲精品伦理| 精品国产电影| 欧美bbbxxxxx| 欧美一区永久视频免费观看| 成熟人妻av无码专区| 999亚洲国产精| 91亚洲国产成人精品性色| 国产小视频免费在线网址| 日本妇女一区| 精品欧美aⅴ在线网站| 亚洲污视频在线观看| 九色丨蝌蚪丨成人| 蜜月aⅴ免费一区二区三区| 中文字幕日本视频| 久久久一区二区| 无码人妻丰满熟妇区96| 国产精品一线| 欧美国产欧美亚洲国产日韩mv天天看完整| 中文字幕777| 国产午夜亚洲精品午夜鲁丝片 | 激情久久婷婷| 精品毛片乱码1区2区3区 | 国产精品毛片一区视频播| 久久综合色一综合色88| 韩日视频在线观看| 视频一区中文字幕精品| 美女视频黄免费的亚洲男人天堂| 在线不卡免费视频| 国产精品视频看| 波多野结衣xxxx| 日韩电影免费网站| 国产男女猛烈无遮挡91| eeuss影院在线观看| 在线观看国产91| 久操视频在线观看免费| 日韩高清不卡一区二区| 西游记1978| 色噜噜成人av在线| 久久资源免费视频| 国产三级午夜理伦三级| 亚洲色图清纯唯美| 日本一二三四区视频| 亚洲色图插插| 99精品国产一区二区| 天堂8中文在线| 亚洲成人av资源网| 免费日韩一级片| www.99精品| www黄色av| 欧美亚洲国产一区| 亚洲曰本av电影| eeuss鲁一区二区三区| 精品一区二区三区三区| 中文字幕免费观看| 中文字幕一区二区三区乱码在线 | 国产欧美日韩网站| 综合色就爱涩涩涩综合婷婷| 国产成人鲁鲁免费视频a| 日韩精品毛片| 精品国产91乱码一区二区三区 | 亚洲7777| 日本一区二区三区电影免费观看| 98精品在线视频| 懂色av中文在线| 日韩一区二区精品| 久久99精品波多结衣一区| 中文字幕av资源一区| 国产老头和老头xxxx×| 母乳一区在线观看| 日本黄色播放器| 欧美色图婷婷| 成人福利在线视频| 亚洲男人av| 久久电影一区二区| 日本免费一区二区三区最新| 欧美精品九九99久久| 久青草免费视频| 欧美国产精品一区二区| 亚洲图片欧美另类| 免费不卡在线视频| 成年人午夜免费视频| 欧美岛国激情| 久久久久久国产精品mv| 国产不卡精品| 国产精品成久久久久三级| 欧美性爽视频| 日韩中文字幕精品视频| 无码国产色欲xxxx视频| 337p亚洲精品色噜噜| 中文字幕激情小说| 夜夜爽夜夜爽精品视频| 国产精品www爽爽爽| 成人美女视频在线看| 日本美女视频一区| 久久人人97超碰国产公开结果| 日本老太婆做爰视频| 精品欧美久久| 久久精品aaaaaa毛片| 日韩免费一级| 国产综合福利在线| 欧美极品影院| 98视频在线噜噜噜国产| 午夜伦理大片视频在线观看| 最新亚洲国产精品| 黄色av免费在线看| 亚洲精品国产电影| 国产91麻豆视频| 91精品国产综合久久香蕉的特点| 不卡av电影在线| 欧美视频国产精品| 日本少妇吞精囗交| 一二三四社区欧美黄| 中文字幕在线有码| 亚洲欧美偷拍卡通变态| 美国一级黄色录像| 中文字幕av资源一区| 少妇无套高潮一二三区| 久久久精品国产免费观看同学| 丰满岳乱妇一区二区| 国产精品一区在线| 天天久久综合网| 精彩视频一区二区| 一女二男3p波多野结衣| 免费观看在线综合| 欧美女同在线观看| 久久激情五月激情| 一起操在线视频| 九色综合国产一区二区三区| 天天干天天草天天| 狠狠色狠狠色综合系列| 色噜噜狠狠一区二区三区狼国成人| 亚洲欧美一区在线| 精品伦理一区二区三区| youjizz欧美| 99在线观看| 99re热精品视频| 国产精品伊人日日| 欧美18免费视频| 欧美日韩精品免费在线观看视频| 四虎5151久久欧美毛片| 久久久久久久久久久一区| 色婷婷狠狠五月综合天色拍 | 久久久精品在线视频| 国产精品丝袜xxxxxxx| 黄色片久久久久| 麻豆国产欧美日韩综合精品二区| 加勒比av中文字幕| 国产成人免费视频网站| 中国一级特黄录像播放| 97国产一区二区| 成人黄色a级片| 亚洲欧美一区二区三区国产精品| 真实国产乱子伦对白在线| 亚洲国产精品视频| 亚洲AV无码成人精品区东京热| 欧美这里有精品| 九一精品久久久| 国产在线一区二区综合免费视频| 人妻精油按摩bd高清中文字幕| 丰满亚洲少妇av| 30一40一50老女人毛片| 国产精品伦理一区二区| 黄色一级片在线| 欧美性猛交xxxxx水多| 人妻中文字幕一区二区三区| 91麻豆精品国产91久久久更新时间 | 东京热无码av男人的天堂| 亚洲欧美另类综合偷拍| 青青草成人av| 欧美福利一区二区| 午夜性色福利影院| 久久手机精品视频| 在线高清av| 91免费人成网站在线观看18| 美日韩黄色大片| 一区二区三区av| 99热精品在线观看| 婷婷激情5月天| 久久综合狠狠综合久久综合88 | 亚洲福利免费| 欧美特级aaa| 成人av片在线观看| 欧美美女性生活视频| 欧美日韩免费在线| 国产精品视频一区二区三区,| 精品国产乱码久久久久久老虎 | 亚洲一区二区三区四区五区黄| 欧美亚洲另类小说| 亚洲国产精品久久久久久| 日本蜜桃在线观看| 日本精品免费一区二区三区| 日本成人手机在线| 亚洲人成77777| 久久蜜桃精品| 一起草在线视频| 一区二区三区四区高清精品免费观看| 青青视频在线免费观看| 精品1区2区在线观看| 国内精品久久久久久野外| 国产97在线|日韩| 色天下一区二区三区| 超碰成人免费在线| 国产激情视频一区二区在线观看 | 国内精品99| 国产女同无遮挡互慰高潮91| 国产欧美日韩麻豆91| 欧美激情亚洲综合| 精品少妇一区二区三区在线播放 | 久久久久9999| 亚洲一本大道在线| 国产高潮流白浆喷水视频| 色老头一区二区三区| www.久久.com| 青青成人在线| 视频一区视频二区中文字幕| 香蕉视频黄色在线观看| 天天综合色天天| 天天操天天爱天天干| 午夜精品在线观看| 精品国产一区二区三区成人影院| 免费看日b视频| 国产伦精品一区二区三区免费迷 | 超碰在线公开| 国产一区二区在线观看免费播放 | 免费一级特黄录像| 国产三级精品三级| 一级特黄免费视频| 伊人久久精品视频| 成人黄色图片网站| 亚洲一区在线直播| 久久国产精品色| 亚洲人做受高潮| 7777精品伊人久久久大香线蕉的| 日本暖暖在线视频| 91精品国产综合久久久久久丝袜| 亚洲a一区二区三区| 国产黑丝在线视频| 亚洲国产精品麻豆| 头脑特工队2免费完整版在线观看| 97视频免费在线看| 国产伦一区二区三区| 国产精品拍拍拍| 亚洲欧美激情在线| 神马一区二区三区| 日本一区二区三区四区视频| av伊人久久| 99精品视频国产| 亚洲国产中文字幕在线视频综合| 四虎精品一区二区三区| 日本精品视频网站| 午夜久久免费观看| 不许穿内裤随时挨c调教h苏绵| 亚洲成人av福利| 你懂的视频在线免费| 国产日韩欧美中文| 激情欧美一区| 无码人妻aⅴ一区二区三区69岛| 欧美性做爰猛烈叫床潮| av大大超碰在线| 久久艳妇乳肉豪妇荡乳av| 美女视频第一区二区三区免费观看网站| 天天看天天摸天天操| 亚洲国产精品va在线观看黑人| 韩国精品主播一区二区在线观看 | 91精选在线| 久久艳妇乳肉豪妇荡乳av| 精品一二三四区| 欧美bbbbbbbbbbbb精品| 自拍亚洲一区欧美另类| 成人中文字幕视频| 国产嫩草在线观看| 亚洲一卡二卡三卡四卡| av网站在线播放| 国产成人免费电影| 蜜桃视频一区二区三区| 久久9999久久免费精品国产| 在线播放日韩欧美| 成人搞黄视频| 色www免费视频| 午夜精彩视频在线观看不卡| 日韩av中文| 日本一区二区精品视频| 国产69精品久久99不卡| 中文字幕网址在线|