Java操做memcached(一)

Memcached事實上,兩次Hash算法
   第一次hash算法被用於定位Memcached示例
   第二次hash算法是底部HashMap中間hash算法


Hash算法
     1.依據餘數來進行計算(事實上java中的HashMap的hash算法也是用的這樣的方式)
     2.一致性hash算法
         C的client  --->libMemcached已經實現了該功能,C的開發者直接使用它。
新浪----->Memcachedb  實現了持久化功能


java的client
 a官方的 memcached client for java
    比較穩定
    用了jdk比較早的版本號。性能稍差,並且使用的BIO
 b.spyMemcached
    NIO,線程池框架
    一致性hash
    穩定性差,報timeout異常
 c.xMemcached 
     java nio
     java 線程池
     性能比spyMemcached要好
     並且比較穩定,且和spring等框架能夠很是好的結合使用
     一致性hash
 d.淘寶包裝的javaclient
   java nio
   線程池框架
   cluster機制

   結合本地緩存java


接下來咱們使用第一種  算法


這是需要的jarspring

package com.chengxi.memc.test;

import org.junit.Test;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;

public class MemcachedTest01 {
	@Test
	public void testOne() throws Exception {
		
		MemCachedClient client = new MemCachedClient();
		//memserver地址
		String[] addr = {"192.168.0.140:11211"};
		//相應的權重
		Integer[] weight = {3};
		SockIOPool pool = SockIOPool.getInstance();
		
		pool.setServers(addr);
		pool.setWeights(weight);
		pool.setInitConn(5);
		pool.setMinConn(5);
		pool.setMaxConn(200);
		pool.setMaxIdle(1000*30*30);
		pool.setMaintSleep(30);
		
		//socket param timeout 
		pool.setNagle(false);
		pool.setSocketTO(30);
		pool.setSocketConnectTO(0);
		
		//start 
		pool.initialize();
		
		//client.set("name", "wzh");
		//System.out.println(client.get("name"));
		Student student = new Student();
		student.setId(1);
		student.setName("呵呵");
		
		client.set("student1",student);
		
		System.out.println(client.get("student1"));
	}
	
	@Test
	public void two(){
		MemCachedClient client = new MemCachedClient();
		//memserver地址
		String[] addr = {"192.168.0.140:11211","192.168.0.140:11212"};
		//相應的權重
		Integer[] weight = {5,5};
		SockIOPool pool = SockIOPool.getInstance();
		
		pool.setServers(addr);
		pool.setWeights(weight);
		pool.setInitConn(5);
		pool.setMinConn(5);
		pool.setMaxConn(200);
		pool.setMaxIdle(1000*30*30);
		pool.setMaintSleep(30);
		
		//socket param timeout 
		pool.setNagle(false);
		pool.setSocketTO(30);
		pool.setSocketConnectTO(0);
		
		//start 
		pool.initialize();
		
		for(int i  = 0;i<10;i++){
			client.set("test"+i,"test"+i);
		}
		
	}
}

官方的jar包實現了 哈希一致性緩存

也就是說  上面的 two的方法  分別將test0-9 存進了兩臺memserver中框架

假設當中一臺宕機了   獲取數據的時候不會影響另一臺socket

假設沒有實現一致哈希的話 就會影響其它server 致使所有的數據沒法獲取ide

package com.chengxi.memc.test;

import java.io.Serializable;

public class Student implements Serializable {
	private Integer id;
	private String name;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "[id:"+this.id+",name"+this.name+"]";
	}
}

這是實體類 爲了實現系列化


版權聲明:本文博主原創文章,博客,未經贊成不得轉載。memcached

相關文章
相關標籤/搜索