天天看點

java緩存和redis,用redis和java緩存資料庫

資料庫中的資訊越多,随着時間的推移,它就會變得越慢。 即使是精心設計的支援許多并發請求的資料庫管理系統最終也會達到極限。

資料庫緩存是處理這些性能問題的最常見政策之一。 緩存包括将資料庫查詢的結果儲存在一個更快、更容易通路的位置。 如果操作正确,緩存将大幅縮短查詢響應時間,減少資料庫負載,并降低成本。

但是,緩存也需要小心處理,因為它們本質上是在一個單獨的位置複制您的資訊。 保持資料庫和緩存同步并保持最新可能比您預期的更棘手。 在下一節中,我們将讨論一些最常見的資料庫緩存政策。

java緩存和redis,用redis和java緩存資料庫

手動緩存(也稱為緩存備用政策)涉及資料庫和緩存的直接管理。 您的應用程式在啟動資料庫查詢之前檢查緩存,并在資料庫發生任何更改後更新緩存。

如果實作正确,手動緩存雖然有效,但是非常繁瑣,尤其是當您需要查詢多個資料庫時。 出于這些原因,開發人員發明了許多替代的緩存政策。

在讀緩存中,應用程式首先查詢緩存,看它需要的資訊是否在裡面。 如果沒有,它将從資料庫中檢索資訊,并使用它來更新緩存。 緩存提供程式或緩存庫負責查詢和更新緩存的詳細邏輯。

當應用程式重複請求相同的資料時,通讀政策最适合讀取量大的工作負載:例如,一個新聞網站反複加載相同的文章。

通讀政策的一個缺點是,對緩存的第一次查詢總是會導緻未命中,因為所請求的資訊保證不在緩存中。 為了解決這個問題,開發人員通常會提前用使用者可能請求的資訊“溫暖”資料庫同步軟體 緩存。

在直寫緩存中,首先更新緩存,然後更新資料庫。 從應用程式到緩存以及從緩存到資料庫都有一條直接的線路。 當與直讀緩存結合時,直寫政策保證了資料的一緻性,消除了手動緩存失效的需要。

在後寫緩存(也稱為回寫緩存)中,應用程式首先将資料寫入緩存。 經過一段時間的延遲後,緩存也會将此資訊寫入資料庫。 後寫緩存最适合寫負載繁重的工作負載,即使出現一些故障和停機,也能表現良好。

Redis是NoSQL資料庫最受歡迎的選項之一,它使用鍵值系統來存儲資料。 Redisson是一個Java程式設計語言的Redis用戶端庫,它使得使用所有熟悉的Java集合通路Redis功能變得很容易。

Redisson允許您将地圖中的資料放在外部存儲中。 您可以使用此功能為資料庫、web服務或任何其他資料源實作緩存。

下面是一個如何在Redisson中使用讀緩存的Java例子。

如果請求的條目在緩存中不存在,它将由MapLoader對象加載:

配置示例:

下面是一個如何在Redis中使用直寫緩存的Java例子。

在MapWriter對象更新緩存和資料庫之前,緩存更新方法不會傳回:

配置示例:

MapWriter接口還用于異步送出對地圖對象(緩存)和外部存儲(資料庫)的更新。 所有地圖更新都是成批累積的,并以定義的延遲異步寫入。

writeBehindDelay —成批寫入或删除操作的延遲。 預設值為1000毫秒。

writeBehindBatchSize —批量大小。 每個批次都包含映射條目寫入或删除指令。 預設值為50。

下面,我們看到一個基于Redisson的寫後緩存實作配置的Java示例:

所有讨論的政策都适用于Redisson中的RMap、RMapCache、RLocalCachedMap和RLocalCachedMapCache對象。 使用後兩個對象可以使Redis中的讀取操作速度提高45倍。