memcached api java_MemCached缓存技术(四)操作MemCached(2)【Java客户端方式-Java API】...

本文介绍了如何使用Java API操作Memcached缓存,包括插入字符串、查询数据、存储自定义对象以及实现基于客户端的分布式插入。在存储对象时需要注意实现Serializable接口以确保可序列化。通过示例代码展示了如何均衡地将数据分布到多个Memcached实例上。
摘要由CSDN通过智能技术生成

MemCached缓存技术(四)操作MemCached

Java客户端方式-Java API

注:lib目录下面要添加jar包-客户端路由算法:

aeba8b38f8c1e31d7bda0e19bf69b850.png

然后手动引入jar包:

2d6f8daf35f95fbb4db1b90f606622be.png

一、插入数据(字符串)

fd98ee8deeeaaff25b1a2610796f87bc.png

****自己操作****

Java代码:

/*** 一、插入数据

*@throwsException*/

public static void a() throwsException {//一、先建立Memcached的实例,指定服务器的地址和端口号

MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("192.168.212.111",1121));//二、写数据//exp:过期时间

Future future = memcachedClient.set("key2", 10, "Hello World");if(future.get().booleanValue()){//表示插入成功,关掉该实例

memcachedClient.shutdown();

}

}

接着用Telnet方式读取数据:

get key2

VALUE key2 0 11

Hello World

END

二、查询数据

dd6d476371f184983221a5a58637f23b.png

****自己操作****

Java代码:

/*** 二、读取数据

*@throwsException*/

public static void b() throwsException {//一、先建立MemCached的实例,指定服务器的地址和端口号

MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("192.168.212.111", 1121));//二、读数据

Object object = memcachedClient.get("key1");//打印

System.out.println("取到的值是:"+object);

memcachedClient.shutdown();

}

结果:

dd0dce1c67329cfb7203225e88553fd6.png

三、插入数据(对象)--自定义内部类

Java代码:

/*** 三、插入数据(对象)--自定义内部类

*@throwsException*/

public static void c() throwsException {//一、先建立MemCached的实例,指定服务器的地址和端口号

MemcachedClient memcachedClient = newMemcachedClient(new InetSocketAddress("192.168.212.111", 1121));//二、读数据

Future future = memcachedClient.set("key3", 10, newStudent());if(future.get().booleanValue()){//表示插入成功,关掉该实例

memcachedClient.shutdown();

}

}

在这个Java_class外面自定义一个Student内部类/*** 自定义内部类*/

class Student {}

执行后发现报错:

Exception in thread "main" java.lang.IllegalArgumentException: Non-serializable object

Caused by: java.io.NotSerializableException: memCached_API.Student

因为:Student没有实现序列化,他就不能在网络中传输。

所以对Student类进行修改:

/*** 自定义内部类*/

class Student implements Serializable {}

再次执行就能成功写入了

四、基于客户端的分布式插入数据

a39d15f9f539fdbb04b19ca45ae5193e.png

****自己操作****

Java代码:

/*** 四、基于客户端的分布式插入数据

*@throwsException*/

public static void d() throwsException {//一、创建含有服务器IP和端口号的列表

List list = newArrayList();

list.add(new InetSocketAddress("192.168.212.111", 1121));

list.add(new InetSocketAddress("192.168.212.111", 1122));

list.add(new InetSocketAddress("192.168.212.111", 1123));

MemcachedClient client= newMemcachedClient(list);//二、循环写20次

for(int i=0;i<20;i++){

System.out.println("插入数据:"+i);

client.set("key112"+i,0,"value"+i); //exp=0 :永远不过期

Thread.sleep(1000); //睡1秒钟

}

client.shutdown();//关闭MemCached

}

结果:

114add09582f8956c30a255911688e32.png

060e633b0e627459618b93075f0a4c79.png

现在到192.168.212.111的1121端口上取数据:

9478b119fd385e449bc8e5536947128d.png

c00b2000fc9ac2217c9be813c3626157.png

515eba2d0ee7456d788887fed80eeca6.png

这就能看出:MemCached的路由算法可将数据均衡地分配到各个MemCached实例上(端口号不同)

五、Java代码整体实现

packagememCached_API;importnet.spy.memcached.MemcachedClient;importjava.io.Serializable;importjava.net.InetSocketAddress;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.Future;/*** @Author : ASUS and xinrong

* @Version : 2020/8/22 & 1.0*/

public classMemCached_API_3ge {public static void main(String[] args) throwsException {//a();//b();//c();

d();

}/*** 一、插入数据

*@throwsException*/

public static void a() throwsException {//一、先建立Memcached的实例,指定服务器的地址和端口号

MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("192.168.212.111",1121));//二、写数据//exp:过期时间

Future future = memcachedClient.set("key2", 10, "Hello World");if(future.get().booleanValue()){//表示插入成功,关掉该实例

memcachedClient.shutdown();

}

}/*** 二、读取数据

*@throwsException*/

public static void b() throwsException {//一、先建立MemCached的实例,指定服务器的地址和端口号

MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("192.168.212.111", 1121));//二、读数据

Object object = memcachedClient.get("key1");//打印

System.out.println("取到的值是:"+object);

memcachedClient.shutdown();

}/*** 三、插入数据(对象)--自定义内部类

*@throwsException*/

public static void c() throwsException {//一、先建立MemCached的实例,指定服务器的地址和端口号

MemcachedClient memcachedClient = new MemcachedClient(new InetSocketAddress("192.168.212.111", 1121));//二、读数据

Future future = memcachedClient.set("key3", 10, newStudent());if(future.get().booleanValue()){//表示插入成功,关掉该实例

memcachedClient.shutdown();

}

}/*** 四、基于客户端的分布式插入数据

*@throwsException*/

public static void d() throwsException {//一、创建含有服务器IP和端口号的列表

List list = new ArrayList();

list.add(new InetSocketAddress("192.168.212.111", 1121));

list.add(new InetSocketAddress("192.168.212.111", 1122));

list.add(new InetSocketAddress("192.168.212.111", 1123));

MemcachedClient client= newMemcachedClient(list);//循环写20次

for(int i=0;i<20;i++){

System.out.println("插入数据:"+i);

client.set("key112"+i,0,"value"+i); //exp=0 :永远不过期

Thread.sleep(1000); //睡1秒钟

}

client.shutdown();//关闭MemCached

}

}/*** 自定义内部类*/

class Student implements Serializable {}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值