日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java缓存怎么用_java开发应该如何缓存?

發布時間:2023/12/31 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java缓存怎么用_java开发应该如何缓存? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先應該理解為什么需要緩存。

在計算機的組成中,關于存儲這一塊是分層設計的,訪問速度從快到慢主要分為:CPU的L1緩存、CPU的L2緩存、CPU的L3緩存、主內存、SSD硬盤、機械硬盤。

其實一開始并沒有L1、L2、L3緩存,但CPU訪問內存的速度還是慢,在這個過程中CPU只能等,為了優化這一點,在CPU內部加入了這些緩存,主要用于存放內存中的熱點數據。舉個特例來說,CPU內部的緩存是按緩存行存儲的,64位OS的緩存行通常是64字節,如果當前操作的是一個數組對象的話,CPU不會只讀取一個數組元素到緩存中,而是會讀取多個元素,填充64字節的緩存行,這樣一來,如果遍歷下一個元素的話,就不用跑內存去拿了。

由上可知,計算機的緩存設計是為了盡量消除CPU與各存儲設備的訪問延遲。使數據盡早的觸達CPU。同樣業務開發中,緩存的設計也是為了使數據盡早的觸達用戶。

但是在業務中,還應該根據業務的特點判斷,例如,服務本身沒啥訪問量,而且都是輕量級操作,即使每次都直接操作DB也沒關系,那就沒必要設計緩存,這種情況下設計緩存反而會增加系統復雜度。

另外,如果緩存的數據頻繁變更,也就是寫多讀少的情況,也沒必要設計緩存。

所以,緩存的應用場景可以概括如下:

1)讀多寫少。

2)讀取的數據是需要經過大量計算得出的,這種可以預計算并緩存起來。

另外聊一下題主說的DB緩存、MyBatis緩存、Redis等。

1)DB緩存、MyBatis緩存的設計思路其實跟上面是一致的,目前數據庫的存儲上,主流還是使用機械硬盤,而mysql一類的關系型數據庫通常是隨機讀寫,機械硬盤的一次隨機讀寫尋址時間大概需要10ms,雖然InnoDB引擎的B+數可以有效緩解隨機讀寫次數,但對于高并發系統來說,這個消耗還是很可觀的。再加之每次select操作都需要經過DB的分析器、優化器、執行器、存儲引擎,所以操作是比較復雜的,所以這里緩存的目的就是為了盡可能的降低上述操作帶來的消耗。

另外,MySQL的數據庫緩存,在8版本中已經不支持了,因為每次對于一個row的update操作都會導致緩存失效,update頻繁時,此緩存基本處于無效狀態。在8之前的版本中,DB緩存的使用場景通常是在數據基本不變更的場景下。

2)Redis。其本質是個無中心設計的分布式內存數據庫,基于單進程K-V設計,訪問時間復雜度O(1),通常配合關系型數據庫使用,可當做關系型數據庫的緩存層。這個按需使用即可。

總結

以上是生活随笔為你收集整理的java缓存怎么用_java开发应该如何缓存?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。