时间:2021-05-19
问题描述
当我们需要统计文章的浏览量的时候,最常规的做法就是:
1.访问文章链接/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 实现文章浏览量的缓存和超时更新,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本篇介绍了SpringBoot缓存(EhCache2.x篇),分享给大家,具体如下:SpringBoot缓存在springBoot中,通过@EnableCach
本次内容主要介绍基于Ehcache3.0来快速实现SpringBoot应用程序的数据缓存功能。在SpringBoot应用程序中,我们可以通过SpringCach
本次内容主要介绍基于Ehcache3.0来快速实现SpringBoot应用程序的数据缓存功能。在SpringBoot应用程序中,我们可以通过SpringCach
下面给大家介绍springboot整合ehcache实现支付超时限制的方法,具体内容如下所示:net.sf.ehcacheehcache-core2.6.11p
本文讲解SpringBoot与EhCache的整合。1EhCache简介EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernat