我们经常在web应用中需要对某些数据进行本地cache,特别是一些存在数据库或者其他需要访问其他服务的数据进行本地cache,如果这些数据更新不频繁,或者很少更新,而且对数据更新允许有一定的时间才反映到线上的话,那么下面这种方案个人觉得比较简单方便,不需要使用memcache等集中式缓存之类来实现。
直接在web应用中使用定时器和InitializingBean来实现即可:
请看service类:
下面这个idNameCacheMap就是我们需要进行数据缓存的对象,在spring加载完之后的afterPropertiesSet获取缓存数据进行加载,然后使用pring的quartz定时器进行定时更新,
这种方式简单,而且不用担心集群中不同服务器数据的不一致,定时器更新能够保证数据的不一致性的时间非常短,而且应用已启动就会加载数据,定时器更新的频率更新需要进行设置。我看到有很多使用timer类来处理,在java代码中启动一个线程,线程启动后就加载数据,然后sleep一段时间后更新缓存数据。这种其实应用的不同服务器启动的时间相差比较大,可能导致服务器间数据不一致时间会比较长。
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
public class LocalCacheService implements InitializingBean{
private Map<Long, String> idNameCacheMap = new HashMap<Long, String>();
@Resource
private DataService dataService;
public void update(){
Map<Long,String> tmpMap = dataService.getLastest();
if(tmpMap != null && !tmpMap.isEmpty()){
this.idNameCacheMap = tmpMap;
}
}
@Override
public void afterPropertiesSet() throws Exception {
try {
update();
} catch (Exception e) {
}
}
}
<bean id="localCacheService" class="org.LocalCacheService" >
</bean>
<bean id="localCacheListenerTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<bean
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref=""localCacheService"">
</property>
<property name="targetMethod">
<value>update</value>
</property>
</bean>
</property>
<property name="cronExpression">
<value>0 0/30 * * * ?</value>
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref bean="localCacheListenerTrigger" />
</list>
</property>
</bean>
分享到:
相关推荐
在现代软件开发中,缓存是一种常见的优化手段,用于提高应用程序的性能。Spring框架作为Java领域最流行的开发框架之一,为开发者提供了丰富的缓存管理机制。本文将详细介绍如何利用Spring框架结合ehCache实现一个...
**Java Caching System (JCS)** 是一种简单而高效的缓存系统,专为Java应用程序提供缓存支持。JCS不仅支持内存缓存,还支持磁盘缓存等多种形式。它的一个重要优势在于其灵活性和易用性,使得开发者能够轻松地将缓存...
Session Cache Server是一种集中式的缓存服务,它存储了用户的会话数据,使得多个服务器实例可以共享这些数据,从而避免了在不同服务器之间同步用户状态的复杂性。在Tomcat集群中,每个节点都可能创建或更新用户...
Go语言标准库中的`sync.Map`结构提供了一种线程安全的键值存储方式,可以用于实现简单的缓存。但是,Guava Cache包含了一些高级特性,如自动过期、大小限制、缓存加载和监听器等,这些需要通过自定义代码或者第三方...
Java 缓存是一种提高应用程序性能的关键技术,它通过存储经常访问的数据来减少对数据库或其他慢速资源的调用。在本文中,我们将深入探讨Java缓存的简单应用,并结合给出的资源——“JAVA的缓存应用.ppt”来进行讨论...
JBoss Cache是一种高效的企业级缓存解决方案,专门设计用于提高Java应用程序的性能和可用性。它不仅提供了强大的数据缓存能力,还支持集群环境下的数据一致性,使得它可以作为应用服务前端和数据库之间的中间层,...
5. **缓存实现**:在Java中,常见的缓存实现有Java内置的`java.util.concurrent.ConcurrentHashMap`(常用于简单的本地缓存实现),Google的Guava库中的`LoadingCache`,以及Spring框架提供的`@Cacheable`注解支持的...
这个项目的核心理念是利用JavaScript的跨平台特性,结合AI算法,为用户提供一种全新的交互体验,使得本地计算资源可以智能化地处理和响应用户的需求。 JavaScript,作为互联网上最广泛使用的脚本语言,它被应用于...
Guava Cache是Google Guava库中提供的一种高效、易用的本地缓存解决方案,它可以帮助减少对数据库或远程服务的频繁访问,提高应用程序的性能。Guava Cache支持自动过期、预加载、监听器等特性,使得在Java应用中实现...
在IT行业中,缓存(Cache)是一种至关重要的技术,它被广泛应用于提高系统性能和响应速度。Java作为一种多用途的编程语言,提供了多种方式来实现缓存机制。本篇文章将详细探讨如何在Java中实现缓存,以及相关的重要...
总之,轻量级 Swift Cache Library 提供了一种轻便的缓存解决方案,对于想要优化应用性能的Swift开发者来说,这是一个值得尝试的工具。通过理解其核心概念和使用方法,你可以更有效地管理应用的缓存,提升用户体验。...
由于localStorage在浏览器中具有持久性,即使用户关闭了浏览器,存储的数据也会被保留下来,这使得lscache成为一种非常实用的前端缓存工具。 **核心功能** 1. **键值对存储**:lscache支持类似于memcache的键值对...
目前有四种实现RedisCache、TairCache(未在 github 上开源)、CaffeineCache(内存中)和简单LinkedHashMapCache(内存中)。JetCache 的完整功能通过统一的Cache API来操作缓存。使用带有 TTL(生存时间)和两级...
在IT行业中,缓存是一种非常重要的技术,它用于提高数据访问速度,降低数据库负载,从而提升系统的整体性能。本文将详细讲解"cache/ehcache缓存使用"的相关知识点,包括缓存的基本概念、Ehcache的介绍、以及如何在...
MUMPS语言(通常称为M语言)是一种为医疗保健行业设计的高级编程语言和数据库系统,最初在1960年代由麻省理工学院的医学电子学研究室开发。随着技术的发展,MUMPS演变成支持多用户、多任务环境的数据库系统。M语言...
EHCache 作为一种高性能、灵活的缓存解决方案,在 Java 应用开发中具有广泛的应用场景。无论是作为独立的缓存服务还是与其他框架(如 Hibernate)集成使用,都能显著提升应用性能。通过对 EHCache 的了解和学习,...
在Java应用程序中,缓存是一种常见的技术手段,用于减少对数据库或其他资源的访问频率,从而降低系统延迟并提高整体吞吐量。 JetCache的设计理念是简单易用,它提供了丰富的API和配置选项,使得开发者能够快速地...
通过综合分析全映射目录(Full-Map Directory)和有限目录(Limited Directory)的优点,并在此基础上提出一种改进方案,即在存储器层级中引入额外的内存高速缓存层。这种改进不仅限制了存储空间成本的增加,还显著...
SwarmCache,这个名字暗示了它可能是一种分布式缓存解决方案。在分布式系统中,多个节点共享缓存数据,提高整体的可伸缩性和可靠性。SwarmCache的源码可能涉及到一致性哈希算法,以确保数据在节点间的均匀分布,以及...