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

再亂用緩存,CTO可就發飆了!

存儲 存儲軟件
今天總監很生氣,原因是強調了很多年的緩存同步方案,硬是有人不按常理出牌,挑戰權威。最終出了問題,這讓總監很沒面子。

[[395992]]

本文轉載自微信公眾號「小姐姐味道」,作者小姐姐養的狗02號 。轉載本文請聯系小姐姐味道公眾號。

今天總監很生氣,原因是強調了很多年的緩存同步方案,硬是有人不按常理出牌,挑戰權威。最終出了問題,這讓總監很沒面子。

"一群人拿著大老板的賬號在哪里瞎測,結果把數據搞出問題來了吧",總監牛鼻子里噴著氣,叉著腰說。自從老板的賬號有一次參與測試之后,就成了大家心照不宣的終極測試賬號。很多人用,硬生生把一個賬號的余額操作,給搞成了高并發的。

"老板的賬號不就是個測試賬號么...",下面有人小聲的嘀咕。

"現實中哪會有賬號有這樣的密集型操作的...",又有人小聲嘀咕,讓總監的臉色越來越沉。

"你們覺得我在開玩笑么?",總監紅著眼說,“我就曾經因為這樣的數據不一致問題,吃過一個一級故障。正好,今天就帶你們了解一下,為什么會有數據不一致的情況吧”。

我扶著眼鏡搖搖晃晃的做到臺下,心中暗笑,總監又要把Cache Aside Pattern給科普一遍了。

1. 為什么數據會不一致?

數據庫的瓶頸是大家有目共睹的,高并發的環境下,很容易I/O鎖死。當務之急,就是把常用的數據,給撈到速度更快的存儲里去。這個更快的存儲,就有可能是分布式的,比如Redis,也有可能是單機的,比如Caffeine。

但一旦加入緩存,就不得不面對一個蛋疼的問題:數據的一致性。

數據不一致的問題,人世間多了去了。進修過Java多線程的同學,肯定會對JMM的模型記憶猶新。一個數值,只要同時在兩個地方存儲,那就會產生問題。

但緩存系統和數據庫,比JMM更加的不可靠。因為分布式組件更加的脆弱,它隨時都可能發生問題。

2. Cache Aside Pattern

怎樣保證數據在DB和緩存中的一致性呢?現在一個比較好的最佳實踐方案,就是Cache Aside Pattern。

先來看一下數據的讀取過程,規則是:先讀cache,再讀db 。詳細步驟如下:

  1. 每次讀取數據,都從cache里讀
  2. 如果讀到了,則直接返回,稱作 cache hit
  3. 如果讀不到cache的數據,則從db里面撈一份,稱作cache miss
  4. 將讀取到的數據,塞入到緩存中,下次讀取的時候,就可以直接命中

再來看一下寫請求。規則是:先更新db,再刪除緩存 。詳細步驟如下:

  1. 將變更寫入到數據庫中
  2. 刪除緩存里對應的數據

說到這里,我看著有幾個人皺起了眉頭。我知道,肯定會有人不服氣,認為自己那一套是對的。比如,為什么是刪除緩存,不是更新緩存呢?效率會不會更低?為什么不先刪除緩存再更新數據庫?

好家伙,他們要向總監發問了。

3. 為什么是刪除緩存,而不是更新緩存?

這個比較好理解。當多個更新操作同時到來的時候,刪除動作,產生的結果是確定的;而更新操作,則可能會產生不同的結果。

如圖。兩個請求A和B,請求B在請求A之后,數據是最新的。由于緩存的存在,如果在保存的時許發生稍許的偏差,就會造成A的緩存值覆蓋了B的值,那么數據庫中的記錄值,和緩存中的就產生了不一致,直到下一次數據變更。

而使用刪除的方式,由于緩存會miss,所以會每次都會從db中獲取最新的數據進行填充,與緩存操作的時機關系不大。

4. 為什么不先刪緩存,再更新數據庫?

這個問題是類似的。我們甚至都不需要并發寫的場景就能發現問題。

