Web项目使用缓冲技术提高应用的稳定性及性能

生活中熟悉的天气预报信息为我们提供了及时的天气信息,给人们带来了很多的便利;从天气数据分析出来到人们看到这之间进行了大量的处理,一个网站显示的天气信息,需要访问服务器进行接口调用才能获取数据;再比如销售数据报表,报表的生成需要数据库花大量的时间进行计算;在Jsp中加入过多的类似这样复杂的信息会导致应用服务器、数据库服务器负荷过重,严重影响性能,甚至导致用户无法正常使用;好在JSP代码块缓冲技术为开发者提供解决方案。

网络配图 虽然JSP能够在标记库内封装和运行复杂的Java代码,使得JSP页面文件更容易维护,使得非专业开发人员使用JSP页面文件更加方便;现在已经有很多开放源代码的产品,但这些产品实现的功能比较简单,不能满足我们需求。方法总比困难多,OSCache标记库,为我们提供的新的思路。 OSCache标记库是由OpenSymphony设计的,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面内实现快速内存缓冲的功能;它不仅为所有用户缓冲现有JSP代码块,而且能够以用户为单位进行缓冲,OSCache还包含了一些提可伸缩性的高级特性,比如:缓冲到磁盘,可编程的缓冲刷新,异常控制等技术实现。 下面了解一下OSCache的工作过程,我们以一个团购网站为例进行说明,网站包括团购交易管理页面、团购类型导航条、各个商家团购数据显示等功能。

网络配图 1、管理功能需要监控交易的情况,数据库服务器需要进行分析计算才能出这样一个数据,没必要进行实时计算,需要间隔一定时间,为了避免管理员每次访问时都重新生成数据;为了实现这一点,我们可以将整个页面封装到一个应用级的缓冲标记之内,这个缓冲标记每隔1小时刷新一次。 代码示例: <%@ taglib uri="cachetags" prefix="cache" %> <cache:cache> .... 交易报表数据.... </cache:cache> 现在管理页面已经实现缓冲了,cache标记的默认缓冲时间是1小时;如果管理员在页面生成后的一个小时之内再次访问同一页面,他看到的将是以前缓存的页面,不需要由数据库服务器再次生成这个报表。 2、用户要求在左边导航条的下方显示购物车内容,显示出用户所购买商品的数量和商品价格。 我们利用会话级的缓冲技术实现这个功能功能; 代码示例: <cache:cache key="navbar" scope="session" time="500"> <% //获取及显示当前的商品价格信息 %> </cache:cache> OSCache库提供的flush标记能够刷新缓冲内容,代码如下: <cache:flush key="navbar" scope="session" /> 当用户下次访问它时,navbar缓冲块将被刷新。 3、商家团购数据显示,我们根据不同类型进行分别缓冲,而且各种类型的缓冲时间完全符合它们各自的信息变化频繁程度。 代码示例: <cache:cache time="600"> <% //查询数据库得到商家销售情况 int auctionCount = .... %> 本网站销售了商品<%=auctionCount%>个! </cache> 今天只是对OSCache有了一个简单的介绍,后续会对它的详细用法进行一一学习;我们只要知道它能帮开发者实现有更高性能的网站;我们能够用它解决一些影响网站响应时间的问题,比如访问量高峰期、数据库服务器负荷过重等。

网络配图 “条条道路通罗马”实现Web缓存不只有OSCache,我们需要根据自己的实际情况决定选择什么样的技术来实现;你的什么技术实现缓存,可以分享出来,大家一起学习哦。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

老桂.net core系列课程

29250
来自专栏Guangdong Qi

iOS APP版本构建版本无效

26530
来自专栏喔家ArchiSelf

老曹眼中的开发学习环境

“工其事必先利其器”,对于一个全栈而言,一个与自己匹配的开发和学习环境,能够极大地提高个人的工作效率,很多时候都可以做到事半而功倍。环境也是一个外延很广的概念,...

11570
来自专栏程序员宝库

现代后端开发者必备技能——2018 版

今天的Web开发与几年前完全不同,有很多不同的东西可以很容易地阻止任何人进入Web开发。这是我们决定制作这些循序渐进的视觉指南的原因之一,这些指南展示了更大的图...

12830
来自专栏美团技术团队

前端工程化开发方案app-proto

什么是前端工程化?根据具体的业务特点,将前端的开发流程、技术、工具、经验等规范化、标准化就是前端工程化。它的目的是让前端开发能够“自成体系”,最大程度地提高前端...

66430
来自专栏ImportSource

微服务与API 网关(上): 为什么需要API网关?

本文是来自于Macro在一次大会上的一个分享。 本系列共有两个部分,主要关注我们如何以及为什么要在我们的微服务应用中部署API 网关。第二部分主要关注我们如何把...

87160
来自专栏沈唁志

GitHub代码托管平台提交代码时emoji表情的使用

23640
来自专栏腾讯云技术沙龙

刘敏洁:API网关和SCF深度结合应用

这次我们主要介绍面向于API网关和SCF深度结合应用,API网关与SCF结合可以形成比较完整的Serverless方案。

46330
来自专栏杨建荣的学习笔记

脚本改进的一点体会(r12笔记第60天)

一直以来我们想要推进内部的自动化系统,但是总是会遇到各种各样具体的问题,有时候我们准备好了,但是总是会有一些因素的干扰,再加上工作时间的安排,有些事情就一...

36090
来自专栏吴伟祥

Linux kernel Overview 原

Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。

12360

扫码关注云+社区

领取腾讯云代金券