1. 程式人生 > >快取管理方案 AutoLoadCache (spring註解管理快取,可與redis,mencache等對接)

快取管理方案 AutoLoadCache (spring註解管理快取,可與redis,mencache等對接)

AutoLoadCache 是使用 Spring AOP 、 Annotation以及Spring EL表示式 來進行管理快取的解決方案,同時基於AOP實現自動載入機制來達到資料“常駐記憶體”的目的。

現在使用的快取技術很多,比如Redis、 Memcache 、 EhCache等,甚至還有使用ConcurrentHashMap 或HashTable 來實現快取。但在快取的使用上,每個人都有自己的實現方式,大部分是直接與業務程式碼繫結,隨著業務的變化,要更換快取方案時,非常麻煩。接下來我們就使用AOP + Annotation 來解決這個問題,同時使用自動載入機制來實現資料“常駐記憶體

”。

Spring AOP這幾年非常熱門,使用也越來越多,但個人建議AOP只用於處理一些輔助的功能(比如:接下來我們要說的快取),而不能把業務邏輯使用AOP中實現,尤其是在需要“事務”的環境中。

如下圖所示:Alt 快取框架

AOP攔截到請求後:

  1. 根據請求引數生成Key,後面我們會對生成Key的規則,進一步說明;

  2. 如果是AutoLoad的,則請求相關引數,封裝到AutoLoadTO中,並放到AutoLoadHandler中。

  3. 根據Key去快取伺服器中取資料,如果取到資料,則返回資料,如果沒有取到資料,則執行DAO中的方法,獲取資料,同時將資料放到快取中。如果是 AutoLoad的,則把最後載入時間,更新到AutoLoadTO中,最後返回資料;如是AutoLoad的請求,每次請求時,都會更新 AutoLoadTO中的 最後請求時間。

  4. 為了減少併發,增加等待機制:如果多個使用者同時取一個數據,那麼先讓第一個使用者去DAO取資料,其它使用者則等待其返回後,去快取中獲取,嘗試一定次數後,如果還沒獲取到,再去DAO中取資料。

AutoLoadHandler(自動載入處理器)主要做的事情:當快取即將過期時,去執行DAO的方法,獲取資料,並將資料放到快取中。為了防止 自動載入佇列過大,設定了容量限制;同時會將超過一定時間沒有使用者請求的也會從自動載入佇列中移除,把伺服器資源釋放出來,給真正需要的請求。

使用自載入的目的:

  1. 避免在請求高峰時,因為快取失效,而造成資料庫壓力無法承受;

  2. 把一些耗時業務得以實現。

  3. 把一些使用非常頻繁的資料,使用自動載入,因為這樣的資料快取失效時,最容易造成伺服器的壓力過大。

分散式自動載入

如果將應用部署在多臺伺服器上,理論上可以認為自動載入佇列是由這幾臺伺服器共同完成自動載入任務。比如應用部署在A,B兩臺伺服器上,A伺服器自 動載入了資料D,(因為兩臺伺服器的自動載入佇列是獨立的,所以載入的順序也是一樣的),接著有使用者從B伺服器請求資料D,這時會把資料D的最後載入時間 更新給B伺服器,這樣B伺服器就不會重複載入資料D。

使用方法

1. Maven

?
1 2 3 4 5 <dependency> <groupId>com.github.qiujiayu</groupId> <artifactId>autoload-cache</artifactId> <version>2.2</version> </dependency>

2. Spring AOP配置

從0.4版本開始增加了Redis及Memcache的PointCut 的實現,直接在Spring 中用aop:config就可以使用。

Redis 配置:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

相關推薦

快取管理方案 AutoLoadCache (spring註解管理快取redismencache對接)

AutoLoadCache 是使用 Spring AOP 、 Annotation以及Spring EL表示式 來進行管理快取的解決方案,同時基於AOP實現自動載入機制來達到資料“常駐記憶體”的目的。 現在使用的快取技術很多,比如Redis、 Memcache 

JDK動態代理和CGLIB動態代理,實現Spring註解管理事務區別。

註解式事務配置 1.JDK動態代理 <tx:annotation-driven transaction-manager="txManager"/>  預設啟用JDK動態代理,JDK只能代理介面不能代理類。 @Transactional註解可以標註在

Spring事務管理一:Spring事務管理的優點

