使用@cacheable時,該方法支援快取,有兩種key的生成方法
@cacheable(value = 「getuser」,keygenerator = 「cachekeygenerator」),
這個是使用redisconfiguration中宣告的方法cachekeygenerator,
會根據自己實現的策略生成乙個key,本專案中使用的是,根據方法名和引數實現(com.example.demo.service.userservicegetuserlinjiayong12)
@cacheable(value = 「getuser」,key= 「#username」) 通過引數key來實現(linjiayong12),傳入引數設定key,利用#,如傳入的引數是user user物件,可以通過key= 「#getusername」,混合設定,傳入多個引數可以組合使用@cacheable(value = 「getuser」,key= 「#username+#username」)
參考:
@cacheable(value = "getuser",key= "#username")
public user getuser(string username)
對於使用@cacheable標註的方法,spring在每次執行前都會檢查cache中是否存在相同key的快取元素,如果存在就不再執行該方法,而是直接從快取中獲取結果進行返回,否則才會執行並將返回結果存入指定的快取中。
在使用快取操作時,需要考慮到資料庫和快取一致性問題。crud (create 建立,retrieve 讀取,update 更新,delete 刪除) 操作中,除了 查詢r操作,其他三個發生的時候都可能會造成快取結果和資料庫不一致。為了保證快取資料的一致性,在進行 cud 操作的時候需要對可能影響到的快取進行更新或者清除。
在執行更新或者插入操作時,可以通過該cacheput註解,將呼叫結果放入快取中。保持資料庫和快取一致性。
在@cacheput註解時需要注意使用的是,keygenerator和key,在使用keygenerator時,
生成的key需要與@cacheable生成的key是一致的,否則再做cu操作時,不會更新@cacheable的快取。
@cacheput(value = "getuser",key = "#username")
// @cacheput(value = "getuser",keygenerator = "cachekeygenerator")
public user updateuser(string username)
@cacheput宣告乙個方法支援快取功能。與@cacheable不同的是使用@cacheput標註的方法在執行前不會去檢查快取中是否存在之前執行過的結果,而是每次都會執行該方法,並將執行結果以存入快取中。
在進行刪除操作時,需要刪除快取中的資料。
可以通過指定條件刪除快取中的的資料
可以刪除指定快取中的所有資料
@cacheevict(value="getuser",key = "#user.username")// 根據key清空getuser 快取
//@cacheevict(value="getuser",allentries=true)// getuser 快取
public
void
deluser( user user)
@cachevict 的作用 主要針對方法配置,能夠根據一定的條件對快取進行清空
在上述的幾個註解中,都可以傳入引數 condition
condition為 快取的條件
可以為空
使用 spel 編寫
返回 true 或者 false
只有為 true 才進行快取
例子@cacheable(value=」getuser」,condition=」#username.length() <=4」) 只有長度小於才進行快取
spring redis做快取使用
redis 是目前業界使用最廣泛的記憶體資料儲存。相比 memcached,redis 支援更豐富的資料結構,例如 hashes,lists,sets 等,同時支援資料持久化。除此之外,redis 還提供一些類資料庫的特性,比如事務,ha,主從庫。可以說 redis 兼具了快取系統和資料庫的一些特性...
ios NSUserDefaults使用注意事項
nsuserdefaults適合儲存輕量級的資料,他不僅可以儲存基本資料型別,還可以儲存nsnumber integer float double nsstring,nsdate,nsarray,nsdictionary,bool型別。nsuserdefaults standarduserdefau...
HttpURLConnection使用注意事項
先上簡單 第一種 urlcon.setconnecttimeout 10000 必須設定,不設定網路異常情況會卡死在connect中 urlcon.setreadtimeout 10000 urlcon.connect in new bufferedinputstream url.openstrea...