我們上面提到的緩存刪除動作,和數據庫的更新動作,明顯是不在一個事務里的。如果一個請求刪除了緩存,同時有另外一個請求到來,此時發現沒有相關的緩存項,就從數據庫里加載了一份到緩存系統。接下來,數據庫的更新操作也完成了,此時數據庫的內容和緩存里的內容,就產生了不一致。

如上圖,寫請求首先刪除了緩存。結果在這個時候,有其他的讀請求,將數據庫的舊值,讀取到數據庫中,此時緩存中的數據是0。接下來更新了DB,將數據庫記錄改為了100。經過這么一哆嗦,數據庫和緩存中的數據,就產生了不一致。

大家都恍然大悟的點點頭,不少人露出了迷之微笑。

5. Spring中的緩存注解

使用 SpringBoot 可以很容易地對 Redis 進行操作,Java 的 Redis的客戶端,常用的有三個:jedis、redisson 和 lettuce,Spring 默認使用的是 lettuce。

很多人,喜歡使用Spring 抽象的緩存包 spring-cache。

它使用注解,采用 AOP的方式,對 Cache 層進行了抽象,可以在各種堆內緩存框架和分布式框架之間進行切換。這是它的 maven 坐標:

  1. <dependency>  
  2.     <groupId>org.springframework.boot</groupId>  
  3.     <artifactId>spring-boot-starter-cache</artifactId>  
  4. </dependency> 

使用 spring-cache 有三個步驟:

  1. 在啟動類上加入 @EnableCaching 注解;
  2. 使用 CacheManager 初始化要使用的緩存框架,使用 @CacheConfig 注解注入要使用的資源;
  3. 使用 @Cacheable 等注解對資源進行緩存。

而針對緩存操作的注解,有三個:

  1. @Cacheable 表示如果緩存系統里沒有這個數值,就將方法的返回值緩存起來;
  2. @CachePut 表示每次執行該方法,都把返回值緩存起來;
  3. @CacheEvict 表示執行方法的時候,清除某些緩存值。

那么問題來了,spring-cache中的@CacheEvict注解,到底是先刪緩存,還是后刪緩存呢?不弄明白這一點,真的是讓人夜不能寐。關鍵技術嘛,不僅要用的開心,也要用的放心。

緩存的移除,是在CacheAspectSupport中實現的,我們注意到下面的代碼。

  1. // Process any early evictions 
  2. processCacheEvicts(contexts.get(CacheEvictOperation.class), true
  3.   CacheOperationExpressionEvaluator.NO_RESULT); 
  4. ... 
  5. // Process any late evictions 
  6. processCacheEvicts(contexts.get(CacheEvictOperation.class), false, cacheValue); 

它有一個前置的清除動作,還有后置的清除動作,是通過一個bool變量boolean beforeInvocation進行設置的。這個值從哪里來的呢?還是得看@CacheEvict注解。

  1. /** 
  2. * Whether the eviction should occur before the method is invoked. 
  3. * <p>Setting this attribute to {@code true}, causes the eviction to 
  4. * occur irrespective of the method outcome (i.e., whether it threw an 
  5. * exception or not). 
  6. * <p>Defaults to {@code false}, meaning that the cache eviction operation 
  7. * will occur <em>after</em> the advised method is invoked successfully (i.e., 
  8. only if the invocation did not throw an exception). 
  9. */ 
  10. boolean beforeInvocation() default false

很好很好,它的默認值是false,證明刪除動作是滯后的,踐行的也是Cache Aside Pattern。

6. 還有其他模式?

我聽說,還有Read Through Pattern,Write Through Pattern,Write Behind Caching Pattern等其他常見的緩存同步模式,為什么不用這些呢? 有位同學的屁股一直在椅子上來回挪動,躍躍欲試,逮住機會,他終于發言了。

其實,這些方式使用的也非常廣泛,但由于對業務大多數是無感知的,所以很多人都忽略了。換句話說,這幾個模式,大多數是在一些中間件,或者比較底層的數據庫中實現的,寫業務代碼可能接觸不到這些東西。

比如,Read Through,其實就是讓你對讀操作感知不到緩存層的存在。通常情況下,你會手動實現緩存的載入,但Read Through可能就有代理層給你捎帶著做了。