(翻譯自spring-framework-reference.pdf 第四章 Data Access) 通常情況下,J2EE有2種事務管理方式:全域性事務和本地事務,2種事務都比較明顯的缺陷。 全域性事務:         全域性事務允許跨多個事務資源的事務管理(通常是關係

Spring註解原理的詳細剖析實現

一、註解的基本概念和原理及其簡單實用 註解(Annotation)提供了一種安全的類似註釋的機制,為我們在程式碼中新增資訊提供了一種形式化得方法,使我們可以在稍後某個時刻方便的使用這些資料(通過解析註解來使用這些資料),用來將任何的資訊或者元資料與程式元素(類、方法、成員變

Spring註解程式設計時用junit測試時顯示jdK版本過低問題,更改版本後仍然不行的解決方法

Spring註解程式設計時,用Junit測試時報錯JDK版本過低,更換JDK版本後, 會報錯不支援本JDK版本的解決方法;;;; 弄了好長時間沒弄好 原來先把JDK版本換到JDK6或者JDK7的版本   並且配置好環境變數 和 eclipse執行JDK版本  使他們和你安

通俗淺談Spring cloud簡介概述SpringCloud和dubbo的區別

Spring cloud Spring Cloud是一系列框架的有序集合。 它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發

Spring Boot 打包成的執行 jar 為什麼不能被其他專案依賴?

前兩天被人問到這樣一個問題: “鬆哥,為什麼我的 Spring Boot 專案打包成的 jar ,被其他專案依賴之後,總是報找不到類的錯誤?” 大夥有這樣的疑問,就是因為還沒搞清楚可執行 jar 和普通 jar 到底有什麼區別?今天鬆哥就和大家來聊一聊這個問題。 多了一個外掛 Spring Boot 中預設

JAVAEE——SSH項目實戰06:統計信息管理Spring註解開發和EasyUI

disabled path -a ted efault pen ret 發送 tran 作者: kent鵬 轉載請註明出處: http://www.cnblogs.com/xieyupeng/p/7190925.html 一、統計信息管理    二、Spring

spring事務管理xml配置aop事務和註解配置aop事務

mov ref itcast template password nds eth poi ntc xml配置和註解配合共同代碼 AccountService.java public interface AccountService { //轉賬方法

Spring學習之路(三)bean註解管理AOP操作

spec resource 自定義屬性 開始 java framework XML 方法名 jar包 在類上面、方法上面、屬性上面添加註解;並用bean來管理; 書寫方法:@註解名稱(屬性名稱=值) 第一步:導入jar包   導入spring-aop.jar(spri

Spring框架context的註解管理方法之二 使用註解註入對象屬性

.org es2017 swift package 自動 clas 找到 裝配 alt 首先還是xml的配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring

Spring---AOP註解開發&jdbc模板&Spring事務管理

use oca update -m spl pub tex com att 一、AOP註解開發   此處需要回憶一遍AOP的概念。簡單的來說,AOP就是利用動態代理技術,做到不觸動源代碼但卻擴展了功能。那麽就需要一個被擴展的對象和一個“新的功能”,例如說給某類的saveUs

spring常用管理bean註解

fig tran ebean 構造 control prop repos set resp spring提供了多個註解聲明Bean為spring管理的Bean @Controller  聲明此類是一個MVC類,通常與@RequestMapping一起使用 @Con

淺談spring事務管理的2種方式:程式設計式事務管理和宣告式事務管理;以及@Transactional(rollbackFor=Exception.class)註解用法

事務的概念,以及特性: 百度百科介紹: ->資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過

Atitit spring註解事務的demo程式碼說明 目錄 1.1. Spring框架中要如何實現事務?有一個註解@EnableTransactionManagement 1 1.2. 事務管理

Atitit spring註解事務的demo與程式碼說明 目錄 1.1. Spring框架中,要如何實現事務?有一個註解,@EnableTransactionManagement 1 1.2. 事務管理  99.99999%都是使用了xml來配置的 1 1.3.

spring+memcache配置+快取註解配置

spring+memcache配置快取註解@cahceable等 1.增加memcache pom檔案 <dependency> <groupId>com.googlecode.xmemcached</group

spring事物配置宣告式事務管理和基於@Transactional註解的使用

spring支援程式設計式事務管理和宣告式事務管理兩種方式。         程式設計式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於程式設計式事務管理,spring推薦使用Transactio

Spring :bean管理的常用註解

A…@Component註解 作用: 把資源讓spring來管理。相當於在xml中配置一個bean。 屬性: value:指定bean的id。如果不指定value屬性,預設bean的id是當前類的類名。首字母小寫。 2…@Controller @Servi

Spring之Ehcache快取註解

一、@Cacheable(value,key,condition) 1.說明 主要針對方法配置,能夠根據方法的請求引數對其結果進行快取 引數 解釋 example value 快取的名稱,在 sp

spring bean管理註解

Class path掃描與元件的管理    @Component是一個通用的註解,可用於任何bean    @Repository,@Service,@Controller是更有針對性的註解       @Repository:通常用於註解DAO類,即持久層       @S