Memcached 是简单的 key-value 内存缓存系统
JAVA 操作 Memcached 有两大类库:
- Spymemcached Spymemcached是 Memcached 的一个流行的Java client库
- XMemcached 原淘宝的伯岩/庄晓丹开发的XMemcached,性能表现出色,广泛应用于 Java + Memcached 项目中
我们接下来的范例使用 2.0.13 版本的 Spymemcached 包
把 Spymemcached 添加 classpath 中
1. 先下载 Spymemcached
本站下载地址
https://pottercoding.cn/static/download/spymemcached-2.10.3.jar
Google Code jar 包下载地址
可能无法下载,原因你懂得
2. 然后将 spymemcached-2.10.3.jar 拖到 classpath 环境变量中
Memcached 服务
假设你已经安装了 Memcached,如果你没有安装,可以到 Linux(Centos/Ubuntu) Memcached 安装 学习如何安装 Memcached
我们的范例的 Memcached 服务的主机为 127.0.0.1 端口为 11211
Java 连接 Memcached 范例
package com.pottercoding.demo;
import net.spy.memcached.MemcachedClient;
import java.net.*;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println( ex.getMessage() );
}
}
运行范例输出如下信息
成功连接到 Memcached 服务
范例:set 操作
我们使用 java.util.concurrent.Future 来存储命令的返回值
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 存储数据
Future fo = mc.set("site", 1000, "pottercoding.cn");
// 查看存储状态
System.out.println("set 状态:" + fo.get());
// 输出值
System.out.println("site value in cache is: " + mc.get("site"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println( ex.getMessage() );
}
}
运行范例输出如下信息:
成功连接到 Memcached 服务
set 状态:true
site value in cache is: pottercoding.cn
add 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数据
Future fo = mc.set("site", 1000, "pottercoding.cn");
// 打印状态
System.out.println("set 状态:" + fo.get());
// 输出
System.out.println("site value in cache is: " + mc.get("site"));
// 添加
fo = mc.add("site", 1000, "souyunku.cn");
// 打印状态
System.out.println("add 状态:" + fo.get());
// 添加新key
fo = mc.add("age", 1000, "28");
// 打印状态
System.out.println("add 状态:" + fo.get());
// 输出
System.out.println("age value in cache is: " + mc.get("age"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息:
成功连接到 Memcached 服务
set 状态:true
site value in cache is: pottercoding.cn
add 状态:false
add 状态:true
age value in cache is: 28
replace 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加第一个 key value 对
Future fo = mc.set("site", 1000, "pottercoding.cn");
// 输出执行 add 方法后的状态
System.out.println("add 状态:" + fo.get());
// 获取键对应的值
System.out.println("site value in cache is : " + mc.get("site"));
// 添加新的 key
fo = mc.replace("site", 900, "https://pottercoding.cn/");
// 输出执行 set 方法后的状态
System.out.println("replace status:" + fo.get());
// 获取键对应的值
System.out.println("site value in cache is: " + mc.get("site"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println( ex.getMessage() );
}
}
运行范例输出如下信息:
成功连接到 Memcached 服务
add 状态:true
site value in cache is : pottercoding.cn
replace status:true
site value in cache is: https://pottercoding.cn/
append 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数据
Future fo = mc.set("greeting", 1000, "你好,世界!");
// 输出执行 set 方法后的状态
System.out.println("set status:" + fo.get());
// 获取键对应的值
System.out.println("greeting value in cache is: " + mc.get("greeting"));
// 对存在的key进行数据添加操作
fo = mc.append("greeting", "你好,教程 ");
// 输出执行 set 方法后的状态
System.out.println("append status:" + fo.get());
// 获取键对应的值
System.out.println("greeting value in cache - " + mc.get("greeting"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息
成功连接到 Memcached 服务
set status:true
greeting value in cache is: 你好,世界!
append status:true
greeting value in cache - 你好,世界!你好,教程
prepend 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数据
Future fo = mc.set("site", 900, "pottercoding.cn");
// 输出执行 set 方法后的状态
System.out.println("set status:" + fo.get());
// 获取键对应的值
System.out.println("site value in cache is: " + mc.get("site"));
// 对存在的key进行数据添加操作
fo = mc.prepend("site", "https://");
// 输出执行 set 方法后的状态
System.out.println("prepend status:" + fo.get());
// 获取键对应的值
System.out.println("site value in cache - " + mc.get("site"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息
成功连接到 Memcached 服务
set status:true
site value in cache is: pottercoding.cn
prepend status:true
site value in cache - https://pottercoding.cn
CAS 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.CASValue;
import net.spy.memcached.CASResponse;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数据
Future fo = mc.set("site", 1000, "pottercoding.cn");
// 输出执行 set 方法后的状态
System.out.println("set status:" + fo.get());
// 使用 get 方法获取数据
System.out.println("site value in cache - " + mc.get("site"));
// 通过 gets 方法获取 CAS token(令牌)
CASValue casValue = mc.gets("site");
// 输出 CAS token(令牌) 值
System.out.println("CAS token is: " + casValue);
// 尝试使用cas方法来更新数据
CASResponse casresp = mc.cas("site", casValue.getCas(), 900, "https://pottercoding.cn");
// 输出 CAS 响应信息
System.out.println("CAS Response is: " + casresp);
// 输出值
System.out.println("site value in cache is: " + mc.get("site"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息
成功连接到 Memcached 服务
set status:true
site value in cache - pottercoding.cn
CAS token is: {CasValue 13/pottercoding.cn}
CAS Response is: OK
site value in cache is: https://pottercoding.cn
get 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数据
Future fo = mc.set("site", 1000, "pottercoding.cn");
// 输出执行 set 方法后的状态
System.out.println("set status:" + fo.get());
// 使用 get 方法获取数据
System.out.println("site value in cache is: " + mc.get("site"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息:
成功连接到 Memcached 服务
set status:true
site value in cache is: pottercoding.cn
gets 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.CASValue;
import net.spy.memcached.CASResponse;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数据
Future fo = mc.set("site", 1000, "pottercoding.cn");
// 输出执行 set 方法后的状态
System.out.println("set status:" + fo.get());
// 从缓存中获取键为 pottercoding.cn 程序员波特,程序员编程资料站 的值
System.out.println("site value in cache is: " + mc.get("site"));
// 通过 gets 方法获取 CAS token(令牌)
CASValue casValue = mc.gets("site");
// 输出 CAS token(令牌) 值
System.out.println("CAS value in cache is: " + casValue);
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息:
成功连接到 Memcached 服务
set status:true
site value in cache is: pottercoding.cn
CAS value in cache is: {CasValue 11/pottercoding.cn}
delete 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数据
Future fo = mc.set("site", 1000, "pottercoding.cn");
// 输出执行 set 方法后的状态
System.out.println("set status:" + fo.get());
// 获取键对应的值
System.out.println("site value in cache is: " + mc.get("site"));
// 对存在的key进行数据添加操作
fo = mc.delete("site");
// 输出执行 delete 方法后的状态
System.out.println("delete status:" + fo.get());
// 获取键对应的值
System.out.println("site value in cache is: " + mc.get("site"));
// 关闭连接
mc.shutdown();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息:
成功连接到 Memcached 服务
set status:true
site value in cache is: pottercoding.cn
delete status:true
site value in cache is: null
Incr/Decr 操作范例
package com.pottercoding.demo;
import java.net.InetSocketAddress;
import java.util.concurrent.Future;
import net.spy.memcached.MemcachedClient;
public class MemcachedJavaDemo {
public static void main(String[] args) {
try{
// 创建 Memcached 实例
MemcachedClient mc = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211));
System.out.println("成功连接到 Memcached 服务");
// 先清空缓存
mc.flush();
// 添加数字值
Future fo = mc.set("countdown", 1000, "1000");
// 输出执行 set 方法后的状态
System.out.println("set status:" + fo.get());
// 获取键对应的值
System.out.println("value in cache is : " + mc.get("countdown"));
// 自增并输出
System.out.println("value in cache after increment is: " + mc.incr("countdown", 111));
// 自减并输出
System.out.println("value in cache after decrement is " + mc.decr("countdown", 112));
// 关闭连接
mc.shutdown();
}catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
运行范例输出如下信息:
成功连接到 Memcached 服务
set status:true
value in cache is : 1000
value in cache after increment is: 1111
value in cache after decrement is 999