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

稍为讲一下三种缓存(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();   
        }   
    }   
}  
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值