EhCache 是一個純Java的進程內緩存框架,具有快速、精干等特點,是Hibernate中默認的CacheProvider。
ehcache提供了多種緩存策略,主要分為內存和磁盤兩級,所以無需擔心容量問題。
spring-boot是一個快速的集成框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。
用戶登錄之后,幾乎之后展示任何頁面都需要顯示一下用戶信息。可以在用戶登錄成功之后將用戶信息進行緩存,之后直接取緩存數據即可。
寫在前面
對于SpringBoot而言,內置了屬于自己的緩存框架,即:
1
2
3
4
|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> |
如何使用該框架進行緩存,網上一大堆資料。但是絕大多數都是描述如何在service層進行緩存,之后從數據庫取數據的時候直接拿緩存數據,不再進行二次查詢了。 但是我目前的需求僅僅是緩存登錄用戶,下次直接用代碼取出來。而不是再調一次service方法!貌似搜到任何資料!可能大家都沒遇到過吧。
探索方案
在之前的項目中,曾經用到過EHcache,當然也有對應的EHCacheUtils方法。下面就說一下springboot和ehcache的整合。
真實操作之后,發現整合ehcache非常簡單,三步即可:
導入maven包
1
2
3
4
5
|
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version> 2.10 . 1 </version> </dependency> |
在啟動類開啟緩存機制
image.png
添加ehcache配置文件,直接在resources下面新建ehcache.xml文件即可。文件配置如下:
1
2
3
4
|
<?xml version= "1.0" encoding= "UTF-8" ?> <ehcache> <cache name= "objectCache" maxElementsInMemory= "1000" ></cache> </ehcache> |
使用緩存
此時,springboot已經為ehcacheManager生成了一個Bean。我們在自己需要的地方直接注入即可。下面是我的簡單utils文件和存數據取數據的地方,僅供參考。有不對的地方,歡迎指正。
util如下,只提供set和get方法:
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
|
public class EHCacheUtils { /** * 設置緩存對象 * @param cacheManager * @param key * @param object */ public static void setCache(CacheManager cacheManager,String key,Object object){ Cache cache = cacheManager.getCache( "objectCache" ); Element element = new Element(key,object); cache.put(element); } /** * 從緩存中取出對象 * @param cacheManager * @param key * @return */ public static Object getCache(CacheManager cacheManager,String key){ Object object = null ; Cache cache = cacheManager.getCache( "objectCache" ); if (cache.get(key)!= null && !cache.get(key).equals( "" )){ object = cache.get(key).getObjectValue(); } return object; } } |
存入緩存方法如下:
1
2
3
4
|
@Autowired private CacheManager cacheManager; //部分關鍵代碼 EHCacheUtils.setCache(cacheManager, "op" ,searchOP); |
取出緩存方法如下:
1
2
3
|
@Autowired private CacheManager cacheManager; Operator searchOP = (Operator) EHCacheUtils.getCache(cacheManager, "op" ); |
寫在最后
個人覺得,springboot提供的基于注解的方式進行緩存更加適合攔截器的方式去處理。對應指定的請求均去走設置了緩存機制的service方法,該sevice會根據實際情況去直接取緩存或者查詢數據庫。
總結
以上所述是小編給大家介紹的springboot整合EHCache的實踐方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://www.jianshu.com/p/05f3ede0b389