再比如,Write Through,你不用再考慮數據庫和緩存是不是同步了,代理層都給你做了,你只管往里塞數據就行。

Read Through和Write Through是不沖突的,它們可以同時存在,這樣業務層的代碼里就沒有同步這個概念了。爽歪歪。

至于Write Behind Caching,意思就是先落地到緩存,然后有異步線程緩慢的將緩存中的數據落地到DB中。要用這個東西,你得評估一下你的數據是否可以丟失,以及你的緩存容量是否能夠經得起業務高峰的考驗。現在的操作系統、DB、甚至消息隊列如Kafaka等,都會在一定程度上踐行這個模式。

但它現在和我們的業務需求沒半點關系。

7. Cache Aside Pattern也有問題

總監上馬,一個頂倆,科普了這半天,所有的同學都心服口服。正在大家想要把掌聲送給總監的時候,一個不和諧的聲音傳來了。

我發現了一個天大的問題。 有同學說, 如果數據庫更新成功了,但緩存刪除失敗了,也會造成緩存不一致。

這個問題問的好啊,故障大多數就是由于這些極端情況造成的。這個時候就有意思了,我們要拼概率,畢竟沒有100%的安全套。 總監笑了。

方法一:將數據更新和緩存刪除動作,放在一個事務里,同進退。

方法二:緩存刪除動作失敗后,重試一定的次數。如果還是不行,大概率是緩存服務的故障,這時候要記錄日志,在緩存服務恢復正常的時候將這些key刪除掉

方法三:再多一步操作,先刪緩存,再更新數據,再刪緩存。這樣雖然操作多一些,但也更保險一些。

是不是沒有問題了? 總監環顧四周,看到大家都在點頭。No no no,依然還有數據不一致的情況。

所有人都一頭霧水。

上面那張看起來正確的圖,其實是錯誤的。為什么呢?因為數據在從數據庫讀到緩存中的操作,并不是原子性的。

比如上圖,當緩存失效(或者被刪除)的時候,有一個讀請求正好到來。這個讀請求,拿到了舊的數據庫值,但它由于多方面的原因(比如網絡抽風),沒有立馬寫入到緩存中,而是發生了延遲。在它打算寫入到緩存的這段時間,發生了很多事情,有另外一個請求,將數據庫的值更新為200,并刪除了緩存。

直到第二個請求全部完成,第一個請求寫入緩存的操作,才真正落地。但其實,這時候數據庫和緩存的值,已經不是同步的了。

那么為什么大家在平常的設計中,幾乎把這個場景給忽略掉了呢?因為它發生的概率實在太低了。它要求在讀取數據的時候,有兩個或者多個并發寫操作(或者發生了數據失效),這在實際的應用場景中實在是太少了。而且,我們要注意虛線所持續的周期,是一個數據庫的更新操作,加上一個cache的刪除操作,這個操作一般情況下,也會比緩存的設置持續的時間長,所以進一步降低了概率。

所以,你們知道正確的操作方式了么? 總監問。

知道了!以后我們就用spring-cache的注解去完成工作,再也不在代碼中手寫一致性邏輯了。

很好很好,如果這么做的話,再發生問題,好像可以把鍋甩給spring團隊了呢。 

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

 

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2014-01-24 09:55:23

IBM云計算SoftLayer

2020-04-03 08:30:44

RabbitMQKafka軟件

2022-02-22 11:12:38

2022-07-27 11:22:44

Emoji圖片動圖

2017-06-14 07:45:34

微軟windows補丁

2017-03-09 13:29:04

ReactNative JSPatch

2021-02-04 22:29:20

索引web開發

2021-05-27 05:29:29

緩存數據Redis

2022-03-02 15:10:31

DateJavaScript前端

2022-04-20 09:50:44

CTO技術管理職業發展

2022-12-19 11:31:57

緩存失效數據庫

2009-03-13 10:38:00

802.11nAP

2019-11-18 10:05:43

程序員技能開發者

2018-10-23 14:50:24

Linux操作系統Linus

2019-11-18 10:16:37

工程師開發網絡

2022-06-02 13:20:23

數字化技術

2009-12-21 09:24:00

鮑爾默開除員工

2014-08-20 09:25:47

