memcached-Xmemcached

package memcache;

/**
*
* XMemcached同样是基于java nio的客户端, java nio相比于传统阻塞io模型来说 有效率高(特别在高并发下)和资源耗费相对较少的优点。
* 传统阻塞IO为了提高效率,需要创建一定数量的连接形成连接池, 而nio仅需要一个连接即可(当然,nio也是可以做池化处理),
* 相对来说减少了线程创建和切换的开销,这一点在高并发下特别明显。
* 因此XMemcached与Spymemcached在性能都非常优秀,在某些方面(存储的数据比较小的情况下)
* Xmemcached比Spymemcached的表现更为优秀,具体可以看这个Java Memcached Clients Benchmark。
*
*/
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 Xmemcached {
private MemcachedClientBuilder builder = null;
private MemcachedClient client = null;

public Xmemcached(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);
}

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

public static void testCRUD() {
    String address = "arreat00:11211 arreat01:11211 arreat02:11211";
    Xmemcached cache = new Xmemcached(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 = "127.0.0.1:11211";
    Xmemcached cache = new Xmemcached(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;
}

}

class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = -5730809227893545651L;
private int id;
private List books;
private Book book;
private Map

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值