• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > springboot+EHcache 实现文章浏览量的缓存和超时更新

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

作者:吃米不就菜 字体:[增加 减小] 来源:互联网 时间:2017-05-28

吃米不就菜 通过本文主要向大家介绍了springboot ehcache,ehcache缓存,ehcache分布式缓存,ehcache缓存原理,ehcache二级缓存等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

问题描述

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

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>
</div>

在类路径下存放ehcache.xml文件。

在application.yml中指定:

spring: 
 cache:
  jcache:
   config: classpath:ehcache.xml
</div>

最后在启动类标注@EnableCaching

引入缓存之后,接着我们的正题

在ehcache.xml文件中定义dayHits缓存

<cache name="dayHits" maxEntriesLocalHeap="500" eternal="true" overflowToDisk="true"> 
</cache>
</div>

表示保存当日点击量的

在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;
  }
</div>

3.在查看文章方法中进行调用。

 @RequestMapping(value = "article/{id}",method = RequestMethod. GET)
  public String detail(@PathVariable Long id,ModelMap map){
  Integer hits = cacheCount(id);
  }
</div>

4.其中局部变量的定义:

 private static CacheManager cacheManager = CacheManager.newInstance();
  private static Long viewArticleTime = System.currentTimeMillis();
</div>

5.保存访问看看效果吧。

以上所述是小编给大家介绍的springboot+EHcache 实现文章浏览量的缓存和超时更新,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-05-28java list 比较详解及实例
  • 2017-05-28Java程序员新手老手常用的八大开发工具
  • 2017-05-28Struts2之Validator验证框架的详细介绍
  • 2017-05-28java设计模式—静态代理模式(聚合与继承方式对比)
  • 2017-05-28老生常谈Java异常处理和设计(推荐)
  • 2017-05-28spring boot 图片上传与显示功能实例详解
  • 2017-05-28MyBatis快速入门之环境搭建和单表映射
  • 2017-05-28java.net.MalformedURLException异常的解决方法
  • 2017-05-28servlet实现用户登录小程序
  • 2017-05-28java 根据经纬度获取地址实现代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java实现留言板功能实例
    • 详解用Kotlin写一个基于Spring Boot的RESTful服务
    • javaweb分页原理详解
    • SpringBoot Mybatis Plus公共字段自动填充功能
    • Java中的拦截器、过滤器、监听器用法详解
    • 浅谈对java中锁的理解
    • 基于Java中的StringTokenizer类详解(推荐)
    • Java 中IO流字符流详解及实例
    • Java微信二次开发(一) Java微信请求验证功能
    • Spring Boot 启动加载数据 CommandLineRunner的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有