Servlet数据缓存
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
缓存是提高数据访问能力,降低服务器压力的一种必要的方式,今天我要说的数据缓存方式有两种,1-->session对单个数据访问接口页面的数据进行缓存,2-->单例模式对整个servlet页面一个公用的数据缓存。 3-->cookie本地缓存
一、什么是缓存
什么是缓存,为了让看者更好的理解,我这里就用自己的理解来举例说明,例如当前我们正在做一个商城类的app,app首页要加载显示很多商品,数据量比较大,像这样的数据接口最适合给其加一个缓存了,因为这样的数据接口反馈的数据都是公用的(所有人都是用它,不会根据不同用户判断,加载不同的数据) 。在我们没有增加缓存之前,每当用户在app上点击对应的调用接口页面之后,servlet都会去访问数据库,从数据库中取得数据。但是当我们加了缓存后,只要有一个用户访问了这个接口数据库之后,我们就会将这份数据保存到缓存中,那么下次只要有用户调用该接口,servlet就会从缓存中读取保存的数据,然后反馈给用户。
二、session
session对点缓存,它保存的缓存,无法在其他页面进行访问,数据保存在服务器内存中,下面我来代码。
//查询出游戏表当前所有数据
else if(Type.equals("3"))
{ HttpSession session = request.getSession();
// 判断session中 allGamesDataList的值是否为空,由于下面的代码对session设置了过期时间,所以只要过期了,servlet
//这个值也会自动设置为空
if (session.getAttribute("allGamesDataList") != null) { returnJsonObject=(JSONObject) session.getAttribute("allGamesDataList");
response.getWriter().println(returnJsonObject.toString());
return;
} else{ } mysqlParameter=new String[]{"account"};
returnData=MySqlHepler.executeQueryT("select __ from __ where __!=?", mysqlParameter); try {
returnJsonObject =new JSONObject();
returnJsonArray=ResultToJsonTool.resultSetToJsonArry(returnData);
returnJsonObject.put("Rows", returnJsonArray);
returnJsonObject.put("GetType", "0");
returnJsonObject.put("Success", "1");
//缓存5分钟过期,5分钟内有人调用该接口,会直接从缓存中获得数据,5分钟后必须再访问一次数据库获得数据并保存到缓存中
session.setMaxInactiveInterval(5 * 60);
session.setAttribute("allGamesDataList", returnJsonObject);
response.getWriter().println(returnJsonObject.toString()); } catch (SQLException | JSONException e1) { e1.printStackTrace();
} }
二、单例模式
这里用单例来做缓存,是因为session保存的缓存无法跨页访问,所以就想到了单例,当然肯定还有其它更好的方法。我这里使用单例保存的是用户的token,当用户登录时生成的一个随机token反馈给用户,然后已用户的登录id为key,将toke保存在servlet的单例中, 这里将token保存到缓存中,是因为token在所有的数据加密验证页面中都会使用到, 如果不保存那么所有加密接口请求时都会去数据库中查询一次token,这样肯定就影响效率了,遇到这样的数据, 也必须做缓存的。
单例代码
package Helper;
import org.json.JSONObject;
public class ShareSingleton
{
public JSONObject UsrTokenDictionary;
public static ShareSingleton instance=null;
public static ShareSingleton getInstance(){
if(instance == null){
instance = new ShareSingleton();
instance.UsrTokenDictionary=new JSONObject();
return instance; }else{
return instance;
}
} public void VerifyTokenForInterface(String RequestToken)
{ }
}
保存token到单例中
//使用uuid生成用户唯一token
ecryptToKenUUID = UUID.randomUUID().toString();
mysqlParameter=new String[]{ecryptToKenUUID,LoginId};
if( MySqlHepler.executeUpdate("update _ set _=? where _=?", mysqlParameter)>0)
{ UserInfoObject =array.getJSONObject(0);
UserInfoObject.put("encryptToken",ecryptToKenUUID);
/*AddicationDictionary:这里的取值:为用户需要保存到app defaultusr里面的*/
returnJsonObject.put("AddicationDictionary", UserInfoObject);
returnJsonObject.put("GetType", "1");
returnJsonObject.put("Success", "1"); //再servlet返回操作结果前将 生成的token保存到单例模式中
ShareSingleton.getInstance().UsrTokenDictionary.put(LoginId,ecryptToKenUUID); response.getWriter().println(returnJsonObject.toString());
}
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。

