spring針對各種緩存實現,抽象出了cachemanager接口,用戶使用該接口處理緩存,而無需關心底層實現。并且也可以方便的更改緩存的具體實現,而不用修改業務代碼。下面對于在springboot中使用緩存做一簡單介紹:
1、添加依賴
1
2
3
4
|
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-cache</artifactid> </dependency> |
2、在配置類里開啟緩存,如下圖所示:
3、在需要使用緩存的方法上加上注解,如下:
1
2
3
4
5
6
7
8
|
@override //@cacheput 該注解會將方法的返回值緩存起來,其中緩存名字是 people,數據的key是person的id @cacheput (value = "people" , key = "#person.id" ) public person save(person person) { person p = personrepository.save(person); system.out.println( "為id、key為:" +p.getid()+ "數據做了緩存" ); return p; } |
1
2
3
4
5
6
7
|
@override //@cacheevict 該注解會刪除people緩存中key為id 的數據 @cacheevict (value = "people" , key = "#id" ) public void remove( long id) { system.out.println( "刪除了id、key為" +id+ "的數據緩存" ); //這里不做實際刪除操作 } |
1
2
3
4
5
6
7
8
9
|
@override //@cacheable 該注解會在方法執行時,判斷緩存people中key為#person.id 的緩存是否存在,如果存在,則直接返回緩存中的數據。如果不存在,則會查數據庫,然后將返回結果緩存起來。 @cacheable (value = "people" , key = "#person.id" ) public person findone(person person) { person p = personrepository.findone(person.getid()); system.out.println( "為id、key為:" +p.getid()+ "數據做了緩存" ); return p; } |
以上幾部就完成了緩存,但是現在的緩存是默認的基于內存的,沒有實現持久化。下面以redis作為緩存的具體實現,如下:
4、添加依賴
1
2
3
4
|
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-redis</artifactid> </dependency> |
5、在配置文件里添加redis配置
1
2
|
redis.hostname=localhost redis.port= 6379 |
6、在spring容器中配置redis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@configuration public class redisconfig extends cachingconfigurersupport{ private static final logger logger = loggerfactory.getlogger(redisconfig. class ); @autowired private environment env; @bean public jedisconnectionfactory redisconnectionfactory() { jedisconnectionfactory redisconnectionfactory = new jedisconnectionfactory(); redisconnectionfactory.sethostname(env.getproperty( "redis.hostname" )); redisconnectionfactory.setport(integer.parseint(env.getproperty( "redis.port" ))); return redisconnectionfactory; } @bean public redistemplate<string, string> redistemplate(redisconnectionfactory cf) { redistemplate<string, string> redistemplate = new redistemplate<>(); redistemplate.setconnectionfactory(cf); return redistemplate; } @bean public cachemanager cachemanager(redistemplate<?, ?> redistemplate) { rediscachemanager cachemanager = new rediscachemanager(redistemplate); cachemanager.setdefaultexpiration( 600 ); return cachemanager; } } |
ok,完成了,其他什么都不用改,是不是很方便?
另外,要緩存的類必須序列化。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/luckyxl029/article/details/79420334