您好,登錄后才能下訂單哦!
在springboot中使用EHcache 如何實現文章瀏覽量的更新與緩存?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
問題描述
當我們需要統計文章的瀏覽量的時候,最常規的做法就是:
1.訪問文章鏈接www.abc.com/article/{id}
2.在控制層獲取Article實體
3.得到文章瀏覽量count并且count++
4.最后update實體Article。
這么做對沒有訪問量的網站來說很棒,如果網站訪問量很大,這么不停的讀寫數據庫,會對服務器造成很大的壓力。
解決思路
引入Ehcache,將文章的訪問量存在cache中,每點擊一次文章,將cache中的count加1.在有效的時間內訪問文章只是將cache中的數據+1,超過指定時間則進行一次數據庫更新。
解決方案
本文是在springboot整合ehcache的環境下驗證的。springboot版本1.5.2 。ehcache版本2.6.11。springboot整合ehcache的步驟很簡單,下面簡單提一下,在pom文件中引入ehcache依賴
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> </dependency>
在類路徑下存放ehcache.xml文件。
在application.yml中指定:
spring: cache: jcache: config: classpath:ehcache.xml
最后在啟動類標注@EnableCaching
引入緩存之后,接著我們的正題
在ehcache.xml文件中定義dayHits緩存
<cache name="dayHits" maxEntriesLocalHeap="500" eternal="true" overflowToDisk="true"> </cache>
表示保存當日點擊量的
在controller層定義緩存點擊量的方法
public Integer cacheCount(Long articleId){ Content content = contentRepository.findOne(articleId); Ehcache cache = cacheManager.getEhcache("dayHits"); Element element = cache.get(articleId+"_count"); Integer count = 0; if(element!=null){ count = (Integer) element.getValue(); }else{ count = content.getHits()== null?0:content.getHits(); } count++; cache.put(new Element(articleId+"_count",count)); cache.put(new Element(articleId+"_dayHitsDate",SystemUtils.getNowDate())); Long time = System.currentTimeMillis(); if(time > (viewArticleTime+ 300000)){ viewArticleTime = time; content.setHits(count); contentRepository.save(content); cache.removeAll(); } return count; }
3.在查看文章方法中進行調用。
@RequestMapping(value = "article/{id}",method = RequestMethod. GET) public String detail(@PathVariable Long id,ModelMap map){ Integer hits = cacheCount(id); }
4.其中局部變量的定義:
private static CacheManager cacheManager = CacheManager.newInstance(); private static Long viewArticleTime = System.currentTimeMillis();
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。