文档库 最新最全的文档下载
当前位置:文档库 › 缓存说明

缓存说明

缓存说明
缓存说明

oscache 与 ehcache的比较

一.ehcache主要是对数据库访问的缓存,相同的查询语句只需查询一次数据库,

二. oscache 主要是对页面的缓存,可以整页或者指定网页某一部分缓存,同时

指定他的过期时间,这样在此时间段里面访问的数据都是一样的

一.ehcache主要是对数据库访问的缓存,相同的查询语句只需查询一次数据库,

从而提高了查询的速度,使用spring的AOP可以很容易实现这一功能.

https://www.wendangku.net/doc/fb14445003.html,/

ehcache.xml

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="300"

timeToLiveSeconds="600"

overflowToDisk="true"

/>

org.spring framework.cache.ehcache.EhCacheManagerFactoryBean

org.spring framework.cache.ehcache.EhCacheFactoryBean

org.spring framework.aop.support.RegexpMethodPointcutAdvisor

二. oscache 主要是对页面的缓存,可以整页或者指定网页某一部分缓存,同时

指定他的过期时间,这样在此时间段里面访问的数据都是一样的

1.log4j-1.

2.8.jar,oscache-2.

3.2.jar,commons-logging.jar,jgroups-all.jar

2.拷贝cach\etc\下的oscache.tld,oscache.properties 到WEB-INF\classes

3.web.xml

oscache/WEB-INF/classes / oscache.tld

Cache Filter

com.opensymphony.oscache.web.filter.Cache Filter

time

60

scope

session

Cache Filter

/*.jsp

https://www.wendangku.net/doc/fb14445003.html,/oscache/download.html下载Oscache的最新版本

可以使用内存、硬盘空间、同时使用内存和硬盘或者提供自己的其他资源(需要自己提供适配器)作为缓存区。

?使用内存作为缓存区将可以提供更好的性能

?使用硬盘作为缓存区可以在服务器重起后迅速恢复缓存内容

?同时使用内存和硬盘作为缓存区则可以减少对内存的占用

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。

https://www.wendangku.net/doc/fb14445003.html,/340746/68789

利用Spring的AOP来配置和管理你的二级缓存(EHCache)如果我们的项目中采用的是Spring+hibernate来构建的,在缓存方面,我们一定会首先想到Spring自带的EHCache缓存工具,在Sprin g中集成了目前比较流行的缓存策略EHCache,现在用的比较多的还有像OSCache,MemCached.这些应该是当前用的最多的缓存工具了。

在Spring+hibernate的这样的框架中,EHCache应该属于二级缓存了,我们知道在Hibernate中已经默认的使用了一级缓存,也就是在S ession中。二级缓存应该是SessionFactory的范围了。二级缓存默认不会起作用的,这就需要我们简单的配置一下就可以了。

在配置之前,我先说明一点,缓存从理论上来说是可以提高你网站系统的性能,但前提就是你要保证你有一个良好的架构设计。比如用Spring +Hibernate构建的系统,如果用单个服务器,用Spring自带的EHCac he来做二级缓存是再好不过了。如果你的系统是分布式的系统,有多台服务器,那么MemCached是最好的选择了,一般来说MemCached在做缓存这一块,要比EHCache和OSCache的性能要好点,但是并不是所有的网站用MemCached都能达到事半功倍的,它虽然是比较好,但它有一个前提,那就是你有多台服务器,是分布式的。这样用MemCached对系统的性能一定OK。因为Memcached是―分布式‖的内存对象缓存系统,那么就是说,那些不需要―分布‖的,不需要共享的,或者干脆规模小到只有一台服务器的应用,MemCached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源 .OSCache这个缓存机制的限制就比较少了。它和EHCache差不多。

在Spring+Hibernate中整合EHCache只需简单的三步。

第一步:配置缓存文件ehcache.xml,默认放到src目录下。下面是简单的配置。

如果该路径是Java 系统参数,当前虚拟机会重新赋值。

下面的参数这样解释:

user.home –用户主目录

user.dir –用户当前工作目录

java.io.tmpdir –默认临时文件路径,就是在tomcat的temp 目录-->

下列属性是defaultCache 必须的:

maxInMemory - 设定内存中创建对象的最大值。

eternal - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超

时限制且元素永不消亡。

timeToIdleSeconds - 设置某个元素消亡前的停顿时间。

也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。

这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则

设置该属性也无用)。

如果该值是0 就意味着元素可以停顿无穷长的时间。

timeToLiveSeconds - 为元素设置消亡前的生存时间。

也就是一个元素从构建到消亡的最大时间间隔值。

这只能在元素不是永久驻留时有效。

overflowToDisk - 设置当内存中缓存达到maxInMemory 限制时元素是否可写到磁盘

上。

-->

maxElementsInMemory="1000"

eternal="false"

timeToIdleSeconds="500"

timeToLiveSeconds="500"

overflowToDisk="true"

/>

上面有一个默认的缓存配置,还有一个我们自己配置的缓存,在应用程序中如果不指明缓存的话,就会默认的使用默认的配置属性。

第二步:用Spring中的强大机制,面向切面的设计AOP.来编写两个类文件,MethodCacheAfterAdvice.java(主要是对脏东西的同步更新)和MethodCacheInterceptor.java(主要使用拦截器来为要缓存的对象建立缓存并缓存)。拦截器的实现机制其实就是我们常用的过滤器。它和过滤器的工作原理一样。以下是这两个文件。MethodCacheInterceptor.java

public class MethodCacheInterceptor implements MethodInter ceptor,

InitializingBean {

private static final Log logger = LogFactory

.getLog(MethodCacheInterceptor.class);

private Cache cache;

public void setCache(Cache cache) {

this.cache = cache;

}

public MethodCacheInterceptor() {

super();

}

/**

* 拦截Service/DAO的方法,并查找该结果是否存在,如果存在就返回cache中的值,否则,返回数据库查询结果,并将查询结果放入cache */

public Object invoke(MethodInvocation invocation) throws Thr owable {

String targetName = invocation.getThis().getClass().getNam e();

String methodName = invocation.getMethod().getName(); Object[] arguments = invocation.getArguments();

Object result;

logger.debug("Find object from cache is " + cache.getName ());

String cacheKey = getCacheKey(targetName, methodName, arguments);

Element element = cache.get(cacheKey);

long startTime = System.currentTimeMillis();

if (element == null) {

logger

.debug("Hold up method , Get method result and create c ache........!");

result = invocation.proceed();

element = new Element(cacheKey, (Serializable) result);

cache.put(element);

long endTime = System.currentTimeMillis();

https://www.wendangku.net/doc/fb14445003.html,(targetName + "." + methodName + " 方法被首次调用并被缓存。耗时"

+ (endTime - startTime) + "毫秒" + " cacheKey:"

+ element.getKey());

} else {

long endTime = System.currentTimeMillis();

https://www.wendangku.net/doc/fb14445003.html,(targetName + "." + methodName + " 结果从缓存中直接调用。耗时"

+ (endTime - startTime) + "毫秒" + " cacheKey:"

+ element.getKey());

}

return element.getValue();

}

/**

* 获得cache key的方法,cache key是Cache中一个Element的唯一标识cache key包括包名+类名+方法名+参数

*/

private String getCacheKey(String targetName, String metho dName,

Object[] arguments) {

StringBuffer sb = new StringBuffer();

sb.append(targetName).append(".").append(methodName); if ((arguments != null) && (arguments.length != 0)) {

for (int i = 0; i < arguments.length; i++) {

sb.append(".").append(arguments[i]);

}

}

return sb.toString();

}

/**

* implement InitializingBean,检查cache是否为空

*/

public void afterPropertiesSet() throws Exception {

Assert.notNull(cache,

"Need a cache. Please use setCache(Cache) create it."); }

}

