程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> springboot+EHcache 實現文章浏覽量的緩存和超時更新

springboot+EHcache 實現文章浏覽量的緩存和超時更新

編輯:關於JAVA

springboot+EHcache 實現文章浏覽量的緩存和超時更新。本站提示廣大學習愛好者:(springboot+EHcache 實現文章浏覽量的緩存和超時更新)文章只能為提供參考,不一定能成為您想要的結果。以下是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();

5.保存訪問看看效果吧。

以上所述是小編給大家介紹的springboot+EHcache 實現文章浏覽量的緩存和超時更新,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對網站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved