Java实现简单的缓存机制原理

Python011

Java实现简单的缓存机制原理,第1张

package qinbo hui

/*

设计思想来自-回钦波(qq: )

*/

public class CacheConfModel implements java io Serializable{

private long beginTime

private boolean isForever = false

private int durableTime

public long getBeginTime() {

return beginTime

}

public void setBeginTime(long beginTime) {

this beginTime = beginTime

}

public boolean isForever() {

return isForever

}

public void setForever(boolean isForever) {

this isForever = isForever

}

public int getDurableTime() {

return durableTime

}

public void setDurableTime(int durableTime) {

this durableTime = durableTime

}

}

package qinbo hui

import java util *

import test CacheConfModel

/*

设计思想来自-回钦波(qq: )

*/

public class CacheMgr {

private static Map cacheMap = new HashMap()

private static Map cacheConfMap = new HashMap()

private CacheMgr(){

}

private static CacheMgr cm = null

public static CacheMgr getInstance(){

if(cm==null){

cm = new CacheMgr()

Thread t = new ClearCache()

t start()

}

return cm

}

/**

* 增加缓存

* @param key

* @param value

* @param ccm 缓存对象

* @return

*/

public  boolean addCache(Object key Object value CacheConfModel ccm){

boolean flag = false

cacheMap put(key value)

cacheConfMap put(key ccm)

System out println( now addcache== +cacheMap size())

return true

}

/**

* 删除缓存

* @param key

* @return

*/

public  boolean removeCache(Object key){

cacheMap remove(key)

cacheConfMap remove(key)

System out println( now removeCache== +cacheMap size())

return true

}

/**

* 清除缓存的类

* @author wanglj

* 继承Thread线程类

*/

private static class ClearCache extends Thread{

public void run(){

while(true){

Set tempSet = new HashSet()

Set set = cacheConfMap keySet()

Iterator it = erator()

while(it hasNext()){

Object key = it next()

CacheConfModel ccm = (CacheConfModel)cacheConfMap get(key)

//比较是否需要清除

if(!ccm isForever()){

if((new Date() getTime() ccm getBeginTime())>= ccm getDurableTime()* * ){

//可以清除 先记录下来

tempSet add(key)

}

}

}

//真正清除

Iterator tempIt = erator()

while(tempIt hasNext()){

Object key = tempIt next()

cacheMap remove(key)

cacheConfMap remove(key)

}

System out println( now thread================>+cacheMap size())

//休息

try {

Thread sleep( * L)

} catch (InterruptedException e) {

// TODO Auto generated catch block

e printStackTrace()

}

}

}

}

lishixinzhi/Article/program/Java/hx/201311/25737

为了能够给用户一个良好的上网体验,大部分的网页和浏览器都配置了预加载以及缓存功能。

今天甘肃电脑培训http://www.kmbdqn.cn/就通过案例分析来了解一下,关于web缓存的基本定义与类型介绍。

Web缓存是什么?为什么要使用缓存?Web缓存处于服务器(也称为源服务器)和客户端之间,监视请求并保存响应的副本,比如HTML页面,图片和文件等(统称为表述)。

如果之后有对同一个URL的新请求,它会使用自己保存的内容来响应,而不是再次请求源服务器来获取内容。

使用Web缓存主要有下面两个原因:减少延迟——因为响应请求的内容来自缓存(距客户端较近)而不是源服务器,它会花较少的时间来获得表述并将他们呈现出来。

这使得Web看起来具有良好的响应速度。

减少网络传输——由于复用了表述,它可以减少客户端使用的带宽总量。

如果客户需要为流量付费,这就意味着省钱。

缓存会降低对带宽的要求,也降低处理难度。

Web缓存的种类浏览器缓存你在查看现代Web浏览器(比如IE、Safari或Mazilla)选项的时候,可能会看到“缓存”设置。

这个选项让你配置一部分硬盘空间来保存你看过的表述。

浏览器缓存的规则相当简单。

它通常会在一次会话(即当前浏览器中一次调用)中检查表述是否新。

这个缓存在用户使用“回退”按钮或者点击一个浏览过的链接时会特别有用。

而且,如果你在网站的各个页面中浏览相同的图片,他们几乎能马上从缓存中加载出来。

代理缓存Web代理缓存的工作原理相同,但规模更大。

代理以同样的方式为成百上千的用户服务大公司和ISP常常把代码缓存建立在防火墙之上,也可能是以独立设备的形式存在(也称为中间设备)。

代理缓存即不是客户端的一部分,也不是服务器的一部分,而是在网络之外,必须以某种方式把请求路由过去。

其中一种方式是手工修改浏览器代理设备,指定要使用的代码另一种方式是拦截。

拦截式代理会根据其自身的基础网络重定向Web请求,不需要在客户端配置,客户端甚至不知道它们的存在。

代理缓存是一种共享缓存,通常不只是一个用户,而是大量用户在使用代理缓存。

正因为如此,他们特别擅长降低延迟和网络传输量。

这是因为众人都需要的表述会被多次重复使用。

网关缓存网关缓存又名“反向代理缓存”或“替代缓存”。

网关缓存也是一种中介,它他们不是由网络管理员部署以节约带宽,而是由网站管理员自己部署,使其站点更具伸缩性、可靠性以及拥有更好的性能。

很多方法都可以把请求路由到网关缓存,但常见的方法是使用负载均衡器让他们对于客户来说,看起来就跟源服务器一样。

内容分发网络(CDN)在整个Internet(或它的一部分)中分发网关缓存,并将其出售给对此感兴趣的网站。

Web缓存对我有坏处么?我为什么要帮助它们?Web缓存是互联网中误解深的技术之一。

因为代理缓存可以隐藏使用网站的用户,所以网站管理员特别害怕失去对他们的站点的控制,这会使得他们很难去知道是谁在使用他们的站点。

然而不幸的是,即使没有Web缓存,网络上也有非常多的因素可以保证管理员精确的知道一个用户如何使用他们的站点。

如果这是你非常关注的问题的话,这篇手册将会指导你如何在站点没有不友好的缓存机制的情况下获取你需要的统计信息。

java缓存技术

一、什么是缓存

1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问

2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache

二、缓存的分类

1、基于web应用的系统架构图

2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存

操作系统磁盘缓存->减少磁盘机械操作

数据库缓存->减少文件系统I/O

应用程序缓存->减少对数据库的查询

Web服务器缓存->减少应用服务器请求

客户端浏览器缓存->减少对网站的访问。