这个方法实现了两个接口,一个是MethodInterceptor(方法拦截),它主要是在方法的调用前后都可以执行。另一个InitializingBean (初始化Bean)它主要在方法调用之后做一下简单的检查,主要实现写在after PropertiesSet()中,就可以了。

MethodCacheAfterAdvice.java

public class MethodCacheAfterAdvice implements AfterReturni ngAdvice,

InitializingBean {

private static final Log logger = LogFactory

.getLog(MethodCacheAfterAdvice.class);

private Cache cache;

public void setCache(Cache cache) {

this.cache = cache;

}

public MethodCacheAfterAdvice() {

super();

}

public void afterReturning(Object arg0, Method arg1, Object [] arg2,

Object arg3) throws Throwable {

String className = arg3.getClass().getName();

List list = cache.getKeys();

for (int i = 0; i < list.size(); i++) {

String cacheKey = String.valueOf(list.get(i));

if (cacheKey.startsWith(className)) {

cache.remove(cacheKey);

logger.debug("remove cache " + cacheKey);

}

}

}

public void afterPropertiesSet() throws Exception {

Assert.notNull(cache,

"Need a cache. Please use setCache(Cache) create it."); }

}

这个方法主要是保证缓存的同步,保持与数据库的数据一致性。

第三步:配置Bean了,applicationContext-ehcache.xml文件就是S pring中的Ioc(控制反转容器)的描述了。上面的只是简单的写了两个方法,具体的能起到什么作用,以及何时起作用,以及怎样用声明式的方式(A OP)和Bean结合。

xmlns:xsi="[url]https://www.wendangku.net/doc/fb14445003.html,/2001/XMLSchema-instanc e[/url]"

xsi:schemaLocation="[url]https://www.wendangku.net/doc/fb14445003.html,/sc hema/beans[/url][url]https://www.wendangku.net/doc/fb14445003.html,/schem a/beans/spring-beans-2.0.xsd[/url]">

class="org.springframework.transaction.interceptor.Transactio nInterceptor">

PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED

PROPAGATION_REQUIRED,readOnly

PROPAGATION_REQUIRED,readOnly

class="org.springframework.cache.ehcache.EhCacheManagerF actoryBean">

classpath:ehcache.xml

class="org.springframework.cache.ehcache.EhCacheFactoryBe an">

DEFAULT_CACHE

class="com.w3cs.cache.ehcache.MethodCacheInterceptor">

class="com.w3cs.cache.ehcache.MethodCacheAfterAdvice">

class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">

.*find.*

.*get.*

class="org.springframework.aop.support.RegexpMethodPointc utAdvisor">

.*create.*

.*update.*

.*delete.*

class="org.springframework.aop.framework.autoproxy.BeanN ameAutoProxyCreator">

*DAO

methodCachePointCut

methodCachePointCutAdvice

transactionInterceptor

上面我是针对DAO层进行拦截并缓存的,最好是能在业务层进行拦截会更好,你可以根据你的系统具体的设计,如果没有业务层的话,对DA O层拦截也是可以的。拦截采用的是用正规表达式配置的。对find,get的方法只进行缓存,如果create,update,delete方法进行缓存的同步。对一些频繁的操作最好不要用缓存,缓存的作用就是针对那些不经常变动的

只需这简单的三部就可以完成EHCache了。最好亲自试一试。我

并没有针对里面对方法过细的讲解。其实都很简单,多看看就会明白了。

不当之处,敬请原谅。

使用OSCache进行简单的缓存

在目前流行的三种开源的缓存工具中,OSCache的配置和使用应给是最简单的了,它主要是针对页面级的配置,EHCache主要针对对象级的缓存,MemCached应该是比较完整的了。接下来我们简单的讲一下在你的系统中怎样快速的应用上OSCache。只需简单的两步。

第一步:加载oscache.properties文件,默认放到src目录下。下面是oscache.xml的默认配置。你只需简单的去掉一些注释就可以用了。

# CACHE IN MEMORY

#

# If you want to disable memory caching, just uncommen t this line.

#

# cache.memory=false

# CACHE KEY

#

# This is the key that will be used to store the cache in t he application

# and session scope.

#

# If you want to set the cache key to anything other tha n the default

# uncomment this line and change the cache.key

#

# cache.key=__oscache_cache

# USE HOST DOMAIN NAME IN KEY

#

# Servers for multiple host domains may wish to add hos t name info to

# the generation of the key. If this is true, then uncom ment the

# following line.

#

# https://www.wendangku.net/doc/fb14445003.html,e.host.domain.in.key=true

# CACHE LISTENERS

#

# These hook OSCache events and perform various action s such as logging

# cache hits and misses, or broadcasting to other cache i nstances across a cluster.

# See the documentation for further information.

#

# cache.event.listeners=com.opensymphony.oscache.plugin s.clustersupport.JMSBroadcastingListener, \

# com.opensymphony.oscache.extra.CacheE ntryEventListenerImpl, \

# com.opensymphony.oscache.extra.CacheM apAccessEventListenerImpl, \

# com.opensymphony.oscache.extra.ScopeE ventListenerImpl, \

# com.opensymphony.oscache.extra.Statisti cListenerImpl

# CACHE PERSISTENCE CLASS

#

# Specify the class to use for persistence. If you use the supplied DiskPersistenceListener,

# don't forget to supply the cache.path property to specif y the location of the cache

# directory.

# If a persistence class is not specified, OSCache will use memory caching only.

#

# cache.persistence.class=com.opensymphony.oscache.plu gins.diskpersistence.DiskPersistenceListener

# cache.persistence.class=com.opensymphony.oscache.plu gins.diskpersistence.HashDiskPersistenceListener

# CACHE OVERFLOW PERSISTENCE

# Use persistent cache in overflow or not. The default val ue is false, which means

# the persistent cache will be used at all times for every entry. true is the recommended setting.

#

# cache.persistence.overflow.only=true

# CACHE DIRECTORY

#

# This is the directory on disk where caches will be store d by the DiskPersistenceListener.

# it will be created if it doesn't already exist. Remember that OSCache must have

# write permission to this directory.

# Note: for Windows machines, this needs \ to be escape d

# ie Windows:

# cache.path=c:\\myapp\\cache

# or *ix:

# cache.path=/opt/myapp/cache

#

# cache.path=c:\\app\\cache

# CACHE ALGORITHM

#

# Default cache algorithm to use. Note that in order to u se an algorithm

# the cache size must also be specified. If the cache size is not specified,

# the cache algorithm will be Unlimited cache.

#

# cache.algorithm=com.opensymphony.oscache.base.algori thm.LRUCache

# cache.algorithm=com.opensymphony.oscache.base.algori thm.FIFOCache

# cache.algorithm=com.opensymphony.oscache.base.algori thm.UnlimitedCache

# THREAD BLOCKING BEHAVIOR

#

# When a request is made for a stale cache entry, it is p ossible that another thread is already

# in the process of rebuilding that entry. This setting spe cifies how OSCache handles the

# subsequent 'non-building' threads. The default behaviou r (cache.blocking=false) is to serve

# the old content to subsequent threads until the cache e ntry has been updated. This provides

# the best performance (at the cost of serving slightly st ale data). When blocking is enabled,

# threads will instead block until the new cache entry is r eady to be served. Once the new entry

# is put in the cache the blocked threads will be restarte d and given the new entry.

# Note that even if blocking is disabled, when there is no stale data available to be served

# threads will block until the data is added to the cache by the thread that is responsible

# for building the data.

#

# cache.blocking=false

# CACHE SIZE

#

# Default cache size in number of items. If a size is speci fied but not

# an algorithm, the cache algorithm used will be LRUCach e.

#

cache.capacity=1000

# CACHE UNLIMITED DISK

# Use unlimited disk cache or not. The default value is fa lse, which means

