memcached-java客户端xmemcached简单使用

本文详细介绍了如何使用Java客户端XMemcached进行分布式缓存操作,包括增删改查和节点动态管理,并展示了如何使用该客户端处理序列化的Java对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前一篇文章简单说了下如何安装memcached,想到了memcached是分布式的缓存框架,所以自己在公司的3台测试机上安装了下。

2. 关于什么是xmemcached就不多说了,其实就是实现了memcached的java客户端,关于分布式下一篇会稍微详细点介绍,这里只要知道这个分布式其实是客户端的分布式,其实是没有主从节点的概念的。

3. 直接贴代码,看看如何使用

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import net.rubyeye.xmemcached.CASOperation;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.exception.MemcachedException;
import net.rubyeye.xmemcached.utils.AddrUtil;

public class Cache {

	private MemcachedClientBuilder builder = null;
	private MemcachedClient client = null;

	public Cache(String address, int[] weight) {
		builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(address), weight);
		builder.setConnectionPoolSize(5);
		try {
			client = builder.build();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void set(String key, int exp, Object value) {
		try {
			if (!client.set(key, exp, value)) {
				System.err.println("set error, key is " + key + " value is " + value);
			}
		} catch (TimeoutException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (MemcachedException e) {
			e.printStackTrace();
		}
	}

	public void delete(String key) {
		try {
			client.delete(key);
		} catch (TimeoutException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (MemcachedException e) {
			e.printStackTrace();
		}
	}

	public void update(String key, final Object value) {
		try {
			client.cas(key, 10, new CASOperation<Object>() {
				public int getMaxTries() {
					return 1;
				}

				public Object getNewValue(long currentCAS, Object currentValue) {
					return value;
				}
			});
		} catch (TimeoutException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (MemcachedException e) {
			e.printStackTrace();
		}
	}

	public Object get(String key) {
		try {
			return client.get(key);
		} catch (TimeoutException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (MemcachedException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public void addServer(String server, int port, int weight) {
		try {
			client.addServer(server, port, weight);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void removeServer(String hostList) {
		client.removeServer(hostList);
	}
}
这个类做了一个特别简单的封装,包括了增删改查还有动态添加删除节点,其实就是简单得使用了下api,其实api很多,大家可以自己查api

下面是一个测试类

public static void main(String[] args) {
//		testCRUD();
		testSerObject();
	}

	public static void testCRUD() {
		String address = "xx01:11211 xx02:11211 xx03:11211";
		Cache cache = new Cache(address, new int[] { 1, 1, 1 });
		cache.set("hello", 10, "test");
		System.out.println(cache.get("hello"));
		cache.update("hello", "ssss");
		System.out.println(cache.get("hello"));
		cache.delete("hello");
		System.out.println(cache.get("hello"));
	}
	
	public static void testSerObject() {
		String address = "arreat00:11211 arreat01:11211 arreat02:11211";
		Cache cache = new Cache(address, new int[] { 1, 1, 1 });
		User user = new User();
		user.setId(1);
		user.setMobile("13564316073");
		user.setEmail("qianjc@unionpaysmart.com");
		user.setPasswd("ttt");
		user.setUserName("qianjc");
		List<String> asseat = new ArrayList<String>();
		asseat.add("asseat0");
		asseat.add("asseat1");
		
		Map<String, String> car = new HashMap<String, String>(); 
		car.put("car1", "val1");
		car.put("car2", "val2");
		
		user.setAsseat(asseat);
		user.setCar(car);
		
		user.setBook(buildBook(1, "memcached进阶", "smart出版"));
		user.setBooks(buildBooks());

//		cache.set("user1", 0, user);
		System.out.println(cache.get("user1"));
	}
	
	
	public static Book buildBook(int id, String name, String pulish) {
		Book book = new Book();
		book.setId(id);
		book.setName(name);
		book.setPulish(pulish);
		return book;
	}
	
	public static List<Book> buildBooks() {
		List<Book> books = new ArrayList<Book>();
		
		for (int i = 0; i < 2; ++i) {
			books.add(buildBook(i, "memcached进阶" + i, "smart出版" + i));
		}
		return books;
	}
}
可以看到memcached不仅仅支持简单String,int等类型,只要实现了Serializable接口的java序列化对象都可以



具体怎么使用可以查api,还是比较简单的!!
也可以参考一篇博客:http://blog.youkuaiyun.com/ljhabc1982/article/details/6338898

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值