`
sxpyrgz
  • 浏览: 72497 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

各缓存比较与怎么使用缓存

    博客分类:
  • java
阅读更多

稍为讲一下三种缓存(memcached,ehcache,oscache)的区别:
1、memcached 是老外用C写的一个开源内存缓存,支持跨平台,支持分布式(多台机器同时安装memcached,并开辟用户指定的内存空间,比如,我们在a机器开辟一个512M的内存空间,在B机器开辟一个512M的内存空间.....,那么MEMCACHED为我们提供的内存空间就是它们的总和,如果有10台电脑安装,它会有5G的内存空间为我们提供KEY/VALUE存储使用,当然现在流行的语言基本都提供了API接口,它没有硬盘缓存,所以一旦机器关机,内存中的东西就会清空。它就像一个服务器一样,它会独立的运行,独立的开辟空间)。

     它存储的原理是LRU算法进行缓存对象(可以是页面,对象,集合,文件等),所以在缓存在没有空间时,它会将最久未使用的内存给清空,来存放新的内容。
 

 2、oscached 是JAVA开发的一个支持集群的开源缓存软件,它集群的思路主要是通过JGROUPS进行集群,支持硬盘缓存,它可以在JAVA中使用进行缓存,单台机器使用缓存时,性能可能比MEMCACHED快,因为它由JAVA开发,直接与JAVA通信,性能可能会优于MEMCACHED,但是多台机器时,性能是不如MEMCACHED。

3、EHCACHED和OSCACHED基本相同,支持硬盘缓存,内存缓存,单台机器使用缓存时,性能可能比MEMCACHED快,因为它由JAVA开发,直接与JAVA通信,性能可能会优于MEMCACHED.

应用场合:MEMCACHED 一般性的大型网站都在使,EHCACHED与OSCACHED经常与HIBERNATE进行整合,做二级缓存

memcached示例

import java.net.InetSocketAddress;
import java.util.concurrent.Future;

import net.spy.memcached.AddrUtil;
import net.spy.memcached.MemcachedClient;

public class MClient {

    public static void main(String[] args){
        try{
           
        	//AddrUtil.getAddresses("192.168.0.2:11211")
	//以下是使用了多台电脑进行缓存设置
            MemcachedClient mc = new MemcachedClient(new InetSocketAddress("192.168.0.2", 11211),new InetSocketAddress("192.168.0.4", 11211));
            Future<Boolean> b = null;
 
            for(int i  = 0 ;i<100000;i++){
	            b = mc.set("neea:testDaF:ksIdno"+i, 100, "someObject"+i);
		 //主要是用与等待将值设置到内存,如果返回TRUE表示已经存到内存
	            	if(b.get().booleanValue()==true){
		           
		}
            }
         
            if(b.get().booleanValue()==true){
	            mc.shutdown();
	          }
        }
        catch(Exception ex){
        
            ex.printStackTrace();
        }
        try{
           
            MemcachedClient mc = new MemcachedClient( new InetSocketAddress("192.168.0.2", 11211),new InetSocketAddress("192.168.0.4", 11211));
            for(int i  = 0 ;i<100000;i++){
	Object b = mc.get("neea:testDaF:ksIdno"+i);
	System.out.println(b +""+mc.getState());
            }
		mc.shutdown();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }

    }
}
oscached缓存的内容主要为下
  
import java.io.File;
import java.util.Date;   
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
  
import com.opensymphony.oscache.base.NeedsRefreshException;   
import com.opensymphony.oscache.general.GeneralCacheAdministrator;   
 
public class BaseCache extends GeneralCacheAdministrator {   
    private int refreshPeriod;   
       
    private String keyPrefix;   
  
    private static final long serialVersionUID = -4397192926052141162L;   
  
    public BaseCache(int refreshPeriod,String keyPrefix) {   
        super();   
        this.keyPrefix = keyPrefix;   
        this.refreshPeriod = refreshPeriod;//CacheEntry.INDEFINITE_EXPIRY   
    }   
  
    public void put(String key, Object value) {   
        this.putInCache(this.keyPrefix + "_" + key, value);   
    }   
  
    public void remove(String key) {   
        this.flushEntry(this.keyPrefix + "_" + key);   
    }   
  
    public void removeAll(Date date) {   
        this.flushAll(date);   
    }   
  
    public void removeAll() {   
        this.flushAll();   
    }   
  
    public Object get(String key) throws Exception {   
        try {   
            return this.getFromCache(this.keyPrefix + "_" + key,   
                    this.refreshPeriod);   
        } catch (NeedsRefreshException e) {   
            this.cancelUpdate(this.keyPrefix + "_" + key);   
            throw e;   
        }   
  
    }   
       
    public static void main(String[] args) {   
        try {   
            BaseCache cache = new BaseCache(100000000,"myCache");   
            Date date = new Date();   
            ReadProperties pu = new ReadProperties("my.properties");
    		System.out.println(pu.getP().size());
    		Hashtable ht=(Hashtable) pu.getP().clone();
    		System.out.println(ht.toString());
    		System.out.println(ht.get("age"));
    	 
    		Enumeration e=pu.getP().propertyNames();
    		while(e.hasMoreElements()){
    			String name=(String) e.nextElement();
    			System.out.print(name);
    			System.out.println(ht.get(name));
    			cache.put(name, ht.get(name)); 
    			//System.out.print(pu.getValue((String)e.nextElement()));
    		}
    		Person person = new Person();
    		
    		person.setName("rgz");
    		cache.put("person", person);
                                   
            //cache.removeAll();
                   System.out.println(cache.get("person"));   
        } catch (Exception e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
        }   
    }   
}  
 

 

分享到:
评论

相关推荐

    浏览器缓存机制介绍与缓存策略剖析.pptx

    浏览器缓存机制介绍与缓存策略剖析 浏览器缓存机制是指浏览器在请求资源时,对已经请求过的资源进行缓存,以便下次请求时可以直接从缓存中获取,从而提高页面加载速度和减少服务器的压力。本文将详细介绍浏览器缓存...

    本地缓存与分布式缓存优缺点,使用

    本地缓存与分布式缓存优缺点、使用场景 缓存是计算机系统中的一种优化技术,通过将频繁访问的数据存储在内存中,以减少对外部存储设备的访问次数,提高系统的响应速度和性能。本文将详细介绍本地缓存与分布式缓存的...

    深入理解MyBatis中的一级缓存与二级缓存

    "深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...

    面试中缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级怎么解答?.docx

    缓存更新涉及到如何保持缓存与数据库数据的一致性。常见的策略包括: - **失效更新**:当数据库中的数据发生变化时,让缓存失效,下次请求时自动重新加载。 - **主动更新**:在更新数据库的同时,同步更新缓存。 ...

    使用 内存缓存与硬盘缓存异步下载图片

    "使用内存缓存与硬盘缓存异步下载图片"这一主题涉及到的关键技术主要包括内存缓存、硬盘缓存、AsyncTask以及GridView。下面将详细阐述这些知识点。 1. **内存缓存**: 内存缓存是一种快速的数据存储机制,它将经常...

    redis页面缓存html使用redis实现页面缓存.docx

    使用 Redis 实现页面缓存 本文档主要介绍了使用 Redis 实现页面缓存的方法,包括缓存 key 的设计、缓存实现的思路和代码实现。 页面缓存的目的:页面缓存的主要目的是为了提高网站的访问速度和用户体验。通过将...

    redis本地缓存与redis缓存

    在“redis本地缓存与redis缓存”的主题中,我们将深入探讨这两种缓存方式及其各自的特点。 首先,我们要理解什么是本地缓存。本地缓存指的是将数据存储在应用程序的内存中,通常是Java的HashMap、Guava Cache或C#的...

    Java缓存技术的使用实例

    Java缓存技术是提高应用程序性能的关键工具,尤其是在处理大量数据时。...这个“Java缓存技术的使用实例”提供了一个动手学习的机会,加深了对缓存工作原理的理解,并为实际开发中的缓存使用提供了参考。

    C#缓存的使用

    四、缓存策略与优化 1. 时间过期:设置缓存的生命周期,到达预设时间后自动移除。 2. 固定容量:限制缓存大小,当达到上限时,根据LRU(Least Recently Used)或LFU(Least Frequently Used)策略淘汰旧数据。 3. ...

    spring简单的缓存

    - `@CachePut`:与`@Cacheable`类似,但它总是会执行方法并更新缓存,即使缓存中已经有对应的结果。 4. **缓存配置**: 缓存的配置可以很灵活,可以定义多个缓存,每个缓存有自己的策略,比如过期时间、最大元素...

    java map 实现缓存技术

    7. **缓存击穿与缓存雪崩**:处理大量并发请求同时导致缓存失效(击穿)或整个缓存服务崩溃(雪崩)的问题,可以通过加锁、使用分布式锁、预热缓存等方式解决。 8. **监控与统计**:为了优化缓存性能,需要收集和...

    缓存、缓存算法和缓存框架简介.docx

    1. **Ehcache**:一个广泛使用的开源缓存解决方案,支持本地缓存和分布式缓存,提供了丰富的API和配置选项。 2. **Redis**:一个内存数据结构存储系统,可用作数据库、缓存和消息中间件,具有高性能和丰富的数据结构...

    hibernate一级缓存和二级缓存的区别与联系

    一级缓存是 Hibernate 内置的,默认开启,与 Session 对象关联。它是一个事务范围的缓存,也就是说,每个 Hibernate Session 对应一个一级缓存,仅在当前事务中有效。一级缓存主要存储了 Session 在当前事务中加载和...

    asp.net缓存 缓存

    1. 数据一致性:缓存中的数据可能与数据库中的数据不同步,需要有合适的策略来处理这种情况,例如设置缓存过期时间或使用缓存 invalidation机制。 2. 内存管理:大量缓存可能导致内存占用过高,影响其他应用程序的...

    geoserver配置图层缓存

    1. 分级缓存:对于大比例尺图层,可以考虑使用分级缓存策略,根据不同的缩放级别分层存储,以减少存储空间并优化访问。 2. 异步缓存:Geoserver支持异步生成缓存,这允许在后台进行缓存操作,不会阻塞其他服务。 3...

    geoserver gwc缓存的生成与失效

    Geoserver GWC 缓存的生成与失效 Geoserver 是一个基于开源的 GIS 服务器,可以提供强大的地图服务功能。其中,GWC(GeoWebCache)是 Geoserver 中的一个重要组件,负责生成和管理地图缓存。缓存的生成和失效是 GWC...

    SpringBoot项目 MybatisPlus使用 Redis缓存.zip

    在SpringBoot项目中,MybatisPlus与Redis的整合可以实现高效的数据缓存,提升应用程序的性能。本项目中,我们看到“SpringBoot项目 MybatisPlus使用 Redis缓存.zip”主要涉及了SpringBoot、MybatisPlus和Redis三个...

    缓存、缓存算法和缓存框架简介 - 文章 - 伯乐在线.pdf

    命中率是指访问缓存时成功获取数据的次数与总访问次数的比例。命中率越高,说明缓存效果越好,能够有效减少对后端数据存储系统的访问压力。而缓存未命中(Cache Miss)则是指访问缓存时未能找到所需数据,需要从原始...

    SSH使用缓存例子

    在这个“SSH使用缓存例子”中,我们将探讨SSH框架如何利用Hibernate的二级缓存来提升应用性能。 SSH框架中的Hibernate是负责数据库操作的部分,而Hibernate的二级缓存是一种跨会话的缓存机制,它可以存储在多个会话...

    CheckBox+ListView混合使用,并缓存

    CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存CheckBox+ListView混合使用,并缓存...

Global site tag (gtag.js) - Google Analytics