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