# the disk cache will be limited in size to the value specif ied by cache.capacity.

#

# cache.unlimited.disk=false

# JMS CLUSTER PROPERTIES

#

# Configuration properties for JMS clustering. See the clus tering documentation

# for more information on these settings.

#

#cache.cluster.jms.topic.factory=java:comp/env/jms/TopicC onnectionFactory

#https://www.wendangku.net/doc/fb14445003.html,=java:comp/env/jms/OSCach eTopic

#https://www.wendangku.net/doc/fb14445003.html,=node1

# JAVAGROUPS CLUSTER PROPERTIES

#

# Configuration properites for the JavaGroups clustering. Only one of these

# should be specified. Default values (as shown below) wi ll be used if niether

# property is set. See the clustering documentation and t he JavaGroups project

# ([url]https://www.wendangku.net/doc/fb14445003.html,[/url]) for more information o n these settings.

#

#cache.cluster.properties=UDP(mcast_addr=231.12.21.132;

mcast_port=45566;ip_ttl=32;\

#mcast_send_buf_size=150000;mcast_recv_buf_size=8000 0):\

#PING(timeout=2000;num_initial_members=3):\

#MERGE2(min_interval=5000;max_interval=10000):\

#FD_SOCK:VERIFY_SUSPECT(timeout=1500):\

#pbcast.NAKACK(gc_lag=50;retransmit_timeout=300,600,1 200,2400,4800;max_xmit_size=8192):\

#UNICAST(timeout=300,600,1200,2400):\

#pbcast.STABLE(desired_avg_gossip=20000):\

#FRAG(frag_size=8096;down_thread=false;up_thread=fals e):\

#pbcast.GMS(join_timeout=5000;join_retry_timeout=2000; shun=false;print_local_addr=true)

#cache.cluster.multicast.ip=231.12.21.132

第二步:在web.xml进行一些简单的配置,oscache提供了强大的标签。主要是针对jsp的,如果项目中需把oscache.tld放到WEB-INF /classes下,在再web.xml中配置一下。

oscache

/WEB-INF/classes/oscache.tld

在jsp中应用的话,还需简单的引入。<%@ taglib uri="oscache" prefix ="cache" %>

具体的应用:

以上是针对具体的页面的配置步骤。如果想针对某一页面的类型进行配置,可以利用过滤器来配置。比如我们想对以*.ftl和*.jsp的页面进行缓存的话,我们只需这样简单的配置在web.xml中。

CacheFilter

com.opensymphony.oscache.web.filter.CacheFilter

time

3600

scope

application

CacheFilter

*.ftl

CacheFilter

*.jsp

如果想对某一访问的路径action进行缓存的话,我们可以这样做,在一个jsp 文件中简单的加上:

<%@ page language="java" import="java.util.*" pageEncoding=" GBK"%>

<%@ taglib uri="oscache" prefix="cache" %>

My JSP 'index.jsp' starting page

OSCache的配置比较活的,你可以根据你的情况进行相应的配置。它主要是针对页面级的对象。虽然它专门为jsp提供了强大的标签支持,并不意味着不能对ftl,php进行缓存的,我们可以用jsp中的标签来嵌套我们的返回不同的数据页面。比如上面的/view.do可以返回的是一个ftl页面,照样可以缓存。

要想对缓存有更深入的了解,可以查看源码,可能会帮助你更好的理解它的工作机制和原理。

简单的说,缓存就是Map,创建缓存就是添加一个map,使用就是通过key取value.

写的有不当之处,敬请提出,以待改正。避免初学者误解。Thank you.

Ehcache 2 缓存区配置详解

Ehcache 2 缓存区配置详解 第1章Ehcache简介 EhCache是一个开放源码的,基于标准的高速缓存系统。Ehcache可以显著提高应用性能,降低数据库负载,简化应用扩展。Ehcache健壮、功能齐全,也历经了众多应用考验,使得它成为使用最广泛的基于Java的缓存系统。 Ehcache可以支持从进程内的一个或多个节点的部署方式到进程内与进程外混合、高达TB 大小的高速缓存。 Ehcache目前由Terracotta公司维护,使用Apache 2 许可证。 Ehcache截止目前最新版本为2.6。支持多种方式缓存: ●Standalone模式。嵌入应用进程内。单点,多节点间无沟通。 ●Replication模式。嵌入应用内部,通过RMI或JGroup或JMS进行节点同步。 ●Cache Server模式。作为独立缓存服务器,提供REST与WebService接口供访 问。 ●Distributed Caching模式。采用Terracotta Server Array实现高可用的分布式 缓存。 Standalone与Replication均是较传统的使用方式,很多场景下难以满足动态基础设施环境下应用弹性的要求。Cache Server使得缓存服务可以容易的进行水平扩展,但是基于REST与WebService的访问方式降低了缓存访问的效率,不太适合对缓存实时性要求较高的场景。Distributed Caching模式提供了进程内与进程间缓存较理想的结合模式,支持水平扩展,高可用,对网络依赖程度较低,可以很好适应应用弹性伸缩,是动态基础设施条件下较理想的缓存模式。 第2章Ehcache 2 缓存区配置 Ehcache默认配置文件在Ehcache客户端的classpath根目录下,名为ehcache.xml。典型的配置文件如下:

企业危废暂存、处理、处置常见问题与对策!

企业危废暂存、处理、处置常见问题与对策! 一、危险废物是什么,其有什么特别之处 国家危险废物名录(2016年新版)或根据国家规定的危险废物鉴定标准和鉴定方法认定的具有危险废物特性的废物。具有腐蚀性、急性毒性、浸出毒性、反应性、污染性一种或几种危险特性的固体废物和液态废物或者是不排除具有危险特性,可能对环境或者人体健康造成有害影响,需要按照危险废物进行管理的固体废物和液态废物都属于危险废物。具体参见08版危废目录与16版危废目录对比。 二、相关法规 《中华人民共和国固体废物污染环境防治法》(2015年修正); 《国家危险废物名录》(2016新版); 《危险废物鉴别标准通则》(2007); 《危险废物经营许可证管理办法》(2013); 《废弃危险化学品污染环境防治办法》(2005); 三、常见问题 1) 危险废物贮存是否规范,不得露天堆放; 2) 危险废物贮存地及包装是否有标识,需要有清楚、正确的标识; 3) 危险废物自建处理装置设施运转是否正常; 4) 部分企业没有危险废物清晰、详细的台账; 5) 是否对危险废物进行有效分类; 6) 是否按时完成危险废物动态管理相关信息的申报和执行联单制度。 四、环保检查啥 检查危废暂存、处理、处置场所是否在自然保护区、风景名胜区、饮用水水源保护区、基本农田保护区和其他需要特别保护的区域内,是否符合相关选址要求,是否符合法律法规等。 检查排污者是否向江河、胡博、运河、渠道、水库及其最高水位线以下的滩地和岸坡等法律、法规规定禁止倾倒废弃物的地点倾倒固体废物。对于危险废物的贮存、处理处置检查危废暂存场所是否设置了符合环境保护要求的设施有毒有害固体废物等危险废物,应设置专用堆放场地,并必须有防扬散,防流失,防渗漏等防治措施。 固体废物转移: 1)检查固体废物转移的情况

各种浏览器清理缓存的方法

