精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

欧美日韩另类视频| 蜜臀精品一区二区三区在线观看| 欧美一区二区免费| 9色porny| 亚洲欧洲视频在线观看| 老汉av免费一区二区三区| 欧美成人激情图片网| avtt香蕉久久| 欧美aaa级| 亚洲国产成人91porn| 日本中文不卡| 国产人妻精品一区二区三区| 亚洲一区二区成人| 久久视频在线播放| 人人妻人人澡人人爽人人精品 | 日本高清视频免费看| 天堂在线亚洲视频| 久久免费视频网| 九九热视频在线免费观看| 日韩极品少妇| 欧美一区二区三区色| 成人观看免费完整观看| 国内小视频在线看| 国产精品乱码久久久久久| 国产精品久久久久久免费观看| 中文字幕 视频一区| 亚洲激情一区| 欧美噜噜久久久xxx| 99久久99久久精品免费| 一区二区美女| 日韩精品高清视频| youjizz.com日本| 日韩精品视频在线看| 欧美日韩小视频| 老熟妇仑乱视频一区二区| 国产美女精品写真福利视频| 亚洲精品视频免费看| 国产精品h视频| 不卡在线视频| 久久综合九色综合97婷婷| 国产一区二区无遮挡| 风流老熟女一区二区三区| 国产在线国偷精品产拍免费yy| 国产精品男人爽免费视频1| 精产国品一区二区| 久久人人精品| 日本亚洲一区二区三区| 凸凹人妻人人澡人人添| 国产成人激情av| 成人免费网站在线看| 国产日韩在线播放| 成人免费观看毛片| heyzo中文字幕在线| 欧美不卡在线一区二区三区| 妺妺窝人体色www聚色窝仙踪| 日本一区二区在线看| 亚洲欧美综合精品久久成人| 91精品国产自产| 国内毛片久久| 亚洲国产欧美在线成人app| 亚洲av无码一区东京热久久| 成人h动漫精品一区二区器材| 日韩欧美卡一卡二| 日韩精品国产一区| 国产欧美三级电影| 日韩精品电影网| 午夜时刻免费入口| 91欧美国产| 毛片精品免费在线观看| 久久久久久国产精品视频| 亚洲午夜一区| 555www成人网| 中文字幕91爱爱| 精品亚洲成a人在线观看 | 永久免费看片在线播放| 免费看亚洲片| 国产综合视频在线观看| 亚洲AV无码一区二区三区少妇| 不卡视频一二三| 欧美黄色直播| 老司机av在线免费看| 一区二区激情视频| 妺妺窝人体色www在线小说| 偷拍精品精品一区二区三区| 欧美日韩高清一区| 日本精品一二三区| 国内成人精品| 少妇久久久久久| 欧美三级 欧美一级| 免费在线欧美黄色| 国产精品99久久久久久久久| 国产精品视频a| 成人av电影在线网| 亚洲欧洲国产日韩精品| 俺来俺也去www色在线观看| 在线免费观看一区| 国产a级片视频| 欧美日韩国产免费观看视频| 久久这里有精品视频| 制服.丝袜.亚洲.中文.综合懂色| 天堂在线亚洲视频| 粉嫩av四季av绯色av第一区| 国产精品久久久久久久龚玥菲| 亚洲美女一区二区三区| 亚洲精品乱码久久久久久自慰| 久久青草视频| 精品五月天久久| 色婷婷在线视频观看| 先锋影音久久久| 操一操视频一区| shkd中文字幕久久在线观看| 婷婷中文字幕综合| 国产xxxxhd| 成人羞羞网站入口| 91sa在线看| 亚洲伦理在线观看| 国产精品福利av| av无码精品一区二区三区| 久久99国产精品久久99大师| 久久久av电影| 伊人色综合久久久| 久久久蜜臀国产一区二区| 蜜臀精品一区二区| 91精品国产色综合久久不卡粉嫩| 国产小视频国产精品| 日韩免费黄色片| 成人一区在线看| 久久免费一级片| 亚洲欧洲一二区| 色噜噜狠狠狠综合曰曰曰| 无码人妻丰满熟妇奶水区码| 97久久超碰国产精品| 激情五月婷婷六月| 日韩高清二区| 久久成人这里只有精品| 国产精品久久久久久在线| 国产精品嫩草99a| 男女午夜激情视频| 亚洲精品合集| 51久久精品夜色国产麻豆| 亚洲欧美日本在线观看| 午夜伊人狠狠久久| www.啪啪.com| 一级成人国产| 九九九九精品| 午夜不卡影院| 亚洲日本中文字幕| 区一区二在线观看| 国产欧美日韩在线| 能看的毛片网站| 日韩av免费大片| 国产又爽又黄的激情精品视频| 在线观看a视频| 欧美乱熟臀69xxxxxx| 天天鲁一鲁摸一摸爽一爽| 国产一区二区三区蝌蚪| 三级在线免费观看| 久久久久久亚洲精品美女| 欧美国产日韩在线| 色wwwwww| 91福利视频在线| 人妻互换一区二区激情偷拍| 狠狠色丁香婷综合久久| 国产一二三四区在线观看| 午夜日韩影院| 91精品国产精品| 北岛玲日韩精品一区二区三区| 欧美日韩中文另类| 全程偷拍露脸中年夫妇| av电影天堂一区二区在线| 女人另类性混交zo| 欧美激情电影| 国产精品亚洲不卡a| 欧美gay囗交囗交| 日韩在线视频中文字幕| 亚洲精品18p| 欧美性猛交视频| 国产性生活大片| 91香蕉国产在线观看软件| 在线免费视频a| 亚洲天堂一区二区三区四区| 国产精品午夜av在线| 日韩精品免费观看视频| 国产91丝袜在线播放| 日韩精品一区二区在线| 免费在线观看日韩| 99久久99久久精品国产片果冻| 国产一二三在线视频| 都市激情亚洲欧美| 日本一欧美一欧美一亚洲视频| 电影在线一区| 欧美日韩国产免费一区二区| 国产性70yerg老太| 91热门视频在线观看| 第一区免费在线观看| 亚洲精品乱码| 一区二区三区欧美在线| 久久亚州av| 麻豆国产欧美一区二区三区| 亚洲一区二区三区毛片| 黄色污网站在线观看| 日韩综合视频在线观看| 亚洲a一级视频| av中文字幕在线观看第一页| 特级西西444| 国产伦久视频在线观看| 亚洲欧洲午夜一线一品| 国内老熟妇对白hdxxxx| 色哟哟国产精品| 免费一级片在线观看| 国产日韩欧美综合在线| 激情av中文字幕| 美女精品一区二区| 九九精品在线| 婷婷综合五月天| 99热99这里只有精品| 国产一区二区三区不卡在线观看 | 国产精品久久久久aaaa九色| 欧美亚洲系列| 国产精品免费看| 青青草原成人| 国产乱人伦丫前精品视频| 国产日韩欧美中文| 制服丝袜专区在线| 欧美国产日韩一区二区| 男人影院在线观看| 亚洲视频在线免费观看| 日韩一级中文字幕| 日韩欧美国产综合一区| 11024精品一区二区三区日韩| 91国偷自产一区二区使用方法| 亚洲精品www久久久久久| 夜夜夜精品看看| 少妇久久久久久被弄高潮| 国产精品久久综合| 国产在线综合视频| 国产偷v国产偷v亚洲高清| 成人免费无码大片a毛片| 成人动漫精品一区二区| 美女流白浆视频| 精品写真视频在线观看| 成人性生交免费看| 另类综合日韩欧美亚洲| 国产裸体免费无遮挡| 国产精品一二| 能在线观看的av| 老妇喷水一区二区三区| 欧美综合在线观看视频| 久久欧美肥婆一二区| 午夜激情福利在线| 欧美aaa在线| 最新天堂中文在线| 蜜乳av一区二区三区| 天天干在线影院| 麻豆freexxxx性91精品| 国产又黄又猛的视频| 狠狠网亚洲精品| 色哟哟在线观看视频| 风流少妇一区二区| 日本一区二区在线免费观看| 91在线国产福利| 97在线观看免费视频| 日本亚洲精品| 久久不射热爱视频精品| 高清电影在线观看免费| **欧美日韩vr在线| 亚洲欧洲国产视频| 天天影视欧美综合在线观看| 中文字幕免费在线不卡| 欧美黄色aaaa| 97国产精东麻豆人妻电影| 日韩精品一二三| 91亚洲一区二区| 成人a区在线观看| 免费黄色在线视频| 中文字幕亚洲电影| 久久精品视频9| 欧美在线999| 国产高中女学生第一次| 日韩电视剧免费观看网站| 超碰免费在线观看| 欧美精品在线免费| 亚洲日本天堂| 亚洲自拍av在线| 亚洲美女15p| japanese在线视频| 国产亚洲永久域名| 午夜精品久久久久久久99热影院| 成人免费三级在线| 免费在线观看a视频| 亚洲精品高清视频在线观看| 日本视频在线观看免费| 欧美一卡2卡三卡4卡5免费| 色视频在线看| 欧美成人三级视频网站| 久久野战av| 国产精品免费观看高清| 日韩成人精品一区| 国产青青在线视频| 国模娜娜一区二区三区| 国产精品一级黄片| 亚洲女厕所小便bbb| 中文字幕免费高清网站| 亚洲成色777777女色窝| 黄色网在线免费观看| 欧洲精品毛片网站| 国产厕拍一区| 欧美一级黄色录像片| 日韩电影在线免费| 三级视频网站在线观看| 亚洲久本草在线中文字幕| 中文字幕久久久久| 日韩av综合网| 国产盗摄一区二区| 亚洲va男人天堂| 首页国产精品| 精品久久久久久中文字幕2017| www.日韩精品| 劲爆欧美第一页| 91精品国产综合久久久蜜臀图片| 成人av毛片| 国产成人久久精品| 天堂俺去俺来也www久久婷婷| 国产美女主播在线| 国产福利一区二区三区在线视频| 国产麻豆a毛片| 欧美亚洲国产一区在线观看网站 | 丰满人妻一区二区三区53号| 蜜臀av一区二区三区| 国产美女永久免费无遮挡| 日韩欧美aaa| 日本午夜在线视频| 51色欧美片视频在线观看| 青青草原在线亚洲| 欧美成人高潮一二区在线看| 丁香婷婷综合激情五月色| 中文字幕av免费在线观看| 这里只有精品电影| 麻豆网在线观看| 成人国内精品久久久久一区| 日韩欧美一区免费| 午夜剧场高清版免费观看 | 香蕉免费毛片视频| 亚洲精品乱码久久久久久金桔影视| 国产在线观看91| 亚洲最大福利视频| 韩国在线一区| 艳妇乳肉豪妇荡乳xxx| 天天综合色天天综合| 深夜福利在线看| 国产成人精品一区二区在线| 全球成人免费直播| 亚洲网中文字幕| 亚洲欧美电影院| 人人妻人人澡人人爽久久av| 97免费中文视频在线观看| 日韩中出av| 999在线免费视频| 国产精品久久久久影院亚瑟| 国产精品久久婷婷| 欧美激情视频一区二区三区不卡| 精品国产午夜肉伦伦影院| 国产超级av在线| 日本一区二区动态图| 99久久精品免费看国产交换| 欧美精品久久久久久久久久| 色88888久久久久久影院| 成人午夜激情av| |精品福利一区二区三区| 亚洲黄色精品视频| 青青草原一区二区| 97人人精品| 国产一级免费片| 在线观看欧美日本| 伊人影院蕉久影院在线播放| 精品在线观看一区二区| 久久精品国产亚洲一区二区三区| 欧美成人精品激情在线视频| 日韩国产精品亚洲а∨天堂免| 51一区二区三区| 欧美另类videosbestsex日本| 91丨porny丨国产入口| 午夜视频网站在线观看| 欧美成人在线网站| 欧美激情在线精品一区二区三区| 午夜一区二区视频| 精品国产鲁一鲁一区二区张丽| av小片在线| 精品视频一区二区三区四区| 琪琪一区二区三区| 日本特黄特色aaa大片免费| 亚洲欧洲在线免费| 香港久久久电影| 亚洲第一狼人区| 亚洲成av人影院| 麻豆tv在线| 欧美一区观看| 成人aaaa免费全部观看| 国产精品久久久久久久成人午夜| 欧美最顶级的aⅴ艳星|