Servlet数据缓存的更多相关文章
- Spring Boot2 系列教程 (十一) | 整合数据缓存 Cache
如题,今天介绍 SpringBoot 的数据缓存.做过开发的都知道程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的,当需要重复获取相同数据时,一次又一次的请求数据库或者远程服务,导致大量时间 ...
- 面localStorage用作数据缓存的简易封装
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
- jQuery数据缓存方案详解:$.data()的使用
我们经常使用隐藏控件或者是js全局变量来临时存储数据,全局变量容易导致命名污染,隐藏控件导致经常读写dom浪费性能.jQuery提供了自己的数据缓存方案,能够达到和隐藏控件.全局变量相同的效果,但是j ...
- jQuery 2.0.3 源码分析 数据缓存
历史背景: jQuery从1.2.3版本引入数据缓存系统,主要的原因就是早期的事件系统 Dean Edwards 的 ddEvent.js代码 带来的问题: 没有一个系统的缓存机制,它把事件的回调都放 ...
- SQL Server 数据缓存
引言 SQL Server通过一些工具来监控数据,其中之一的方法就是动态管理管理视图(DMV). 常规动态服务器管理对象 dm_db_*:数据库和数据库对象 dm_exec_*:执行用户代码和关联的连 ...
- iOS开发网络篇—数据缓存
iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
- 微信小程序-数据缓存
每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearSt ...
- Memcached 数据缓存系统
Memcached 数据缓存系统 常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html Memcached是一个自由开源的,高性能,分布式内存对 ...
随机推荐
- JavaScript基础知识总结(一)
当我们接触一种新语言时,首先要先了解它,对它有一定的理论认识. 那么,什么是JavaScript呢? JavaScript是一种脚本语言,由web浏览器进行解释和执行.它包括ECMAScript.DO ...
- Atiti.大企业病与小企业病 大公司病与小公司病
Atiti.大企业病与小企业病 大公司病与小公司病 1. 大企业病,一般会符合机构臃肿 .多重领导 .人才流失的特点.1 2. 大企业病避免方法1 3. 小企业病 1 3.1.1. 表现1 4. 如何 ...
- Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...
- JQuery插件定义
一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...
- 自定义Sublime Text的图标
sublime text很赞,windows上最接近mac逼格的轻量编辑器,对于我这样比较喜欢格调的人来说,简直不二之选啊. 美中不足的是,看久了觉得它的图标似乎不是很上心.现在都流行扁平化了而它还停 ...
- SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
今天在创建数据库的时候突然发现,xp_cmdshell的存储过程不能用了,网上一搜,发现大部分都是只关闭安全配置,然后就有了下文 代码:具体的看注释,值得一提的是==>reconfigure w ...
- SQL Saturday 北京将于7月25日举办线下活动,欢迎参加
地点:北京微软(中国)有限公司[望京利星行],三层308室 报名地址:https://onedrive.live.com/redir?page=survey&resid=f ...
- JavaScript 中对变量和函数声明的“提前”
变量声明“被提前” JavaScript 的语法和 C .Java.C# 类似,统称为 C 类语法.有过 C 或 Java 编程经验的同学应该对“先声明.后使用”的规则很熟悉,如果使用未经声明的变量或 ...
- 前端学HTTP之代理
前面的话 Web代理(proxy)服务器是网络的中间实体,位于客户端和服务器之间,扮演“中间人”的角色,在各端点之间来回传送HTTP报文.本文将介绍HTTP代理服务器相关内容 中间实体 Web上的代理 ...
- Android之常见问题集锦Ⅰ
Android中如何在ViewPager中使动态创建的ImageView铺满屏幕 最近在做东西的时候,有一个要求,就是把用于在ViewPager里面轮播的图片铺满屏幕,但是中间遇到的问题是,Imag ...