一个网站的实现不可避免的需要处理大量的内存数据,这大多都出于网站性能的考虑和解决I/O瓶颈问题,如JavaEye网站的首页排名数据和博客频道的排名等数据,都进行了缓存处理,而且并非是实时的,特别是首页的排名数据几乎是一天才会更新一次的,同样,QQ等门户网站也存在大量静态化内存数据,所以一个网站缓存的处理是至关重要的,并且好的架构需要做到代码无侵入性,也就是说内存的更新,日志的记录等操作都应该是“切面”处理,在我后来的网站开发中,我一般都会定义一个缓存类,如下:
public static LinkedList<Login> regRecentUser=new LinkedList(); //最近注册人员
public static LinkedList<Login> regLoginedUser=new LinkedList();//最近登录人员
public static List<Topic> hotTopic=new ArrayList();//最热发表话题
并且会自己实现对象的排序接口,如最热门的话题,可能是按话题对象的某几个属性的权重分配来实现的,类似代码如下:
public class TopicCompare implements Comparator{
//热门的话题与顶的数目和评论的数目有关,权重分配比例为4:6
public int compare(Object arg0, Object arg1) {
if((arg0 instanceof Topic) && (arg1 instanceof Topic)){
double y=((Topic)arg0).getAgreeit()*0.4 + ((Topic)arg0).getCmtnum()*0.6;
double h=((Topic)arg1).getAgreeit()*0.4 + ((Topic)arg1).getCmtnum()*0.6;
if(y==h) return 0;
else if(y>h) return 1;
else return -1;
}
return 0;
}
}
缓存的切面更新一般我喜欢使用Spring AOP,简单而实用,一般需求都能满足,Aspect语法比较复杂,没时间看,呵呵
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
import com.common.cache.WebCacheUtils;
import com.cxlh.dao.hibernate.Login;
public class LoginAdvice implements AfterReturningAdvice {
public void afterReturning(Object returnValue, Method method, Object[] args,
Object target) throws Throwable {
if(method.getName().equalsIgnoreCase("checkUserLogin") && !returnValue.toString().equalsIgnoreCase("null")){
//最近登录用户缓存更新
System.out.println("=======update login cache");
WebCacheUtils.addRegLoginedUser((Login)returnValue);
}else if(method.getName().equalsIgnoreCase("addUser")){
//更新最新注册用户缓存
System.out.println("=======update add user cache");
WebCacheUtils.addRegRecentUser((Login)args[0]);
}
}
}
这样,最近登录和最新注册用户的缓存数据都会按自定义排序规则进行实时的缓存更新了,不知道这样的实时缓存处理对于大并发量的网站是否能满足要求,没有进行过性能测试!慎用!!!
分享到:
相关推荐
### 网站缓存核心技术概述 随着互联网技术的飞速发展,缓存技术成为支撑大规模网站高效稳定运行的关键组成部分之一。本文旨在深入探讨网站缓存的核心技术,并着重分析三种主流缓存技术——Ehcache、Memcached及...
在这个项目中,WebSocket被用来实现实时通信,当管理端添加新的数据到数据库时,服务器可以通过WebSocket连接向所有已连接的客户端发送更新,使得用户端能够实时看到数据库的变化。 2. **MySQL**:MySQL是一个流行...
ASP.NET数据缓存技术是微软开发的Web应用程序框架ASP.NET中的一个重要特性,它主要用于提高网站性能,通过将常用数据暂存于内存中,避免频繁访问数据库,从而减少服务器的负载和响应时间。在这个主题中,我们将深入...
页面部分缓存针对的是动态页面中的某些部分,它缓存不变的数据片段,而动态变化的数据实时更新。这可以通过类似输出缓冲技术或其他页面片段缓存技术(例如ESI)实现。ESI技术允许缓存动态内容的部分片段,而这些片段...
具体来说,该代码通过检测缓存数据的有效时间来决定是否需要更新缓存。当缓存数据的时效超过预设阈值(本例中为300秒)时,将会触发缓存更新机制。 #### 代码解析 1. **缓存初始化**: ```vbscript if ...
1. **有效期设置**:合理设置缓存的有效期,确保缓存数据既不过时也不过于频繁地更新,以平衡性能和数据新鲜度。 2. **缓存组设置**:根据不同类型的页面或数据设置不同的缓存组,便于管理和控制。 3. **静态缓存*...
存取缓存数据通常包括查找缓存、获取数据和更新缓存三个步骤: 1. 查找缓存:首先,我们需要根据键值(key)检查缓存中是否存在所需的数据。 ```vbscript Dim cachedData If Not IsNull(Application("cacheKey")) ...
总结一下,ASP.NET数据缓存是提升Web应用性能的重要工具,VS2003和VB提供了丰富的API来实现和管理缓存。通过理解和应用这些技术,开发者能够减少数据库压力,提高用户体验,并优化整体系统性能。对于处理大量用户...
同时,缓存技术虽然能够显著提升性能,但也存在潜在的风险,例如缓存数据的过时问题。因此,开发者需要根据实际情况权衡性能提升与数据一致性的关系,确保在用户体验和数据准确性之间找到最佳平衡点。在某些对数据...
3. 使用缓存数据:在需要显示静态数据的地方,首先尝试从`HttpRuntime.Cache`中获取,如果找到则直接使用,否则重新加载并更新缓存。 此外,ASP.NET还提供了`OutputCache`指令和`OutputCacheProvider`接口,用于...
在代码中,我们可以使用`Cache.Insert()` 方法添加缓存项,使用`Cache.Remove()` 删除缓存,或者通过`Cache.Get()` 获取缓存数据。 总之,ASP.NET缓存是提高应用程序性能的有效手段,但也需要谨慎使用,以确保数据...
应用程序缓存则更接近业务逻辑层面,通常是在应用程序内部实现,比如在数据库查询结果、计算结果等频繁使用的数据上进行缓存。这种缓存方式可以减少数据库访问,加快页面渲染速度。例如,Java的Spring框架中的...
网站缓存机制是提高网页加载速度和降低服务器压力的关键技术,尤其在大型网站中不可或缺。简单来说,缓存就是将用户频繁访问的数据暂时存储在离用户更近的地方,以便下次访问时能更快地获取数据。这可以显著减少网络...
Storm拓扑的设计需要依据具体的数据处理需求,本文介绍的业务模型中,将网站日志数据通过Kafka实时缓存后,由MySpout组件拉取并随机分组,发送至FmtLogBolt进行数据清洗和过滤。之后,FmtLogBolt将清洗后的数据转发...
在IT行业中,数据缓存是一种优化网站性能的关键技术,特别是在ASP.NET环境中。"Web数据缓存大全"这个项目深入探讨了如何在ASP.NET中有效地利用数据缓存来提高应用程序的响应速度,降低数据库负载。以下将详细介绍...
本篇文章将深入探讨如何在nopCommerce 4.4中设置服务实例持久化默认缓存数据,并有效利用Redis存储缓存数据。 首先,理解服务实例持久化是关键。在ASP.NET应用程序中,服务实例持久化意味着在多个请求之间保持服务...
2. 页面部分缓存:有时,页面中某些区域需要实时更新,而其他部分则可以保持静态。在这种情况下,页面部分缓存就派上用场了。通过使用 Substitution 控件,我们可以指定页面的某一部分不参与全局缓存,而每次请求...
springboot+EHcache 实现文章浏览量的缓存和超时更新 springboot+EHcache 实现文章浏览量的缓存和超时更新是指通过springboot...同时,EHcache的缓存机制可以实时地更新缓存中的数据,从而确保数据的实时性和准确性。
页面缓存技术对于提高动态网站的性能非常有效: 1. **动态页面静态化**:将动态生成的页面转换为静态HTML文件,减少服务器处理时间。 2. **Servlet缓存**:通过Servlet容器支持的缓存机制来缓存页面输出。 3. **...
在ASP.NET 2.0中,缓存数据是提高应用程序性能的重要手段,特别是在高流量的网站中。本篇文章主要讨论如何在程序启动阶段缓存数据,以减少不必要的数据库查询,提高响应速度。这一策略适用于那些几乎不变或者变化不...