SpringCache
在啟動類上加EnableCaching注解
我們只要在Controller上寫一個SpringCache相應的注解
我們就能實現緩存了
簡化緩存操作代碼,提高我們的效率
我們默認是我們的spring做緩存
但我們還可以替換我們的緩存技術
例如
EhCache
Redis
來作為緩存技術
?
我們是通過這個接口,CacheManager接口來實現的
4個常用注解?
有三個注解
Cacheput
CacheEvict
CacheEnable
使用Cacheput注解
我們添加緩存時使用
我們在這個Controller中
注入了我們的CacheManager對象
我們在啟動類上加了EnableCaching注解
我們在新增操作上寫這個,然后value是這個緩存的名稱
?
可以存很多的緩存在一個value下
然后我們有個key,來作為表示
?#result
我們的key可以通過spring內置語言來寫,#result,就是我們當前方法的返回值
#root
可以獲取到當前的這個方法
拿到參數值
我們可以和參數名對應,然后來拿到它的參數值
?存儲于內存
其實我們這個存儲是基于內存的,重啟服務后我們就沒有了
使用CacheEvict注解
我們刪除緩存的時候用
#root.args[0]
?獲得方法的第幾個參數
#p0
也可以用p0這種寫法,指定時第幾個參數
使用CacheEnable
這個用在我們的查詢方法上
查詢之前看看我們有沒有
存入空緩存
這個很吊,如果我們過來,然后我們查詢數據庫為空
condition
condition是滿足什么條件的時候,我們才緩存
?使用Spring內置語言的小問題
其實我們這里是不能使用Result的
Cacheable()里面的condition能使用的內置對象只有root,和一些參數(這個參數有使用限制)
我們使用condition的時候,我們Spring內置對象不能使用返回結果#result
所以我們可以使用unless,這個和condition相反
我們就可以使用#result了
技術換型,使用Redis
首先要引入我們的依賴
Spring-boot-starter-cache依賴
配置yml文件
設置緩存有效期
我們可以直接在配置文件中,配置time-tolive來設置這個緩存的有效期
我們這樣就把我們底層緩存的產品換成了Redis
SpringTask
SpringTask是什么
springtask是spring框架的一個定時任務
是spring提供的任務調度工具,按照約定的時間自動執行某個代碼邏輯
作用:定時自動執行某段java代碼
例如鬧鐘
應用場景
信用卡提醒還貸
花唄提醒還款
火車票售票系統處理未支付訂單
紀念日發送通知
Cron表達式
我們的springtask要寫我們的cron表達式
定時任務觸發
什么是Cron表達式
?
通常
周和日是很難同時確定的,所以我們這兩個
如果另一個確定了另一個就填寫?
但還是有問題,例如我們想要2月份的最后一天
是28還是29?
我們直接寫的話肯定不好,會出錯的
但是為了描述這種具體的細節呢,我們會有一些特殊的字符
我們沒必要去手寫我們的cron表達式,我們有cron表達式自動生成的網站
入門案例
添加EnableScheduling注解
在啟動類上添加我們的EnableScheduling注解,開啟我們的任務調度
、
我們的定時任務類上要加我們的Componet注解
這樣我們才能成功使用Shceduled注解(寫我們的Cron表達式)
然后定義我們的方法,我們的方法是void類,是沒有返回值的
需求分析(經典使用)
我們一分鐘檢查一次,看看是否有超時訂單
我們的訂單不可能一直時派送狀態
過了一定的時間我們要處理一下這個狀態
?
我們寫sql語句,查出超時15分鐘的訂單,然后把訂單狀態設置成已經取消
plusMinute方法
LocalDateTime有個plusMinute方法,可以加減時間
為了防止日志同時輸出,控制臺很難觀察
?修改程序啟動時,我們的定時任務的啟動時間
所以我們一個從1秒開始,5秒觸發一次
一個從0秒開始,5秒觸發一次