`

一种简单的本地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
分享到:
评论

相关推荐

    j2cache:java实现的缓存策略组件,支持多种缓存产品,开发人员可以像Map一样使用,简单方便。支持的存储方案:jvm\redis\ignite\hazelcast\guava

    使用j2cache就可以简单的实现这种切换,j2cache实现了Map接口可以更友好的切换旧代码,这对于开发人员来说是透明的。 主要特点 针对K-V缓存提供一种扩展的思路,并且统一缓存的访问接口,开发人员可以在系统中灵活的...

    LocalCache:增强现实世界场景的 LocalStorage API

    以便您可以检查和/或清理不再需要的值) 缓存存储在存储中的值的一些选项,以便您不需要重新获取(和重新解析)它们特别是在开发过程中,提供一种简单的方法来删除命名空间......但不是当前域(例如本地主机)存储的...

    herojs:一个简单灵活的 javascript 库,用于本地存储、地理位置和缓存

    英雄JS Hero.js 是一个 Javascript 库,旨在为网页提供本地或离线存储、...找到一种更好的方法来实现方法链(无需使用 .ok() ) 在 hero.db 上实现更好的查询 实现数据库架构 实现自增字段 执照 干杯! 伊万·鲁比

    java开源包3

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java 面试题 总结

    exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。 16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。 如果数据将在线程间共享。例如正在写的数据以后可能被...

    java开源包4

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    .NET 分布式组件库 Exceptionless Foundatio.zip

    Getting Started缓存缓存是一种空间换时间的技术,你可以通过缓存来快速的获取一些数据。Foundatio Cache 提供了一致的接口ICacheClient 来很容易的存储或者读取缓存数据,并且提供了4中不同的缓存客户端的实现。...

    超级有影响力霸气的Java面试题大全文档

     对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。  对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序...

    asp.net知识库

    .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 ...

    JAVA上百实例源码以及开源项目源代码

    简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 ...

    C#基类库(苏飞版)

    8.向数据库里插入图像格式的字段(和上面情况类似的另一种实例) 9.执行一条计算查询结果语句,返回查询结果(object)。 10.执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行...

    java开源包1

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java开源包11

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java开源包2

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java开源包6

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java面试宝典

    70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73...

    java开源包5

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java开源包10

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java开源包8

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

    java开源包7

    Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,秒杀当前流行的模板引擎。而且还易学易用。 Java的COM桥 JCom JCom (Java-COM Bridge) 可以...

Global site tag (gtag.js) - Google Analytics