通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务。
telnet HOST PORT
telnet 127.0.0.111211
添加 Memcached jar 包
net.spy
spymemcached
2.9.1
以下程序假定 Memcached 服务的主机为 127.0.0.1,端口为 11211。如果是远程访问,记得在防火墙的入站规则中添加端口。
public class MemcachedJava {
public static void main(String[] args) {
try {
// 连接本地的 Memcached 服务
MemcachedClient mcc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("Connection to server sucessful.");
Future fo = mcc.set("memcached", 10, "memcached");// 添加数据
System.out.println("set status:" + fo.get());// 输出执行set方法后的状态
System.out.println("get - " + mcc.get("memcached"));// 使用get方法获取数据
fo = mcc.add("memcached", 10, "add");// 添加
System.out.println("add status:" + fo.get());// 输出执行add方法后的状态
System.out.println("add - " + mcc.get("memcached"));// 获取键对应的值
fo = mcc.replace("memcached", 10, "memcached replace");
System.out.println("replace status:" + fo.get());// 输出执行replace方法后的状态
System.out.println("replace - " + mcc.get("memcached"));// 获取键对应的值
fo = mcc.append("memcached", " append");// 对存在的key进行数据添加操作
System.out.println("append status:" + fo.get());// 输出执行 append方法后的状态
System.out.println("append - " + mcc.get("memcached"));// 获取键对应的值
fo = mcc.prepend("memcached", "prepend ");// 对存在的key进行数据添加操作
System.out.println("prepend status:" + fo.get());// 输出执行prepend方法后的状态
System.out.println("prepend - " + mcc.get("memcached"));// 获取键对应的值
CASValue casValue = mcc.gets("memcached");// 通过 gets 方法获取 CAS token(令牌)
System.out.println("CAS token - " + casValue);// 输出 CAS token(令牌) 值
CASResponse casresp = mcc.cas("memcached", casValue.getCas(), " CAS");// 尝试使用cas方法来更新数据
System.out.println("CAS Response - " + casresp);// 输出 CAS 响应信息
System.out.println("CAS - " + mcc.get("memcached"));// 输出值
fo = mcc.delete("memcached");// 对存在的key进行数据添加操作
System.out.println("delete status:" + fo.get());// 输出执行 delete方法后的状态
System.out.println("delete - " + mcc.get("memcached"));// 获取键对应的值
Future number = mcc.set("number", 10, "1000");// 添加数字值
System.out.println("set status:" + number.get());// 输出执行 set 方法后的状态
System.out.println("incr - " + mcc.incr("number", 100));// 自增并输出
System.out.println("decr - " + mcc.decr("number", 101));// 自减并输出
// 关闭连接
mcc.shutdown();
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
set 命令用于将 value(数据值) 存储在指定的 key(键) 中。如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。
add 命令用于将 value(数据值) 存储在指定的 key(键) 中。如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同。
replace 命令用于替换已存在的 key(键) 的 value(数据值)。如果 key 不存在,则替换失败。
append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。
prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。
CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入。
get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空。
delete 命令用于删除已存在的 key(键)。
incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR。
stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。
stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。
stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况等。
stats sizes 命令用于显示所有item的大小和个数。该信息返回两列,第一列是 item 的大小,第二列是 item 的个数。
flush_all 命令用于清理缓存中的所有 key=>value(键=>值) 对。该命令提供了一个可选参数 time,用于在制定的时间后执行清理缓存操作。