java操作memcache简单例子

来源:互联网 发布:管家公进销存软件 编辑:程序博客网 时间:2024/05/20 19:48

简单例子

对于用户来说,最主要的功能是存取数据,假设我们有一个memcached节点IP地址或者域名是host,端口是11211,一个简单的存取数据的例子如下:

    MemcachedClientBuilder builder = new XMemcachedClientBuilder(                                        AddrUtil.getAddresses("localhost:11211"));    MemcachedClient memcachedClient = builder.build();    try {                memcachedClient.set("hello", 0, "Hello,xmemcached");                String value = memcachedClient.get("hello");                System.out.println("hello=" + value);                memcachedClient.delete("hello");                value = memcachedClient.get("hello");                System.out.println("hello=" + value);    } catch (MemcachedException e) {                System.err.println("MemcachedClient operation fail");                e.printStackTrace();    } catch (TimeoutException e) {                System.err.println("MemcachedClient operation timeout");                e.printStackTrace();    } catch (InterruptedException e) {                // ignore    }    try {              //close memcached client                memcachedClient.shutdown();    } catch (IOException e) {                System.err.println("Shutdown MemcachedClient fail");                e.printStackTrace();    }

为了节省篇幅,本文的所有代码示例都没有给出完整的package名,具体包名请查询javadoc或者使用IDE工具帮助引入。

因为XMemcachedClient的创建有比较多的可选项,因此提供了一个XMemcachedClientBuilder类用于构建MemcachedClient。MemcachedClient是主要接口,操作memcached的主要方法都在这个接口,XMemcachedClient是它的一个实现。传入的memcached节点列表要求是类似"host1:port1 host2:port2 …"这样的字符串,通过AddrUtil.getAddresses方法获取实际的IP地址列表。

存储数据是通过set方法,它有三个参数,第一个是存储的key名称,第二个是expire时间(单位秒),超过这个时间,memcached将这个数据替换出去,0表示永久存储(默认是一个月),第三个参数就是实际存储的数据,可以是任意的java可序列化类型。获取存储的数据是通过get方法,传入key名称即可。如果要删除存储的数据,这是通过delete方法,它也是接受key名称作为参数。XMemcached由于是基于nio,因此通讯过程本身是异步的,client发送一个请求给memcached,你是无法确定memcached什么时候返回这个应答,客户端此时只有等待,因此还有个等待超时的概念在这里。客户端在发送请求后,开始等待应答,如果超过一定时间就认为操作失败,这个等待时间默认是5秒(1.3.8开始改为5秒,之前是1秒),上面例子展现的3个方法调用的都是默认的超时时间,这三个方法同样有允许传入超时时间的重载方法,例如

   value=client.get(“hello”,3000);

就是等待3秒超时,如果3秒超时就跑出TimeutException,用户需要自己处理这个异常。因为等待是通过调用CountDownLatch.await(timeout)方法,因此用户还需要处理中断异常InterruptException。最后的MemcachedException表示Xmemcached内部发生的异常,如解码编码错误、网络断开等等异常情况。

0 0