問題描述
當我們需要統計文章的瀏覽量的時候,最常規的做法就是:
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依賴
1
2
3
4
5
|
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version> 2.6 . 11 </version> </dependency> |
在類路徑下存放ehcache.xml文件。
在application.yml中指定:
1
2
3
4
|
spring: cache: jcache: config: classpath:ehcache.xml |
最后在啟動類標注@EnableCaching
引入緩存之后,接著我們的正題
在ehcache.xml文件中定義dayHits緩存
1
2
|
<cache name= "dayHits" maxEntriesLocalHeap= "500" eternal= "true" overflowToDisk= "true" > </cache> |
表示保存當日點擊量的
在controller層定義緩存點擊量的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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.在查看文章方法中進行調用。
1
2
3
4
|
@RequestMapping (value = "article/{id}" ,method = RequestMethod. GET) public String detail( @PathVariable Long id,ModelMap map){ Integer hits = cacheCount(id); } |
4.其中局部變量的定義:
1
2
|
private static CacheManager cacheManager = CacheManager.newInstance(); private static Long viewArticleTime = System.currentTimeMillis(); |
5.保存訪問看看效果吧。
以上所述是小編給大家介紹的springboot+EHcache 實現文章瀏覽量的緩存和超時更新,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://blog.csdn.net/qq_19408473/article/details/70850420