源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

springboot+EHcache 实现文章浏览量的缓存和超时更新

  • 时间:2020-10-17 04:58 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:springboot+EHcache 实现文章浏览量的缓存和超时更新
[b]问题描述[/b] 当我们需要统计文章的浏览量的时候,最常规的做法就是: 1.访问文章链接[url=http://www.abc.com/article/{id]www.abc.com/article/{id[/url]} 2.在控制层获取Article实体 3.得到文章浏览量count并且count++ 4.最后update实体Article。 这么做对没有访问量的网站来说很棒,如果网站访问量很大,这么不停的读写数据库,会对服务器造成很大的压力。 [b]解决思路[/b] 引入Ehcache,将文章的访问量存在cache中,每点击一次文章,将cache中的count加1.在有效的时间内访问文章只是将cache中的数据+1,超过指定时间则进行一次数据库更新。 [b]解决方案[/b] 本文是在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 实现文章浏览量的缓存和超时更新,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部