Java 连接 Memcached 服务

Windows 下安装 Memcached http://www.runoob.com/memcached/window-install-memcached.html

通过 telnet 命令并指定主机ip和端口来连接 Memcached 服务。

telnet HOST PORT
telnet 127.0.0.1 11211

添加 Memcached jar 包

<dependency>
    <groupId>net.spy</groupId>
    <artifactId>spymemcached</artifactId>
    <version>2.9.1</version>
</dependency>

  以下程序假定 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,用于在制定的时间后执行清理缓存操作。

 

转自http://www.runoob.com/memcached/java-memcached.html