2021-10-18 08:15:12

CTO代碼裁員

2022-02-14 17:15:00

情人節禮物程序員
點贊
收藏

51CTO技術棧公眾號

青青草手机在线| www.99re7.com| 色综合久久久| 亚洲国产精品久久艾草纯爱 | 在线看成人av电影| 精品人妻一区二区三区麻豆91| 欧美日一区二区在线观看 | 国产精品国内视频| 久久久久亚洲av片无码| 久久综合社区| 欧美日韩精品福利| 91丨porny丨探花| 日本免费视频在线观看| 高清国产一区二区| 国产精品久久久久久久久久久久 | 熟妇人妻一区二区三区四区| 奇米影视一区二区三区小说| 欧美高清在线视频观看不卡| 性の欲びの女javhd| 97视频一区| 欧美日韩国产欧美日美国产精品| 日韩五码在线观看| 国产一二三区在线观看| 久久夜色精品国产欧美乱极品| 国产精品福利无圣光在线一区| 中文在线观看免费网站| 色中色综合网| 亚洲视频网站在线观看| www.四虎在线| 自拍偷拍亚洲| 欧美亚洲愉拍一区二区| 每日在线观看av| 操你啦视频在线| 国产欧美一区二区三区沐欲| 激情视频一区二区| 99久久久国产精品无码网爆| 日韩综合小视频| 91国产一区在线| 亚洲色图综合区| 色天天综合网| 中文字幕成人精品久久不卡 | 色橹橹欧美在线观看视频高清| 欧美一区二区网站| 成年人三级黄色片| 国产第一亚洲| 91国产成人在线| 日韩av在线综合| 性欧美18~19sex高清播放| 洋洋成人永久网站入口| 中文字幕色呦呦| 国产激情在线| 中文字幕一区二区5566日韩| 亚欧精品在线| 天堂а√在线资源在线| 国产日韩欧美麻豆| 日本一区二区三区www| 日本福利片高清在线观看| 91网上在线视频| 免费国产一区| 欧美日韩伦理片| 91毛片在线观看| 久久99精品久久久水蜜桃| 天天综合网在线观看| 不卡一区在线观看| 国产精品美女诱惑| 手机av在线免费观看| www.亚洲色图.com| 久久久人人爽| 国产综合在线观看| 国产人伦精品一区二区| 色综合久久久久久久久五月| 99免在线观看免费视频高清| 国产精品福利影院| 国产盗摄视频在线观看| 2024最新电影在线免费观看| 一区二区三区日本| 国产免费黄色小视频| 天堂中文av在线资源库| 一本大道久久a久久综合婷婷| 不卡av免费在线| 欧洲精品久久久久毛片完整版| 欧美一区二区啪啪| 污网站免费观看| 亚洲欧美日本伦理| 最近的2019中文字幕免费一页| 日本少妇aaa| 狠狠综合久久| 日本精品视频在线观看| 亚洲在线精品视频| 国产成人av影院| 九九九九精品九九九九| 成人高清免费观看mv| 亚洲欧美电影院| 日韩小视频在线播放| 中文字幕日本一区二区| 91精品啪在线观看国产60岁| 北京富婆泄欲对白| 欧美综合一区| 欧美激情免费看| www.日韩一区| 国产精品91一区二区| 久久大片网站| 好操啊在线观看免费视频| 欧美日韩国产一区中文午夜| 成 人 黄 色 小说网站 s色| 国内精品麻豆美女在线播放视频| 国产丝袜一区二区三区| 五月天激情丁香| 亚洲综合不卡| 91免费看片在线| 酒色婷婷桃色成人免费av网| 亚洲欧美激情插 | 欧美精品一区二区三区蜜臀| 自拍偷拍亚洲天堂| 欧美黄免费看| 国产精品69久久久久| 亚洲爆乳无码一区二区三区| 国产欧美综合在线观看第十页| 成人免费性视频| 欧美91在线|欧美| 日韩精品久久久久久久玫瑰园| 青娱乐国产视频| 国产日韩亚洲| 97超级碰碰| 日本中文字幕在线2020| 午夜欧美视频在线观看| 日本人69视频| 成人精品视频| 欧洲精品在线视频| 欧美特黄一级视频| 亚洲欧美视频在线观看视频| www.久久久精品| 视频一区中文| 欧美亚洲成人免费| 黄色av免费观看| 亚洲精品中文在线观看| 最新天堂中文在线| jizzjizz欧美69巨大| 51久久精品夜色国产麻豆| www三级免费| 亚洲男人的天堂一区二区| 中文字幕第80页| 国产91精品对白在线播放| 午夜精品福利在线观看| 丰满人妻av一区二区三区| 亚洲视频一二三| 超碰在线资源站| 91亚洲国产高清| 国产区亚洲区欧美区| 99中文字幕一区| 欧美日韩国产首页| 日本一级片免费| 国模娜娜一区二区三区| 亚洲一区二区四区| 欧美aaaaaa| 神马久久桃色视频| 国产精品呻吟久久| 亚洲视频在线一区观看| 三级av免费看| 午夜日韩福利| 国产精品视频福利| 精精国产xxxx视频在线播放| 日韩成人在线播放| 久久99精品波多结衣一区| 91丨九色丨黑人外教| 少妇高潮喷水久久久久久久久久| 中文字幕精品影院| 国产精品黄色av| 日本视频不卡| 欧美一区二区大片| 九九九国产视频| www.激情成人| av免费中文字幕| 91亚洲一区| 91成人理论电影| 91九色porn在线资源| 亚洲欧美在线一区| 亚洲综合精品视频| 亚洲精选在线视频| 人体私拍套图hdxxxx| 久久国产精品久久w女人spa| 婷婷精品国产一区二区三区日韩| 婷婷久久免费视频| 欧美极品美女电影一区| 美女毛片在线看| 欧美人与禽zozo性伦| 妺妺窝人体色www在线下载| 成人免费不卡视频| 北条麻妃视频在线| 一区二区电影| 欧美欧美一区二区| 高清一区二区| 欧美在线www| 男人的天堂在线视频免费观看 | 欧美日韩精品一区二区视频| 91久久在线视频| 黄色在线网站噜噜噜| 中文字幕日韩在线视频| 超碰免费在线97| 色欧美乱欧美15图片| 天堂网avav| 国产日韩精品一区二区浪潮av | 久久综合色8888| 又色又爽又黄视频| 一区二区91| 在线观看视频黄色| 久久99高清| 俄罗斯精品一区二区| 欧美精品资源| 97国产精品久久| 黄色免费网站在线观看| 亚洲精品理论电影| 国产99999| 欧美日韩在线三级| 国产精品100| 一区二区三区中文字幕电影| 中国女人特级毛片| 成人激情免费电影网址| 不卡中文字幕在线观看| 久久久久国产一区二区| 精品免费久久久久久久| 成人羞羞视频在线看网址| 精品91免费| 日韩精品一级| 国产精品丝袜视频| 吞精囗交69激情欧美| 国模视频一区二区| 在线看福利影| 久久精品国亚洲| 春暖花开成人亚洲区| 亚洲精品美女在线观看| 亚洲精品国产一区二| 欧美精品一卡二卡| 中文字幕人妻互换av久久| 狠狠躁夜夜躁人人爽天天天天97| 久草视频免费在线播放| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩欧美综合在线| 中文字幕一区二区三区波野结| 欧美日韩黄色大片| 日本网站在线免费观看| 夜夜亚洲天天久久| 任我爽在线视频| 国产精品第13页| 超碰人人人人人人人| 国产清纯美女被跳蛋高潮一区二区久久w| 精品无码在线视频| 91丨九色丨蝌蚪丨老版| 日本免费福利视频| 91啪亚洲精品| 最新中文字幕视频| 久久蜜桃一区二区| 欧美亚一区二区三区| 久久综合色8888| 一级肉体全黄裸片| 欧美国产激情二区三区| 国产视频123区| 国产精品久久久久桃色tv| 大胸美女被爆操| 中文字幕一区日韩精品欧美| 国产午夜精品理论片在线| 亚洲色图欧美激情| 国产女人被狂躁到高潮小说| 一区二区三区中文字幕精品精品 | 久久久久亚洲AV成人网人人小说| 国产白丝网站精品污在线入口 | 久久久久久免费| 91资源在线播放| 1024成人网| 国产在线视频第一页| 婷婷六月综合网| 无码一区二区三区| 欧美日韩精品三区| 一本久道久久综合无码中文| 欧美精品免费视频| 国产福利小视频| 日韩成人av在线| aaa日本高清在线播放免费观看| 久久久精品日本| 丁香花在线电影小说观看| 992tv成人免费影院| 国产不卡网站| 91天堂在线视频| 日韩av中文字幕一区| 日韩国产精品一区二区三区| 欧美hentaied在线观看| www国产无套内射com| 美女精品网站| 亚洲无在线观看| aaa欧美色吧激情视频| a天堂中文字幕| 亚洲欧美日韩精品久久久久| 国产在线观看99| 在线欧美日韩精品| av中文字幕播放| 亚洲石原莉奈一区二区在线观看| 中文字幕有码在线观看| 4p变态网欧美系列| 久久久91麻豆精品国产一区| 精品久久久久久中文字幕动漫| 久久国产小视频| 国产不卡一区二区视频| 久久精品二区亚洲w码| 完美搭档在线观看| 国产精品麻豆久久久| 国产在线观看成人| 欧美日韩在线亚洲一区蜜芽| 香港一级纯黄大片| 91蝌蚪porny九色| 麻豆精品传媒视频| 国产一区网站| 国产精品视频网站在线观看| 老牛嫩草一区二区三区日本| 亚洲美女高潮久久久| 中文字幕第一区| 成人精品免费在线观看| 日韩一二三四区| 1769在线观看| 日韩美女激情视频| 国产福利一区二区精品秒拍| 伊人色综合影院| 天堂在线亚洲视频| 中文字幕人妻一区二区三区| 自拍偷拍国产亚洲| 日本视频www色| 亚洲欧美国产一区二区三区| 天堂成人av| 91亚洲国产成人精品性色| 怕怕欧美视频免费大全| 欧美视频免费看欧美视频| 国产酒店精品激情| 久久久久麻豆v国产| 在线亚洲一区二区| 欧洲天堂在线观看| 久久青草福利网站| 色妞ww精品视频7777| 91社在线播放| 狠狠色丁香婷婷综合| 国产午夜精品福利视频| 日韩欧美在线免费| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 99精品视频播放| 99精品偷自拍| 女人十八岁毛片| 亚洲精品久久视频| 2020av在线| 久久99精品久久久久久青青日本 | 国产精品免费视频观看| 国产一区免费看| 一区二区欧美在线| 不卡福利视频| 欧美大香线蕉线伊人久久| 99精品热6080yy久久| 国产毛片毛片毛片毛片毛片毛片| 亚洲动漫第一页| 性感美女福利视频| 欧美中在线观看| 你懂的一区二区三区| 成熟老妇女视频| 欧美国产成人在线| 亚洲中文字幕一区二区| 乱亲女秽乱长久久久| 欧美中文高清| 久久久性生活视频| 91亚洲国产成人精品一区二三| 欧美日韩综合在线观看| 日韩精品极品视频| 国产精品迅雷| 亚洲精品乱码久久久久久蜜桃91| 六月丁香婷婷久久| 91日韩中文字幕| 精品久久久久久亚洲综合网 | 99久久综合| 亚洲美女高潮久久久| 精品动漫一区二区| 国产小视频免费在线网址| 国产综合色香蕉精品| 欧美日本二区| 亚洲一级中文字幕| 欧美日韩成人高清| 日韩精品亚洲人成在线观看| 精品日本一区二区三区| 首页国产欧美日韩丝袜| 亚洲欧美精品aaaaaa片| 亚洲成人免费在线视频| 在线视频cao| 中文字幕免费高| 99久久精品免费看国产| 国产精品sm调教免费专区| 欧美成人免费全部| 五月综合久久| 美女在线视频一区二区| 亚洲成人自拍一区| 在线看av的网址| 国产一区免费在线| 日本亚洲最大的色成网站www| 欧美精品久久久久性色| 亚洲欧洲视频在线| 精品久久国产一区| 日本精品久久久久中文字幕|