從 0 學習 Spring 快取資料

2021-10-11 21:28:09 字數 2877 閱讀 2407

昨天在開發業務時,打算加入快取層來提高系統響應速度。查詢了一些資料,發現 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...