国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

略談服務端緩存設計

liuyix / 2756人閱讀

摘要:另載于大略談一下,各位輕拍哦服務端性能優(yōu)化,除了重構,最常用的手段就是緩存。本地緩存是應用程序在同一內的緩存,通常是或。某臺更新了一條數據,就通知緩存把這條更新或丟棄,確保其他能拿到最新結果。

另載于 http://www.qingjingjie.com/blogs/13

大略談一下,各位輕拍哦!

服務端性能優(yōu)化,除了重構,最常用的手段就是緩存。緩存主要分為本地緩存和分布式緩存兩種。

根據我們每日千萬次訪問的經驗來看,緩存不是必須的。優(yōu)化充足的情況下,SQL平均耗時1ms。這是因為命中了索引,并且命中了MySQL緩沖池(內存中)。如果命中索引但不命中緩沖池,且查詢數據量不大,磁盤并發(fā)量不高,則大約耗時10ms(磁盤尋道)。如果這些都不滿足,耗時就大了。

所以首先要建設的是索引,一切供查詢的字段能索引就索引。有的字段取值多樣性很小,比如布爾值、枚舉值,就不適合索引(就算命中索引也可能要全盤掃描),查詢時要聯(lián)合其他字段過濾下,才會快。Replication, Sharding也是好辦法,能用就用上。

本地緩存是應用程序在同一JVM內的緩存,通常是ConcurrentHashMap或Guava Cache。優(yōu)點是耗時低得忽略不計,缺點是占用本地內存、多機會冗余、數據不同步。當集群里每個App Server都有個緩存,會有很多數據是重復的,而且某臺機器更新了一條數據,別的機器不知道啊,只能等緩存過期。

同步問題可以用消息隊列來解決,一臺有更新,廣播消息給其他機器,準實時同步

Guava Cache有expire或refresh兩種過期方式,expire是過期就丟棄,refresh是過期先留著舊值,取到新值再更新。expire會有點性能波動,為了響應性可以選擇refresh方式。另外建議設個上限,量太多會影響GC的。

根據Jim Gray的經驗數字,過期時間通常以5分鐘為宜(主要還是看你業(yè)務哦)。

分布式緩存是Memcached/Couchbase, Redis這類,訪問要經過網絡,多少會有一點點開銷。Memcached或Redis本身就要有集群,否則一旦扛不住并發(fā),還不如數據庫呢。某臺App Server更新了一條數據,就通知緩存把這條更新或丟棄,確保其他Server能拿到最新結果。

查詢操作要有超時設置。注意耗時,如果超過10ms就有點不好了。

緩存服務用來存復雜查詢的結果倒是極合適的,這時候比數據庫快得多。

緩存除了加快訪問以外,也能提高負載能力。因為數據庫連接是有限的資源——不支持NIO,每個連接同時只能服務一個線程,有多少連接就有多少并發(fā)。如果有慢查詢占住了連接,系統(tǒng)性能會急劇下降!緩存就能減輕對數據庫連接的依賴。

本地緩存和分布式緩存各有千秋,一般建議用一致性更高的分布式緩存,當性能需要極端調優(yōu)時,使用本地緩存。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64671.html

相關文章

  • 緩存架構的理論分析

    摘要:但實際情況是緩存是大型網站的標配。以上分析告訴我們緩存架構要滿足冷熱分離的特征不滿足,因為冷數據可能擠走熱數據。另外,眾所周知,緩存架構還要滿足讀寫分離的特征也不滿足,因為寫操作會爭搶讀操作的資源。這種風格需要緩存系統(tǒng)的支持。 問題背景 略談服務端緩存設計 一文說到緩存不是必須的,因為數據庫本身就利用了內存。但實際情況是緩存是大型網站的標配。 雖然經驗顯示RDBMS最快時只需0~1ms...

    jeffrey_up 評論0 收藏0
  • 緩存架構的理論分析

    摘要:但實際情況是緩存是大型網站的標配。以上分析告訴我們緩存架構要滿足冷熱分離的特征不滿足,因為冷數據可能擠走熱數據。另外,眾所周知,緩存架構還要滿足讀寫分離的特征也不滿足,因為寫操作會爭搶讀操作的資源。這種風格需要緩存系統(tǒng)的支持。 問題背景 略談服務端緩存設計 一文說到緩存不是必須的,因為數據庫本身就利用了內存。但實際情況是緩存是大型網站的標配。 雖然經驗顯示RDBMS最快時只需0~1ms...

    APICloud 評論0 收藏0
  • 緩存架構的理論分析

    摘要:但實際情況是緩存是大型網站的標配。以上分析告訴我們緩存架構要滿足冷熱分離的特征不滿足,因為冷數據可能擠走熱數據。另外,眾所周知,緩存架構還要滿足讀寫分離的特征也不滿足,因為寫操作會爭搶讀操作的資源。這種風格需要緩存系統(tǒng)的支持。 問題背景 略談服務端緩存設計 一文說到緩存不是必須的,因為數據庫本身就利用了內存。但實際情況是緩存是大型網站的標配。 雖然經驗顯示RDBMS最快時只需0~1ms...

    Leck1e 評論0 收藏0
  • 緩存穿透、雪崩、熱點與Redis

    摘要:關于緩存熱點重建原文說到在緩存失效的瞬間,有大量線程來重建緩存,造成后端負載加大,甚至可能會讓應用崩潰,并給出互斥鎖和永遠不過期兩種候選方案。即使繞過互斥鎖,也不會產生什么不好的后果,因為更新緩存是一個冪等操作。 向大家推薦這篇文章——Redis架構之防雪崩設計:網站不宕機背后的兵法 (另外推薦我去年的短文作為餐前點心——略談服務端緩存設計) 《Redis架構之防雪崩設計》這篇文章(下...

    oujie 評論0 收藏0

發(fā)表評論

0條評論

liuyix

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<