请您点击任何一个网页上方的“工具”,选择“Internet选项”,然后弹出一个小窗口,以下示意图是IE浏览器3个不同版本的操作方法,请您对照自己所使用浏览器版本操作: 温馨提示:打开IE浏览器后点击“帮助”,点击关于Internet Explorer,就可查看到IE版本。 ?清理IE6.0的缓存: 1、点击工具菜单。 2、选择Internet 选项。 3、点击常规标签。 4、点击删除文件按钮。 5、在确认窗口中点击确定按钮。 6、点击确定按钮关闭"Internet 选项"窗口。 ?清理IE7.0的缓存: 1、点击工具菜单。如果您没找到该菜单,请按键盘上的Alt 键来显示菜单。 2、选择删除浏览的历史记录。 3、点击删除文件按钮。 4、在确认窗口中点击是按钮。 5、点击关闭按钮。 ?清理IE8.0的缓存: 1、点击工具菜单。如果您没找到该菜单,请按键盘上的Alt 键来显示菜单。 2、选择删除浏览的历史记录。 3、选中Internet 临时文件复选框。 4、点击删除按钮。 5、将文件删除后,点击确定。 ?遨游浏览器 1、单击浏览器顶部的"工具"菜单,并选择"Internet选项"。 2、在常规下选择删除浏览历史记录。 3、选择Internet临时文件 4、将文件删除后,点击关闭。 傲游也有直接清理记录的功能,在工具栏中,如下图

进入后选择需要清除cookies、缓存文件 ?360浏览器 1、单击浏览器顶部的"工具"菜单,并选择"IE选项"。 2、在常规下选择删除浏览的历史记录。 3、选中Internet 临时文件复选框。 4、点击删除按钮。 5、将文件删除后,点击确定。重启浏览器 360和遨游的步骤差不多,也有专门的这项功能 进入以后,选择需要清理的项目 搜狗和腾讯tt和360以及遨游都是同样的地方 搜狗浏览器 选择 ?谷歌浏览器chrome 要清空chrome的缓存,请按以下步骤操作: 1、点击小扳手图标 2、选择“选项” 3、选择“个人资料” 4、在浏览数据中,点击“清除浏览数据

Android客户端缓存方案

概述: 客户端缓存机制是android应用开发中非常重要的一项工作,使用缓存机制不仅仅可以为用户节省3G流量,同时在用户体验方面也是非常好的选择. 缓存机制分为两部分,一部分是文字缓存,另一部分是多媒体文件缓存. 缓存文件保存策略: 1.文字缓存: 文字缓存应该分为两种,一种是更新比较频繁的区域,一种是更新不频繁的区域. 根据两者的更新频率区分它们的过期时间. 更新比较频繁的区域,它的缓存过期时间应该为应用程序内(即应用程序从打开到关闭的这段时间).这种情况会有专门的缓存文件夹存放该类缓存文件,以及专门的缓存数据库表存放信息.每次应用程序启动的时候都会先将该类数据清空. 另一种很少更新的区域,它的缓存不设置过期时间,而是提供一个按钮或者Menu可以让用户选择手动更新(如我的好友列表,我的订阅,我的分享.等等….) 具体的文字缓存划分,详见附录1. (1)通常情况下,我们与服务器交互都是采用JSON格式获取数据的,获取的JSON数 据仅仅是一段字符串,我们可以考虑将这些字符串使用文件流写入一个TXT,保存到 SD卡中,在数据库添加该数据的记录.添加数据库记录时,提供两个关键字段,一个是 请求的URL,另一个则是本地保存后的文件地址.日后每次向服务器发起请求之前都会根据URL在数据库中检索. 该方法好处:降低系统数据库数据量,不会出现数据库满了的现象. 缺点:IO操作频繁,有时代码书写有误会造成内存泄露等状况. (2)将JSON数据解析后装入List对象中,然后遍历List,将数据统统写入相应的 数据库表结构中,以后每次向服务器发起请求之前可以先在数据库中检索,如果有直接返回. 该方法好处:如果本地存在文字缓存,那么读取缓存速度快. 缺点:增加数据库数据量. 2.多媒体文件缓存 (1)图片缓存 图片的缓存可以根据当前日期,时间为名字缓存到SD卡中的指定图片缓存目录, 同时数据库中做相应记录,记录办法可以采用两个关键字段控制,一个字段是该图片 的URL地址,另一个字段是该图片的本机地址.取图片时根据URL在数据中检索, 如果没有则连接服务器下载,下载之后再服务器中作出相应记录. (2)视频文件缓存 考虑到视频文件就是动画片,每一集的大小应该超过20MB,如果边播放边下载的话 用户的3G流量负担是很大的,而且用户看完一集动画片,基本上不会再去看第二遍. 从这个状况来看,建议不要对视频文件进行下载缓存.另外也能降低程序员的编码负 担.

清除本机在WINDOWS下访问共享文件夹

不知道大家遇到过这种情况没有,呵呵,我是经常遇到,虽然知道有一种办法,但是有点麻烦,于是从网络上另找到一个方法来解决它。 当我们访问局域网里的一台主机的共享文件夹时,首次登录会要求输入用户名和密码,当输入正确后,即使没有勾选Remember my credentials选项,下次输入地址也会自动登录到那个文件夹里。虽然这个功能方便了我再次输入登录信息的麻烦,但是当我想切换权限更大的用户时就带来了一点小麻烦。呵呵,可能会有人有过这种经历吧,至少证明我还有同类吧,呵呵。 一、在没有保存登录信息的情况下 第一种方法,也是我一直使用的方法,就是注销当前用户,这样,当再次登录后去访问刚才的共享文件夹时,就会再次提示我输入用户名和密码,这样就可以使用另一个用户登录啦。 但是这种方法也有郁闷的时候,就是你并不知道要注销的当前用户的登录密码时。此时看看我找到的另外一种方法吧:net use,可能有人早已经熟悉这个命令啦,呵呵,本人惭愧呀,才知道的。 当在命令提示窗口输入net use命令时,会显示本机缓存的共享登录信息,如果你想切换用户,则可以删除那条缓存的记录即可。 举个例子,如上图显示,假设IP地址是192.168.10.20,则使用net use 192.168.10.20 /delete即可,如果要删除多条缓存或全部缓存则要使用net use * /delete,这个命令会提示确认信息在删除每条记录之前,因此当进行到你想要删除的记录时按Y回车即可。 当完成上述命令后,再重新登录时就会提示输入用户名和密码啦。 二、在保存登录信息的情况下 这种情况还是比较简单的,在Windows7下,Control Panel[控制面板]-;User Accounts and Family Safety[用户帐户和家庭安全]-;Credential Manager[凭据管理者],在这个窗口里有个Windows Credentials,选择你要删除的凭证信息即可。 在WindowsXP下,控制面板-;用户帐户,选择当前使用的用户,例如,如果当前用户是Administrator,则在用户帐户窗口里选择Administrator,进入下图所示窗口,点击管理我的网络密码,在弹出的存储用户名和密码的窗口里,选中要删除的项,点击右侧的[删除]按钮即可。

串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)

