昨天在開發業務時,打算加入快取層來提高系統響應速度。查詢了一些資料,發現 spring 的快取功能十分強大!只需要新增少量的**,就可以輕鬆快取方法所返回的物件。這篇文章通過描述乙個實際使用例子,介紹 spring cache 的使用限制以及注意事項。
開啟 build.gradle 檔案,新增 spring cache 依賴。
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
@data
@allargsconstructor
public class post implements serializable
public inte***ce postrepository
@component
public class postrepositoryimpl implements postrepository
private void simulateslowservice() catch (interruptedexception e)
}}
@restcontroller
public class postcontroller
public post getpostbyid(@pathvariable("id") long id)
}
針對一些不容易被修改的資源,如果每次都需要到持久化資料庫中進行查詢,無疑是十分浪費的,體驗也差,下面我們使用 spring cache 來改進一波。
@enablecaching
public static void main(string args)
}
新增 @enablecaching 註解啟動 spring cache。
spring:
cache:
type: redis
redis:
host: 127.0.0.1
port: 6379
這裡用 redis 作為快取引擎,如果小夥伴想用其他引擎,可自行查閱文件進行配置。
@restcontroller
public class postcontroller
@cacheable(cachenames = "getpostbyid", key = "#id")
public post getpostbyid(@pathvariable("id") long id)
}
使用 @cacheable 註解 getpostbyid 方法,使用了 cachenames 和 key 引數。這裡先不展開說,下面會集中梳理幾種註解以及它們的引數意義。
spring cache 常用的 5 個註解,分別是:
在啟動類新增 @enablecaching 註解讓系統開啟快取功能。
功能是開啟快取,可以標記在類上或者是方法上。在呼叫方法時,會先從快取中獲取結果,若不存在再執行方法。主要引數包括 cachenames、key、condition 和 unless 等。
針對方法配置,與 @cacheable 不同的地方在於它每次都會觸發真實方法的呼叫。簡單來說就是更新快取資料。主要引數和 @cacheable 一致。
針對方法配置,用來從快取中移除相應資料。除了與 @cacheable 相同的引數以外,還有 allentries 和 beforeinvocation。
該註解是乙個類級註解,可以讓類下面的方法共享 cachenames、keygenerator、cachemanager 和 cacheresolver 引數。
這裡是為了讓我們的快取註解支援自定義 ttl 失效時間,類似下面這種效果。
// 3600 秒後快取集合自動過期
@cacheable(cachenames = "getpostbyid#3600", key = "#id")
為了實現這種效果,我們建立乙個 customrediscachemanager 自定義類,如下所示。
public class customrediscachemanager extends rediscachemanager
@override
protected rediscache createrediscache(string name, rediscacheconfiguration cacheconfig)
return super.createrediscache(name, cacheconfig);
}}
使用自定義 customrediscachemanager 配置 cacheconfig。
public class cacheconfig extends cachingconfigurersupport ")
private string redishost;
@value("$")
private integer redisport;
@value("$")
private integer redisdatabase;
@override
@bean
public cachemanager cachemanager()
@bean
public redisconnectionfactory redisconnectionfactory()
}
perl學習從0起
2.看perl的一些基本語法 首先看到的是一些基本變數,perl也和其他語言一樣,包括 整型 浮點數 字串 再次是perl的操作符,也和其他語言一樣,包括 1 算術操作符,如 負數 2 整數比較操作符,如 比較符,會返回3個值,0兩個值相等,1第乙個值大,1第二個值大 3 字串比較符 這個和php有...
機器學習 從0開始
by 香蕉麥樂迪 機器學習簡介 機器學習是許多演算法的統稱,其中包含最近幾年火熱的深度學習,還包括許多適用於各種不同場景的其他機器學習演算法 邏輯斯特回歸,svm,knn,adaboost,em,kmeans等等 這些演算法從誕生到現在都有了幾十年的歷史 深度學習指的是深度神經網路,其中用於處理影象...
openGLSL從0開始學習
首先,找了些優秀的學習 openglsl 雙緩衝 double buffer 機制 01 20getting 20started 03 20hello 20window opengl 三角形 01 20getting 20started 04 20hello 20 opengl shading la...