最近新寫(xiě)了一個(gè)有關(guān)長(zhǎng)鏈接轉(zhuǎn)化成短鏈接的小項(xiàng)目,用到redis侧馅,在此記錄一下redis學(xué)習(xí)過(guò)程仿畸。
1食棕、分析需求:長(zhǎng)短鏈接相互轉(zhuǎn)化中,長(zhǎng)轉(zhuǎn)短用的是md5算法加上base62編碼错沽,轉(zhuǎn)成短鏈接之后存儲(chǔ)到某個(gè)地方簿晓,在短轉(zhuǎn)長(zhǎng)的時(shí)候,由于md5是不可逆的千埃,實(shí)際上是去查詢(xún)之前存起來(lái)的信息憔儿,具體實(shí)現(xiàn)方法可以參照《長(zhǎng)鏈接轉(zhuǎn)化為短鏈接》(待維護(hù),尚未發(fā)布)放可,這樣的話(huà)谒臼,對(duì)于一些時(shí)效長(zhǎng)的 url 我們可以把它存在數(shù)據(jù)庫(kù)中,對(duì)于一些時(shí)效比較短的 url 就可以把它存在緩存中(劃重點(diǎn)耀里,用到redis)蜈缤,等到時(shí)間結(jié)束自動(dòng)刪除
2、一個(gè)相當(dāng)方便簡(jiǎn)單的redis使用demo
2.1备韧、首先引入redis依賴(lài)
```
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
```
2.2劫樟、在項(xiàng)目啟動(dòng)類(lèi)前添加注解 @EnableCaching 開(kāi)啟緩存
2.3、在application.yml中添加配置
```
redis:
host: 123.123.23.123
port:1234
? database:4
? password: 123456
```
2.4、到這里是分水嶺叠艳,我們可以選擇性地新建一個(gè)RedisConfig類(lèi)奶陈,然后可以在代碼中使用緩存,先貼一段代碼
```
@Service
@CacheConfig(cacheNames ="cacheName")
public class CacheServer {
@Cacheable(cacheManager ="CacheManagerTime5m", key ="#surl")
public String cacheTest(String surl, String lurl)throws GlobalException {
return lurl;
}
}
```
這段代碼的意思是:首先附较,這是一個(gè)server吃粒,允許了緩存(在class前添加CacheConfig注解),里面有一個(gè)方法叫做cacheTest拒课,在執(zhí)行這個(gè)方法的時(shí)候要用到緩存徐勃,這個(gè)緩存將在5分鐘后失效,這是一個(gè)傳入 surl早像、lurl 返回 lurl 的方法僻肖,當(dāng)?shù)谝淮握{(diào)用這個(gè)方法的時(shí)候,傳入 surl 和 lurl 返回了 lurl卢鹦,這個(gè)surl和返回的lurl將組成一個(gè) {surl:lurl} 存到緩存中(在注解中key設(shè)置的surl為key)臀脏,那么在第二次調(diào)用這個(gè)函數(shù)的時(shí)候,比如我只傳了一個(gè) surl 沒(méi)有傳 lurl 那么首先走的是緩存冀自,按照surl的索引查出揉稚,啊~我在不久之前已經(jīng)存了一個(gè) {surl: lurl} 了那么就會(huì)把緩存里的 lurl 取出來(lái),如果緩存里沒(méi)有找到熬粗,那么就會(huì)繼續(xù)進(jìn)函數(shù)搀玖。
3、一個(gè)需要注意的地方
有時(shí)候緩存并沒(méi)有生效驻呐,那是因?yàn)?——》(劃重點(diǎn))
一個(gè)方法A調(diào)同一個(gè)類(lèi)里的另一個(gè)有緩存注解的方法B灌诅,這樣是不走緩存的!1┦稀延塑!
原因從網(wǎng)上看,答渔,據(jù)說(shuō)是? Spring 使用@Cacheable添加緩存是基于面向切面的思想做的,實(shí)際上就是使用Java動(dòng)態(tài)代理侥涵,創(chuàng)建實(shí)例的時(shí)候注入的是代理對(duì)象沼撕,在代理對(duì)象里調(diào)用實(shí)際的對(duì)象,這樣就可以在實(shí)際的方法執(zhí)行前芜飘,處理一下緩存的邏輯:沒(méi)有找到緩存就往下執(zhí)行务豺,執(zhí)行完把結(jié)果加入到緩存中;找到緩存則直接返回緩存的結(jié)果嗦明,不調(diào)用執(zhí)行實(shí)際的方法笼沥。