服务器之家

服务器之家 > 正文

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

时间:2020-09-20 14:19     来源/作者:吃米不就菜

问题描述

当我们需要统计文章的浏览量的时候,最常规的做法就是:

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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址 2020-08-12
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
返回顶部