mysql - 在實(shí)際工作中,緩存好像一般都用redis,memcache,而不ORM或者數(shù)據(jù)庫自帶的緩存,為何?
問題描述
在實(shí)際工作中,緩存好像一般都用redis,memcache,而不用Hibernate或者mybatis等ORM自帶的緩存或者數(shù)據(jù)庫本身自帶緩存,為何?
問題解答
回答1:首先,對大部分分布式系統(tǒng)來說,緩存不適合用程序?qū)崿F(xiàn),比如Java訪問數(shù)據(jù)庫時(shí),可以自建HashMap/LinkedHashMap用作緩存,可以用開源緩存類庫如EHCache,也可以用Hibernate自帶的緩存,但由于負(fù)載均衡的關(guān)系,多臺(tái)機(jī)器上的這些緩存不便于共享,所以不如Redis、Memcached等集中式的緩存來得方便合高效。
其次,很多大型互聯(lián)網(wǎng)公司的經(jīng)驗(yàn)表明,數(shù)據(jù)庫緩存帶來的效率提升并不明顯。因?yàn)楦骂l繁的表,緩存命中率很低;而指定數(shù)據(jù)庫對哪些表用緩存、哪些表不用緩存,可能難度很大。
回答2:我估計(jì)認(rèn)為 你想問的是為啥不用數(shù)據(jù)庫mysql等自帶的緩存,而使用redis,memcache之類
首先你需要知道 mysql之類的數(shù)據(jù)庫是存放在哪里。。。。redis 和memcache之類緩存存放在哪里
mysql是存在磁盤中,而redis和memcache是存放在內(nèi)存,哪個(gè)的運(yùn)行速度快,我想不言而喻了
我們做緩存本身就是為了快速響應(yīng)用戶請求。
回答3:使用緩存,最主要的目的是提升系統(tǒng)的響應(yīng)速度和對高負(fù)載的承受能力,因此各個(gè)層面緩存有不同的應(yīng)用場景:1、數(shù)據(jù)庫的緩存,是數(shù)據(jù)庫軟件自身進(jìn)行更新、判斷是否能從緩存取數(shù)據(jù),不需要開發(fā)人員關(guān)心,因此絕大部分情況下已經(jīng)使用了數(shù)據(jù)庫的緩存。mysql中是查詢結(jié)果緩存,根據(jù)query_cache_type的設(shè)置是否使用緩存,query_cache_size設(shè)置緩存大小。oracle中的中緩存有兩種,數(shù)據(jù)塊緩存buffer cache,查詢結(jié)果緩存SQL Result Cache。2、ORM的緩存要看實(shí)現(xiàn)類型,比較簡單的是存儲(chǔ)在服務(wù)器本機(jī)的內(nèi)存中,不能滿足集群部署的場景,強(qiáng)行使用會(huì)出現(xiàn)訪問數(shù)據(jù)不一致的現(xiàn)象。優(yōu)點(diǎn)是使用簡單,且本機(jī)緩存的性能更好。3、redis和memcache都是分布式緩存,使用場景比較廣,缺點(diǎn)是是需要開發(fā)的人工更新、查詢緩存,不像ORM的緩存是自動(dòng)更新的,開發(fā)起來比較繁瑣。有些開發(fā)框架會(huì)對緩存支持比較好,通過配置可以控制緩存使用、更新方法。
回答4:為了分布式緩存
回答5:單獨(dú)緩存系統(tǒng) 是考慮到分布式和熱增備的好處。數(shù)據(jù)庫緩存性能和擴(kuò)展都不方便了啊。
回答6:首先說明一下:
1、mysql、oracle這些關(guān)系數(shù)據(jù)庫自帶的緩存都是對熱數(shù)據(jù)進(jìn)行自動(dòng)存儲(chǔ)及替換,也是用的內(nèi)存空間2、redis、memcache這類緩存系統(tǒng)是由開發(fā)人員自由選擇數(shù)據(jù)對象,全部采用內(nèi)存,也有些帶持久化到磁盤存儲(chǔ)機(jī)制
然后說說各自優(yōu)缺點(diǎn):
mysql這類緩存是完全憑借數(shù)據(jù)庫自行運(yùn)作,沒有開發(fā)量,但是也完全基于數(shù)據(jù)庫服務(wù)器資源處理連接請求,極其消耗cpu和內(nèi)存甚至線程資源,對一個(gè)中大型業(yè)務(wù)系統(tǒng)來說,高并發(fā)請求全部放在數(shù)據(jù)庫對業(yè)務(wù)系統(tǒng)是致命的,除非你有無限量的硬件資源支持橫向擴(kuò)展,而這更加需要極高的成本,這無疑是極其浪費(fèi)資源的。而redis這類專門的緩存數(shù)據(jù)庫都是基于快速響應(yīng)、業(yè)務(wù)靈活變更的需求誕生的,主從或者集群模式也非常成熟,對于幾千數(shù)萬甚至更高并發(fā)的處理都不在話下,當(dāng)然這也要看使用方法。針對業(yè)務(wù)特性使用不同的緩存方法才是最重要的,比如對實(shí)時(shí)性更新要求不高、靜態(tài)數(shù)據(jù)這一類,所以總的來說要根據(jù)業(yè)務(wù)找最適用的系統(tǒng)!回答7:
你這個(gè)問題就好像在問。為什么cpu不在硬盤直接讀取,偏偏要的內(nèi)存