串口通信中接收数据时延迟处理与缓存处理的解决方案(C#) 利用串口进行通信,当发送方(A)将数据写入串口后,通过无线或有线方式将数据传送给接收方(B),B通过调用串口读方法comm.read(参数)即可将数据读出。原理十分简单,但最近在利用串口处理SM-42无线传输时,数据总是一段一段的传到B,并不能在 comm_DataReceived方法中单纯使用read方法将数据接收完全。我知道用缓存机制,但由于经验少(正在实习),到网上找了找大牛们的方法,并结合自己的理解,发现有两种方法可以处理。 方法一:comm_DataReceived(Comm控件的数据接收方法,当有数据来临时会触发)会创建一个线程(悲哀,因为之前不知道它另辟线程,所以自己编写了一个线程处理函数),因此当串口在等待数据时,不影响主窗体或主线程的操作。所以当数据到来时,可以通过Thread.Sleep(100)让接收函数休息100毫秒,这100毫秒做什么用呢?就是让所有的数据都到达B时再读取,这样就逃避了分批到达的问题。很明显,这是在糊弄。因为万一100毫秒都不够呢?所以,方法二更合适。 代码 1private void comm_DataReceived(object sender, EventArgs e) 2{ 3 Thread.Sleep(100); //等待100毫秒 4int nReviceBytesNum =comm.BytesToRead; ///收到的字节数。 5byte[] ReadBuf = new byte[nReviceBytesNum]; ///定义接收字节数组 6 comm.Read(ReadBuf, 0, nReviceBytesNum); ///接收数据 7}

cache替换策略

嵌入式处理器的低开销的缓存替换算法 我们提出一个新的一级(L1)数据缓存置换算法-----PRR(Protected Round-Robin)保护的轮询调度算法,很简单,被纳入嵌入式处理器。嵌入式应用的能量局限性使他只能用比较简单的缓存置换算法。 循环调度(Round Robin Scheduling)算法就是以循环的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。 为了简化与RAM之间的通信,高速缓存控制器是针对数据块,而不是字节进行操作的。 从程序设计的角度讲,高速缓存其实就是一组称之为缓存行(cache line)的固定大小的数据块,其大小是以突发读或者突发写周期的大小为基础的。 每个高速缓存行完全是在一个突发读操作周期中进行填充或者下载的。即使处理器只存取一个字节的存储器,高速缓存控制器也启动整个存取器访问周期并请求整个数据块。缓存行第一个字节的地址总是突发周期尺寸的倍数。缓存行的起始位置总是与突发周期的开头保 持一致。 每一个缓存行都有一个保护位,用来指示该行下次是不是被替换,初始的时候所有的保护位都是关闭的,当该行被访问时,保护位打开。 有一个专门指向cache块的指针,指针用来指向下一个要被替换的块,只有当未命中发生的时候,这个指针才会发生变化,当未命中发生时,这个指针指向的块要被替换。假如这个块是受保护的,则它的保护位将被关闭。而且指针指向下一个要被替换的块,这个过程一直持续到发现一个未受保护的块为止。 当新的缓存块进入缓存,其保护位是打开的,但指针不递增,即此时指针仍然指向新的缓存块。这意味着,下一个未命中发生时,其保护将关闭。这只提供了一个新的高速缓存行一个周期的保护。让我们更详细地看一下这个。 当新的缓存块进入,保护位打开,而指针递增时,他将会被保护两个循环周期。当新的缓存块进入,保护位关闭,而指针递增时,他也会被保护两个周期。 有选择性缓存的分段的LRU缓存替换机制 :567 算法在567 的基础上进行分段,每段的大小是可变的,每段均采用567 算法,可利用多条运动链来实现。分段的个数B 一旦确定就被固定了,并且个数越多,:567 算法就越精确,但实现起来就越复杂。每段拥有一个权值,用来标识该段中用户记录的活跃程度,权值越高,则表明该段中用户记录的活跃程度越高。沿用587 的做法,为每个用户记录分别设置一个访问次数计数器。每当某个用户记录被访问后,对应的访问次数计数器自动加$,同时调整用户记录在该段中所处的位置(移到该段对应的运动链的链首),以体现567 算法。如果计数器的值超过一个规定的门限值,该用户记录就要被移到下一个具有更高权值的段中,以表明该用户记录在过去时间内的活跃程度已经达到一个更高的级别。当活跃用户记录到达最高权值段的时候,不管访问计数器的值是否超过门限值,用户记录都不能再往上提升。按照前面的做法,在经历一段时间之后,就有可能出现低权值段上的用户记录很少,而绝大多数用户记录却拥挤在高权值段上的情况,这几乎退回到没有进行分段的567 算法的状态。为了防止这种情况的出现,同时能够及时精确地反映用户记录的活跃程度,需要对各段的权值定时进行调整。具体的做法是将两个最低权值段的用户记录合并到一个段中,把腾出来的那个段的权值设为最高,其它段的权值分别降一个等级,这样既活跃了用户记录,又可以向更高权值段迁移。这里把这个调整过程称为段的定时调整过程。

FTP文件下载不能及时更新

FTP文件下载“不能及时更新”都是IE缓存的错 事件回放:学期末,信息技术课学生正在微机室进行在线考试。”上面有答案,”下面有同学小声议论经,我看了一下,原来我在制作试卷时将答案与试题做成了一个文档,学生在下载试卷的同时,答案也就下载了。我赶紧嘱咐学生自觉考试,同时将答案自觉删除。幸好是第一个班,我赶紧登陆到学校FTP服务器上,将考试文档中答案删除。每想到第二个班考试时,下载的考试文档还有答案。我直接到FTP服务器上操作,发现确实已经删除了。怎么加事?经过一番分析,原来都是IE缓存引起的。 关于IE缓存 为了提高访问网页的速度,Internet Explorer浏览器会采用累积式加速的方法,将你曾经访问的网页内容(包括图片以及cookie文件等)存放在电脑里。这个存放空间,我们就称它为IE缓存。以后我们每次访问网站时,IE会首先搜索这个目录,如果其中已经有访问过的内容,那IE就不必从网上下载,而直接从缓存中调出来,从而提高了访问网站的速度。 FTP默认工作方式也是通过IE打开,我们不难分析产生这种现象的原因: 从FTP服务器下载文档到本地或是直接打开文档,首先到IE缓存检查有没有同名的文件存在,如果有,就直接从IE缓存打开或下载。如果没有,先下载到IE缓存,然后再从IE缓存下载到本地,当在FTP服务器上对文件内容修改时,只要文件名没改变时,即使内容变了或者文件大小变了,客户端先检查本地IE缓存,如果存在同名(不管大小或文件最后修改时间),就直接从本地IE缓存下载,当然还是原来那个文件了。 小秘密:关于文件在缓存中的位置。在IE的“工具”菜单下选择“Internet选项”,然后在“常规”选项卡中你会看到有“Internet临时文件”这一项,单击“设置”按钮,然后在弹出的“设置”对话框中就可以看到IE缓存的位置,winxp与win7略有不同了。这里有一个不能不说的秘密了。我开始在实验中,在该缓存目录下没有发现任何我要下载的文档,通过WINDOWS的文件查找功能在该目录下也没有找到任何文档了,其实下载的文档应该还是从缓存COPY过来的,因为在FTP服务端已经更改了内容了。后来查阅了相关资料才知道在系统提示的IE缓存目录下还有一个文件夹“\Content.IE5”,它即不是隐藏的也不是系统的,所以不通过手工输入,是无法进入的。当进入到该目录下,你看到那些在"content.ie5"目录下以数字和字母命名的文件夹了么?这是微软试图通过使用复杂的文件名来使他的计划越发难以理解,这些数字和字母命名的文件夹就是微软生成的用来保存你的cookies和缓存的文件夹,如下图所示。

Java分布式架构

介绍 1. 项目核心代码结构截图 jeesz-utils jeesz-config jeesz-framework jeesz-core-cms jeesz-core-gen jeesz-core-bookmark

jeesz-core-act jeesz-core-oa jeesz-core-test jeesz-core-scheduler jeesz-core-task jeesz-web-admin jeesz-web-service jeesz-web-scheduler jeesz-web-task jeesz-web-bookmark jeesz-facade-bookmark jeesz-service-bookmark jeesz-facade-task jeesz-service-task jeesz-web-mq-task 特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化 2. 项目依赖介绍

手机内存一直提示不足该怎么清理

手机内存一直提示不足该怎么清理 手机内存一直提示不足的清理方法一: 清理大型应用程序的缓存数据 通过清理程序的缓存文件,释放的内存空间会让你喜出望外 进入手机设置选项,选择设置>应用程序 >管理应用程序 按一下menu键,选择“按大小排序”选项(如果是android 2.2手机先要选择已下载标签),然后就可以按照应用程序大小排列所有手机安装的应用程序 点击一款列表中的应用程序,如果程序有缓存文件可以显示大小,直接点击“清除缓存”选项就可以释放这些缓存文件占据的空间 有一些应用程序的缓存文件可能多达数mb,比如google maps,market,浏览器和相册程序,清理这几个程序的缓存文件就可以释放相当可观的空间。 很多手机厂商都在旗下手机预装了自己开发的ui程序,比如htc sense,motoblur等,如果你打算使用launherpro或者adw 这样的launcher程序替代htc sense,你可以清理甚至删除htc sense的数据文件,这个操作可以让你的手机多出几十mb空间。 另外android market还提供一些自动清除缓存文件的应用程序,比如quick app clean cache这款收费软件。对于已经取得root权限的手机用户,可以从market下载 cachecleaner,

cachemate和movecache这些程序来快速方便的清除程序缓存文件。 删除那些你从来不用或者很少使用的应用程序 这是很多用户都会面对的问题,默默忍受着手机内存不足的报警,甚至牺牲系统性能,就是舍不得删除那些从来不用或者极少使用的应用程序,这可能也是一种强迫症。删除这些程序你会发现手机从此海阔天空,而且你没有任何损失。 移动所以可以移动的应用程序数据到sd卡 运行android 2.2系统的手机支持安装应用程序到sd卡,确保检查所有你安装的应用程序如果支持apps to sd卡功能一定要移动到sd卡,对于一些大型软件特别是游戏程序节省的容量相当可观。不过一定要注意widgets程序,捆绑widgets的程序,以及动态壁纸程序和那些需要在后台运行并且和系统进行交互的应用程序不要移动到sd卡存储,否则程序可能无法正常工作。 如果觉得每个程序单独设置太麻烦,可以借助apps 2 sd和sdmove这样的程序简化操作过程。对于那些动手能力比较强的用户可以通过网上的教程设置应用程序默认安装到sd卡,这样就可以一劳永逸。 手机内存一直提示不足的清理方法二: 1、终止后台不常用软件运行程序 很多人,通常只是在界面关闭软件。对于安卓机来说,这些程序可能还在后台运行,比如优酷等视频网站,如果后台同时开好几个,所占的运行内存ram可想而知有多少,这时候需要关闭后台运行这些软件,释放ram内存空间。可以下载应用管家,一

LIRS缓存替换算法

LIRS缓存替换算法 LIRS (Low Inter-reference Recency Set)是一个页替换算法,相比于LRU(Least Recently Used)和很多其他的替换算法,LIRS具有较高的性能。这是通过使用两次访问同一页之间的距离(本距离指中间被访问了多少非重复块)作为一种尺度去动态地将访问页排序,从而去做一个替换的选择。这个算法由宋江和张晓东实现。 量化局部性 所有的页替换算法的工作都依赖于现存局部性原理,各种替换算法的主要不同在于如何量化局部性。LIRS使用同一个页两次被访问的距离,也即是页的连续两次访问之间,有多少非重复的页被访问去量化局部性。特别地,LI RS使用最后一次和倒数第二次访问该页来实现这一目的。如果一个页首次被访问,则其reuse distance是无穷大,与此同时,LIRS算法还使用一个页的新近访问时间去量化这种局部性。(新近访问时间:从该页最近一次访问的时刻到此时,访问过的其他非重复页的数量)。为了将最新的访问历史信息考虑进去,LIRS算法的实现使用再访问间隔和页的新近访问时间的较大值去度量这种局部性,使用RD-R表示(Reuse Distance—Recency)。再访问间隔和新近访问时间的概念如下图所示: 其中: T1为该页的倒数第二次访问时刻 T2为该页的上一次访问时刻 T3为此时时刻 选择替换页 LIRS管理缓存页和非缓存页的元数据信息,结合下图,可以描述其替换操作:

1、缓存块被分为LIR和HIR两部分。LIR部分用于存储最经常被访问的一些页面(LIR页面),HIR部分用于存储HIR页面 2、LIR部分存储了缓存的大部分页面,所有的LIR页面都是常驻缓存的 3、所有最近被访问的页面被放置于栈S,所有的常驻HIR页面被放置于栈Q(有可以实现为队列Q) 4、当栈S中的一个页面被访问时,其就会被移至栈S的顶部,同时要确保栈S的尾部是一个LIR块,(这就会进行“栈剪枝”操作)在图(a)的情况下,页面B被访问,就会得到图(b) 5、当栈S中的的一个HIR页面被访问时,该HIR页面就会转变为LIR页面,相应的栈S底部的LIR页面会转变为HIR页面,并移至栈Q的顶部,在图(a)的情况下,页面E被访问,就会得到图(c) 6、当栈S和栈Q中的页面都不命中时,就得考虑常驻页面的替换,首先被替换出去的是处于栈Q底部的常驻H IR页面。在图(a)的情况下,页面D被访问,就会得到图(d);在图(a)的情况下,页面C被访问,就会得到图(e) 我们在LIRS栈S上定义一种操作,“栈剪枝”,即移除栈底的所有的HIR块直到遇到一个LIR块。 这个操作有两个目的: 1、确保栈底的一定是个LIR块 2、当栈底的LIR块被移除后,它上面的HIR块一直到下一个LIR块是没有机会变为LIR块的,因为他们的rece ncy要大于LIR块最大的recency。 栈S中保存了三种块,栈Q中保存了所有的驻留在cache中的HIR块。但是没有表示不在cache中又不在S中的HIR块。 (总结)对于以上保存、没保存的所有块,存在三种访问情况: 1、访问一个LIR块X:这次访问一定命中,简单的将这个块移动栈顶,如果这个LIR块以前是在栈底,那么就需要一次“栈剪枝”操作。

缓存机制

3.1、缓存策略 3.1.1、一级缓存 之前每一个数据库操作都是一个Session,那么对于Session来说本身是存在着缓存,可以保留之前的查询结果。 但是对于Session的缓存只针对于一个Session有效,那么如果现在想针对于多个Session 有作用,则必须在SessionFactory上配置缓存,那么这样的缓存称为二级缓存。 在Hiernate按ID查询有两个方法:load、get 那么下面使用以上的查询方法,查询两次 程序虽然调用了两次load方法,但是只发出了一条的查询命令,证明,第一次的查询结果被保存下来了,那么这就是一级缓存。

与之前的相比,查询了两次操作,所以此时,证明一级缓存只是针对于一个Session起作用的。但是一级缓存是无法关闭的,始终会存在。

从运行结果可以发现,如果之前先进行了保存操作,那么之后再查询的话也不会重新发出查询语句。证明实体被缓存下来。 问题: 如果现在要求使用程序插入100000万条记录?该怎么办? 如果使用Hibernate处理的话,则可能会出现内存的溢出,所以在这种情况下首先是绝对不建议使用Hibernate完成的,就使用最基本的JDBC操作完成即可。 如果非要使用Hibernate做,则必须使用到Session中关于缓存的一些操作方法:·清空Session中的所有缓存:clear() ·清空Session中一个指定的实体:evict(Object obj) 例如:下面验证clear()方法 因为程序中,将所有的缓存清空了,所以之后再查询相同实体的时候,在Session中已

以上因为只清空了一个实体,所以只发出了三个查询语句。 那么就可以通过以上的方式完成100W条记录的插入 思路:按照每十条清空缓存的操作,并将缓存中的内容强制性的写到数据库之中 3.1.2、二级缓存(重点) 在Hibernate本身中支持了多种的二级缓存组件。本次使用EHcache。如果要想使用ehcache话,则首先必须进行配置,配置ehcache的缓存文件。 ehcache.xml:

EHCache介绍

EHCache介绍 简介 系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能. 缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。 Ehcache从Hibernate发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。具有快速,简单,低消耗,依赖性小,扩展性强,支持对象或序列化缓存,支持缓存或元素的失效,提供LRU、LFU 和FIFO缓存策略,支持内存缓存和磁盘缓存,分布式缓存机制等等特点。 2009年8月Terracotta公司并购了开源缓存项目Ehcache, Terracotta 公司的产品 Terracotta 是一个 JVM 级的开源群集框架,提供 HTTP Session 复制、散布式缓存、POJO 群集、跨越集群的JVM 来完成散布式使用顺序协调。并购后EhCache 首要的改进都集中在跟Terracotta 框架的集成上,这是一个真实意义上的企业级缓存处置方案。Ehcache1.7版本上首次加入了ehcache-terracotta组件模块,想利用terracotta来实现更方便的集群操作。 Overview Ehcache是一个开源的,用于提高访问性能的标准高速缓存,它抛弃了数据库同时易于扩展。Ehcache拥用强大的,可靠和完整的功能,这已成为最广泛使用的基于Java的高速缓存。 Ehcache可以实现TB级的高速缓存管理,可配置多个缓存节点。对于需要互联的分布式缓存应用,Ehcache的使用开源的Terracotta Sever的阵列。 Ehcache是Terracotta公司的一个长期开发、维护和支持的专业开源项目。有效基于Apache 2 license。除了开源的ehcache,Terracotta公司还提供企业版的Ehcache全天候的专业支持,咨询和培训。

让Windows7的局域网共享速度更快的四大方法

让Windows7的局域网共享速度更快的四大方法 时间:2010-12-29 10:34来源:未知作者:admin888 点击: 12131次 让Windows7的局域网共享速度更快的四大方法 自从Windows Vista、Windows7等客户端系统的“身影”在局域网中频频出现之后,通过网络访问对应系统环境下的共享资源也有了新的思路。这不,本文下面总结的几则操作细项,可以帮助我们高效进行共享连接! 1、启用脱机设置,优化共享连接性能 Windows Vista以上版本系统新增加了脱机设置功能,巧妙地使用该功能,可以让计算机系统自动将我们频繁要访问的共享资源直接缓存到本地硬盘中,日后网络连接即使遇到问题不能正常工作时,我们也能很快地访问到目标共享资源中的内容;很明显,巧妙地启用脱机设置功能,可以大大优化共享连接性能。下面是启用脱机设置、优化共享连接性能的具体操作步骤: 首先在目标共享资源所在的计算机系统桌面中,打开资源管理器,在弹出的系统资源管理器窗口中,找到目标共享资源所在的文件夹,用鼠标右键单击该共享文件夹,从弹出的快捷菜单中点选“属性”命令,打开目标共享文件夹的属性设置窗口; 其次单击该设置窗口中的“共享”标签,在弹出的对应标签设置页面中点击“高级共享”按钮,打开目标文件夹的高级共享对话框,选中该对话框中的“共享此文件夹”复选项,同时单击“缓存”按钮,打开缓存设置对话框; 接着在该设置对话框中检查一下“用户从该共享打开的所有文件和程序将自动在脱机状态下可用”选项是否处于选中状态,要是发现该选项还没有被选中时,我们应该及时将它重新选中,同时还要记得将“已进行性能优化”选项一并选中,最后单击“确定”按钮保存好上述设置操作,如此一来我们日后通过网络再次访问目标共享资源时,共享连接性能就不会受到网络连接状态的影响而始终稳定了。 2、巧妙设置协议,确保共享连接稳定 在局域网工作环境中,一些特殊的计算机系统可能同时配置有几个IP地址,在这样的计算机系统中尝试进行共享访问连接时,我们有时会遇到很奇怪的共享连接故障,那就是每次重新启动一次计算机系统,相同的共享资源连接有时正常、有时不正常,但是如果将该计算机系统的IP地址只设置为一个时,目标共享资源连接却能始终稳定,这是什么原因呢,我们又该如何解决这种奇怪的共享连接故障呢? 出现这种故障现象,多半是目标计算机系统的共享访问协议设置不当。我们知道,

各类型网站-缓存解决方案

门户类随着互联网不断普及和飞速成长,门户网站已经成为网民获取信息的重要通道。每天大量网民点击访问,网站速度和网络稳定等方面面临着严峻挑战: 1、网站运维技术复杂 2、网站影响力大,对网络灾备要求高 3、网络服务众多,传输机制复杂 4、用户众多,分布广泛,网络情况复杂,响应速度要求高 5、易遭受攻击,网站安全性和稳定性要求高 某门户网站高标准规划、高起点建设,以新闻、信息、下载内容为主,文字、图片与视频、音频结合,目前拥有30 多个频道和子网站。随着自身的不断成长,网站也面临了性能和可用性方面的问题和挑战: 一旦IDC 内的服务器停止工作或ISP 服务中断,如何保证网站始终在线?必须通过更快的响应速度来满足客户的需求,如何为客户提供最及时的响应?应用服务器由于服务器硬件的稳定性、流量压力超载、网络攻击等情况,经常会意外宕机,如何保证网络应用的7 ×24 小时持续性服务? 为解决以上问题,该门户网站使用了PowerCDN服务,确保了关键任务应用的快速、安全和容错性运行。无论该网站的客户所处全球位置如何,PowerCDN的Smart DNS都可将他们引导到具有最佳性能的可用PowerCDN节点,页面响应速度明显提升;同时源站隐藏在CDN节点后,大大减少来自互联网上的直接安全威胁;遇到热点事件的突发流量也不必为此单独购置专门的设备。 sns社区类随着越来越多的个人用户参与到互联网内容的管理、维护、存储、上传、分发等价值链条中,互联网逐渐转变成一个分散存储、读与写并存的多中心交互式平台,社会网络(sns)作为Web2.0的典型应用之一更是遍地开花。由于内容的生产者和组织者越来越多和越来越分散,内容的多节点上传几乎与自上而下的下发变得一样普遍,于是本已拥塞不堪的网络带宽更显拥挤,在现有带宽条件下,如何提高网站接入速度和响应速度,进而改善用户体验,真正做到以用户为中心?这是所有sns社区类网站都必须面对并给出满意解答的一道课题。 1、网站交互性超强 2、文件种类和数量多而且复杂 3、安全保密性要求高

如何清理系统缓存

如何清理系统缓存? 1.打开“我的电脑”-“工具”-“文件夹选项”-“查看”-在“显示所有文件和文件夹”选项前打勾-“确定” 2.删除以下文件夹中的内容: x:\Documents and Settings\用户名\Cookies\下的所有文件(保留index 文件) x:\Documents and Settings\用户名\Local Settings\Temp\下的所有文件(用户临时文件) x:\Documents and Settings\用户名\LocalSettings\TemporaryInternet Files\下的所有文件(页面文件) x:\Documents and Settings\用户名\Local Settings\History\下的所有文件(历史纪录) x:\Documents and Settings\用户名\Recent\下的所有文件(最近浏览文件的快捷方式) x:\WINDOWS\Temp\下的所有文件(临时文件) x:\WINDOWS\ServicePackFiles(升级sp1或sp2后的备份文件) x:\WINDOWS\Driver Cache\i386下的压缩文件(驱动程序的备份文件) x:\WINDOWS\SoftwareDistribution\download下的所有文件 3.如果对系统进行过windoes updade升级,则删除以下文件: x:\windows\下以 $u... 开头的隐藏文件 4.然后对磁盘进行碎片整理,整理过程中请退出一切正在运行的程序 5.碎片整理后打开“开始”-“程序”-“附件”-“系统工具”-“系统还原”-“创建一个还原点”(最好以当时的日期作为还原点的名字) 6.打开“我的电脑”-右键点系统盘-“属性”-“磁盘清理”-“其他选项”-单击系统还原一栏里的“清理”-选择“是”-ok了 7、在各种软硬件安装妥当之后,其实XP需要更新文件的时候就很少了。删除系统备份文件吧:开始→运行→sfc.exe /purgecache近3xxM。(该命令的作用是立即清除"Windows 文件保护"文件高速缓存,释放出其所占据的空间) 8、删掉\windows\system32\dllcache下dll档(减去200——300mb),这是备用的dll档,只要你已拷贝了安装文件,完全可以这样做。 9、XP会自动备份硬件的驱动程序,但在硬件的驱动安装正确后,一般变动硬件的可能性不大,所以也可以考虑将这个备份删除,文件位于 \windows\driver cache\i386目录下,名称为driver.cab,你直接将它删除就可以了,通常这个文件是74M。 10、删除不用的输入法:对很多网友来说,Windows XPt系统自带的输入法并不全部都合适自己的使用,比如IMJP8_1 日文输入法、IMKR6_1 韩文输入法这些输入法,如果用不着,我们可以将其删除。输入法位于\windows\ime\文件夹中,全部占用了88M的空间。 11、升级完成发现windows\多了许多类似$NtUninstallQ311889$这些目录,都干掉吧,1x-3xM 12、另外,保留着\windows\help目录下的东西对我来说是一种伤害,呵呵。。。都干掉!

缓存管理需求说明

缓存管理功能需求说明 缓存管理开发背景 缓存管理功能的开发,意在减少系统对数据库的过多访问,通过减少对数据库的访问次数,改用访问内存的方式,提升系统的性能。直接从内存获取数据,较之从数据库获取数据,效率可以得到显著的提升。 系统由于多次查询数据库,消耗大量系统资源,且查询效率可能因为开发者的个人能力导致查询效率不高,或占用过多资源影响系统性能。使用缓存管理,系统只有第一次查询访问数据库,而后皆通过访问内存取得数据,不需要在计较这次查询的SQL是否过于复杂,是否效率低下,直接取得数据返回即可。 第一部分、缓存管理 缓存管理提供了缓存工具类CacheUtils以供开发者对缓存进行自定义开发。如果开发者需要自己开发某功能需要涉及缓存管理则可以借助使用CacheUtils工具类来完成。本地缓存管理和redis 缓存管理的区分在于redis是否正确连接且启动。注意,是正确连接并且启动redis服务器。 关于开发者需要自行开发某功能的缓存管理需要了解CacheUtils怎么使用可以查看《缓存管理开发说明》 本地缓存管理 本地缓存管理是在redis没有正常启动运行的时候系统提供的缓存管理方式。本地缓存管理暂无任何持久化操作。对于缓存中的所有数据,在应用重启后一律清空,需要重新载入缓存。本地缓存

管理采用的是标准的key-value形式保存,于Java中采用的结构形式为HashMap结构,HashMap 有利于快速的存取,因而采用该结构保存本地缓存。其中key的类型为string,value的类型为object。本地缓存管理对于类型的限制基本没有。Value可以置入任何Java支持的对象。 本地缓存管理中,保存进入缓存只需要使用CacheUtils中的save方法进行保存即可,保存的数据在本地缓存中不做多余的处理,直接置入缓存中。由于采用的是以Object类型的形式保存,并不会对保存的数据进行转换,获取保存的缓存数据时直接使用CacheUtils中的get方法即可取得保存的数据,达到怎么存就怎么取,存什么取什么。无需更多的变换数据结构,更不会导致因为存储导致类型的变换或者数据的丢失。 由于存什么取得的就是什么,因而直接修改取得的数据对象有可能导致缓存数据也被修改。Redis缓存管理 Redis缓存管理需要开启redis服务器并正确配置连接信息,系统会在启动的时候检测redis是否可以正常连接启用,如果没有正常连接启用则使用本地缓存管理。 Redis缓存管理对于类型具有特别的要求,对于不同的数据类型需要使用对应的类型进行保存。且不允许使用复杂的对象类型进行保存,如list-object是不被允许的,需要转换为list-string的类型再进行保存,同理Map类型也不被允许使用Object,但是单个JavaBean是允许进行存取的。即redis 缓存管理不支持三维结构存储,仅支持二维结构存储。 Redis缓存管理的数据会有简易的持久化。即当redis停止后或者系统停止后,再次启动时redis 依然存有数据提供,不需要再次载入缓存。如果缓存设置了失效则可能会被清除。 Redis缓存管理保存、修改 由于redis数据类型的特殊性,所以所有Java中复杂的对象存储都需要进行相应的转换后才可

java应用服务器集群环境下代码编写要注意的问题

java应用服务器集群环境下代码编写关注点 J2EE架构下,软件的部署环境为集群的情况很多,所以针对集群环境的软件 开发非常重要,所以我们在编码过程中要超前思考,以免加大后期的工作量。了解集群 什么是集群: web应用服务器集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是一个服务器一样。为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理。从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性。 集群技术的特点 高可靠性和高可用性:通过集群技术组成的系统,可以确保数据和应用程序对最终用户的高可用性和高可靠性,也就是说当主节点上的系统崩溃时,冗余节点就从替补角色转换到正式角色,并自动投入应用,从而保证了系统运行的不间断。或者检测某一个空闲服务器,将请求分发给它,对请求进行处理,而且这一过程对用户来说,是透明的,用户察觉不到! 稳定性和可伸缩性:在系统的处理能力需要增加的时候,除了通过增加集群中每个计算机节点的单机处理能力(如通过增加CPU数量、增加内存大小等手段)外,还可以通过增加集群节点数,即通过向群集添加新的计算机节点,使服务随着处理器的添加而伸缩,从而增大应用程序吞吐量,以达到增加系统的整体处理能力的目的,完成系统的扩容。 Web应用服务器集群结构图,下面例举了weblogic和websphere集群结构图 websphere集群架构图

weblogic集群架构图 排除网络设备,由上面两幅图可以观察到,应用服务器集群包含了三部分

1.Web服务器(Web Server) Web服务器专门处理HTTP请求(request),应用的软件如Apache,IBM HTTP Server,或者自己写的代理服务等等。 2.应用程序服务器(The Application Server) 应用程序服务器是通过很多协议来为应用程序提供(serves)业务逻辑(business logic)。 3.关系数据库系统 4.消息中间件 备注:一定要清楚web服务器与应用程序服务的区别 由图我们来分析一下,集群环境下开发需要注意哪些地方? 1.Session,我们经常用session来封装用户的登录信息,那么如果集群环境下一台机器session中有,一台没用回发生什么样的情况呢?幸好各个应用服务器都有在集群环境下session复制的配置。如果配置请查阅对应的文档。另外web 开发经常用到Webwork,strut2,flex等技术,他们都对sesson的封装。他们是否也能复制呢?还要测试才行,当然理论上是可以的,呵呵!还有有的时候session 要保存到什么位置?也是个问题a)内存,b)文件c)数据库。根据实 际情况来选择吧。 2.Cache,Cache我们经常使用(我这里只说对象级缓存),如:将一些经常用到的数据缓存到内存中。这种情况下和session有些类似。有的人实例化了一个包 含HashMap的一个单例的对象,用来缓存数据,单机环境没什么问题,可是如 果是集群环境呢?会怎样?所有我们引用分布式缓存或者集中式缓存,分布式缓存有很多种如ehcache,jbosscache,oscache等,集中式缓存比较典型的就是memcached。选择分布式还是集中式根据项目的需要来定了。这里就不说了。 3.线程、定时器,如:单机环境下我们写一个单线程,如用来像其他系统上传数 据(这个数据部允许多次上传),如果程序发布在集群环境下回发生什么情况?呵呵。变成多线程了。多个计算机内的单线程同时上传数据。所以这个时候考虑的地方就很多了!!是选择故障转移还是负载均衡都是考虑的范围。定时器也雷 同。可以参考spring quartz 集群解决方案。 4.JDBC,JDBC注意的是数据库集群的情况,如weblogic集群架构图所示,编写程序时,获得JDBC链接可以这样写, Connection con = null; try {

相关文档
相关文档 最新文档