`

一种简单的本地cache的实现

 
阅读更多

我们经常在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>
 

 

0
10
分享到:
评论

相关推荐

    Spring来实现一个Cache简单的解决方案

    在现代软件开发中,缓存是一种常见的优化手段,用于提高应用程序的性能。Spring框架作为Java领域最流行的开发框架之一,为开发者提供了丰富的缓存管理机制。本文将详细介绍如何利用Spring框架结合ehCache实现一个...

    Java中各类Cache机制实现解决方案

    **Java Caching System (JCS)** 是一种简单而高效的缓存系统,专为Java应用程序提供缓存支持。JCS不仅支持内存缓存,还支持磁盘缓存等多种形式。它的一个重要优势在于其灵活性和易用性,使得开发者能够轻松地将缓存...

    用Memcached 实现简单Session Cache Server

    Session Cache Server是一种集中式的缓存服务,它存储了用户的会话数据,使得多个服务器实例可以共享这些数据,从而避免了在不同服务器之间同步用户状态的复杂性。在Tomcat集群中,每个节点都可能创建或更新用户...

    Go-Localcaching-GuavaCache在Go中的部分的实现

    Go语言标准库中的`sync.Map`结构提供了一种线程安全的键值存储方式,可以用于实现简单的缓存。但是,Guava Cache包含了一些高级特性,如自动过期、大小限制、缓存加载和监听器等,这些需要通过自定义代码或者第三方...

    java cache 简单应用

    Java 缓存是一种提高应用程序性能的关键技术,它通过存储经常访问的数据来减少对数据库或其他慢速资源的调用。在本文中,我们将深入探讨Java缓存的简单应用,并结合给出的资源——“JAVA的缓存应用.ppt”来进行讨论...

    JBossCache_讲解说明

    JBoss Cache是一种高效的企业级缓存解决方案,专门设计用于提高Java应用程序的性能和可用性。它不仅提供了强大的数据缓存能力,还支持集群环境下的数据一致性,使得它可以作为应用服务前端和数据库之间的中间层,...

    cache 实例

    5. **缓存实现**:在Java中,常见的缓存实现有Java内置的`java.util.concurrent.ConcurrentHashMap`(常用于简单的本地缓存实现),Google的Guava库中的`LoadingCache`,以及Spring框架提供的`@Cacheable`注解支持的...

    JavaScript_MemoryCache是一个实验性开发项目,将本地桌面环境转变为设备上的AI代理.zip

    这个项目的核心理念是利用JavaScript的跨平台特性,结合AI算法,为用户提供一种全新的交互体验,使得本地计算资源可以智能化地处理和响应用户的需求。 JavaScript,作为互联网上最广泛使用的脚本语言,它被应用于...

    第七章 企业项目开发--本地缓存guava cache1

    Guava Cache是Google Guava库中提供的一种高效、易用的本地缓存解决方案,它可以帮助减少对数据库或远程服务的频繁访问,提高应用程序的性能。Guava Cache支持自动过期、预加载、监听器等特性,使得在Java应用中实现...

    java实现cache

    在IT行业中,缓存(Cache)是一种至关重要的技术,它被广泛应用于提高系统性能和响应速度。Java作为一种多用途的编程语言,提供了多种方式来实现缓存机制。本篇文章将详细探讨如何在Java中实现缓存,以及相关的重要...

    轻量级 Swift Cache Library.zip

    总之,轻量级 Swift Cache Library 提供了一种轻便的缓存解决方案,对于想要优化应用性能的Swift开发者来说,这是一个值得尝试的工具。通过理解其核心概念和使用方法,你可以更有效地管理应用的缓存,提升用户体验。...

    前端项目-lscache.zip

    由于localStorage在浏览器中具有持久性,即使用户关闭了浏览器,存储的数据也会被保留下来,这使得lscache成为一种非常实用的前端缓存工具。 **核心功能** 1. **键值对存储**:lscache支持类似于memcache的键值对...

    cache/ehcache缓存使用

    在IT行业中,缓存是一种非常重要的技术,它用于提高数据访问速度,降低数据库负载,从而提升系统的整体性能。本文将详细讲解"cache/ehcache缓存使用"的相关知识点,包括缓存的基本概念、Ehcache的介绍、以及如何在...

    cache 数据库M语言

    MUMPS语言(通常称为M语言)是一种为医疗保健行业设计的高级编程语言和数据库系统,最初在1960年代由麻省理工学院的医学电子学研究室开发。随着技术的发展,MUMPS演变成支持多用户、多任务环境的数据库系统。M语言...

    JAVA缓存入门文档..Cache

    EHCache 作为一种高性能、灵活的缓存解决方案,在 Java 应用开发中具有广泛的应用场景。无论是作为独立的缓存服务还是与其他框架(如 Hibernate)集成使用,都能显著提升应用性能。通过对 EHCache 的了解和学习,...

    JetCache is a Java cache framework..zip

    在Java应用程序中,缓存是一种常见的技术手段,用于减少对数据库或其他资源的访问频率,从而降低系统延迟并提高整体吞吐量。 JetCache的设计理念是简单易用,它提供了丰富的API和配置选项,使得开发者能够快速地...

    改进的基于目录的Cache一致性协议

    通过综合分析全映射目录(Full-Map Directory)和有限目录(Limited Directory)的优点,并在此基础上提出一种改进方案,即在存储器层级中引入额外的内存高速缓存层。这种改进不仅限制了存储空间成本的增加,还显著...

    shiftone-cache swarmcache ehcache jcs 源码

    SwarmCache,这个名字暗示了它可能是一种分布式缓存解决方案。在分布式系统中,多个节点共享缓存数据,提高整体的可伸缩性和可靠性。SwarmCache的源码可能涉及到一致性哈希算法,以确保数据在节点间的均匀分布,以及...

    带有本地缓存机制的http连接框架

    HTTP连接框架是一种用于处理HTTP请求和响应的库,它简化了网络通信过程,提供了一种标准的方式来发送GET、POST等HTTP请求,并接收服务器返回的数据。在Android中,常见的HTTP连接框架有Volley、OkHttp、Retrofit等,...

Global site tag (gtag.js) - Google Analytics