1、实例化

MemcachedClient client = new XMemcachedClient();

public XMemcachedClient()
public XMemcachedClient(List<InetSocketAddress> addressList)
public XMemcachedClient(final String server, final int port)
public XMemcachedClient(final String host, final int port, int weight)
public XMemcachedClient(final InetSocketAddress inetSocketAddress, int weight)
public XMemcachedClient(final InetSocketAddress inetSocketAddress)
...

最简单的一个就是最后一个,比如

MemcachedClient cache = new XMemcachedClient(new InetSocketAddress("127.0.0.1", 11211));  

2、常用方法

2、1、add

public <T> boolean add(final String key, final int exp, final T value, final Transcoder<T> transcoder, final long timeout)
public <T> boolean add(final String key, final int exp, final T value, final Transcoder<T> transcoder)
public boolean add(final String key, final int exp, final Object value,final long timeout)
public boolean add(final String key, final int exp, final Object value)

第一个参数:键(key)。
第二个参数:过期时间(单位是秒)。
第三个参数:要设置缓存中的对象(value),如果没有则插入,如果有则修改。
第四个参数:通信编码方式。
第五个参数:超时时间。

2.2、set

public final <T> boolean set(String key, final int exp, final T value, final Transcoder<T> transcoder, final long timeout)
public final <T> boolean set(final String key, final int exp, final T value, final Transcoder<T> transcoder)
public final boolean set(final String key, final int exp, final Object value, final long timeout)
public final boolean set(final String key, final int exp, final Object value)

第一个参数:键(key)。
第二个参数:过期时间(单位是秒)。
第三个参数:要设置缓存中的对象(value),如果没有则插入,如果有则修改。
第四个参数:通信编码方式。
第五个参数:超时时间。

2.3、replace

public <T> boolean replace(final String key, final int exp, final T value, final Transcoder<T> transcoder, final long timeout)
public <T> boolean replace(final String key, final int exp, final T value,final Transcoder<T> transcoder)
public boolean replace(final String key, final int exp, final Object value,final long timeout)
public boolean replace(final String key, final int exp, final Object value)

第一个参数:键(key)。
第二个参数:过期时间(单位是秒)。
第三个参数:要设置缓存中的对象(value),如果没有则插入,如果有则修改。
第四个参数:通信编码方式。
第五个参数:超时时间。

2.4、get

public <T> T get(final String key, final long timeout, final Transcoder<T> transcoder)
public <T> T get(final String key, final long timeout)
public <T> T get(final String key, final Transcoder<T> transcoder)
public <T> T get(final String key)

第一个参数:键(key)
第二个参数:过期时间(单位是秒)
第三个参数:通信编码方式。

3、CAS(Check And Save)协议

基本原理就是:版本号,防止读写冲突。涉及到两个方法gets 和cas

3.1、gets

public <T> GetsResponse<T> gets(final String key, final long timeout, final Transcoder<T> transcoder)
public <T> GetsResponse<T> gets(final String key, final Transcoder transcoder)
public <T> GetsResponse<T> gets(final String key, final long timeout)
public <T> GetsResponse<T> gets(final String key)

参数同get方法,其中GetsResponse只有2个字段,一个value,另一个变量cas就是时间戳。

public final class GetsResponse<T> {
private final long cas;
private final T value;
...
//get and set
// equals and hascode
}

3.2、cas

public boolean cas(final String key, final int exp, final Object value,final long timeout, final long cas)
public boolean cas(final String key, final int exp, final Object value,final long cas) public <T> boolean cas(final String key, final int exp, final T value,final Transcoder<T> transcoder, final long cas)
public <T> boolean cas(final String key, final int exp,final CASOperation<T> operation, final Transcoder<T> transcoder)
public <T> boolean cas(final String key, final int exp,GetsResponse<T> getsReponse, final CASOperation<T> operation,final Transcoder<T> transcoder)
public <T> boolean cas(final String key, final int exp,GetsResponse<T> getsReponse, final CASOperation<T> operation)
public <T> boolean cas(final String key, GetsResponse<T> getsResponse,final CASOperation<T> operation)
public <T> boolean cas(final String key, final int exp,final CASOperation<T> operation)
public <T> boolean cas(final String key, final CASOperation<T> operation)
public <T> boolean cas(final String key, final int exp, final T value,final Transcoder<T> transcoder, final long timeout, final long cas)

4、例子

4。1、非cas方式

import net.spy.memcached.MemcachedClient;  

public class Test {
public static void main(String[] args) throws IOException {
MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); cache.set("x", 1800, "Love"); String obj1 = (String) cache.get("x");
String obj2 = (String) cache.get("x");
obj2 = "Michael"; cache.set("x", 1800, obj2);
System.out.println("Non-CAS 2:\t" + obj2);
System.out.println("Non-CAS 1:\t" + obj1);
}
}

obj1!=obj2,出现读写不一致

4.2、使用cas方式

import java.io.IOException;
import java.net.InetSocketAddress; import net.spy.memcached.CASValue;
import net.spy.memcached.MemcachedClient; public class Test {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws IOException {
MemcachedClient cache = new MemcachedClient(new InetSocketAddress("127.0.0.1", 11211)); cache.set("y", 1800, "Love"); CASValue casValue1 = cache.gets("y");
CASValue casValue2 = cache.gets("y");
cache.cas("y", casValue2.getCas(), casValue2.getValue()); System.out.println("CAS 2:\t" + casValue2.getCas());
System.out.println("Value 2:\t" + casValue2.getValue()); System.out.println("CAS 1:\t" + casValue1.getCas());
System.out.println("Value 1:\t" + casValue1.getValue());
}
}

参考:http://www.linuxidc.com/Linux/2011-12/49516.htm

Memcached基础的更多相关文章

  1. Memcached基础介绍

    1.memcached是什么,有什么作用? )memcached是一个开源的.高性能的内存的缓存软件,从名称上看mem就是内存的意思,而cache就是缓存的意思. )memcached通过在事先规划好 ...

  2. 分布式缓存技术memcached学习(二)——memcached基础命令

    上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...

  3. Memcached基础知识

    主要内容: Memcached基本的工作原理 Memcached的两阶段哈希 Memcached的数据存储方式 Memcached新建Item分配内存过程 Memcached的数据过期方式 Memca ...

  4. Memcached 笔记与总结(1)Linux(CentOS 6.6) 和 Windows(7)下安装与配置 Memcached (1.4.24)与 Memcached 基础命令

    Memcached 官方网站:http://memcached.org/ 官网对其的描述是: What is Memcached? Free & open source, high-perfo ...

  5. (转)实战Memcached缓存系统(1)Memcached基础及示例程序

    1.Cache定义 (1)狭义概念:用于CPU的相对高速处理与主存(Main Memory)的相对低速处理的之间起到协调功能的硬件设备. (2)广义概念:用于速度相差较大的两种硬件之间,起到协调两者数 ...

  6. 分布式缓存技术memcached学习系列(二)——memcached基础命令

    上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...

  7. 【 学习笔记 】memcached基础知识

    源地址:http://kb.cnblogs.com/page/42731/ 仔细学习了下,以下是记录的笔记备忘内容. 一.memcached是什么?    memcached是高性能的分布式内存缓存服 ...

  8. memcached完全剖析系列——一、memcached基础

    转自:http://blog.charlee.li/memcached-001/

  9. Memcached目录

    Memcached 简介.安装和基本使用 Memcached基础知识 理解Memcached的分布式 Memcached存储命令 - set Memcached存储命令 - add Memcached ...

随机推荐

  1. aix puppet agent

    demo控制脚本tel,150 5519 8367 Running Puppet on AIX Puppet on AIX is… not officially supported, yet stil ...

  2. 分布式-在win7上安装linux操作系统

    由于大多数的分布式计算框架.分布式存储系统.分布式平台都支持在unix类似的环境下.所以要做分布式的实验和学习的话,还是推荐装个linux系统.我这里安装的是ubuntu,由于之前装过这个. 一.下载 ...

  3. setter设置器 gutter访问器

    set方法书写规范: 1.必须以set开头,set后跟去掉下划线的实例变量并且首字母大写.ps: setAge:2.一定有参数3.不能有返回值4.一定是对象方法(-开头)5.形参一般是去掉下划线的实例 ...

  4. node.js(七) 子进程 child_process模块

    众所周知node.js是基于单线程模型架构,这样的设计可以带来高效的CPU利用率,但是无法却利用多个核心的CPU,为了解决这个问题,node.js提供了child_process模块,通过多进程来实现 ...

  5. bootstrap-js(1)模态框

    1.禁止动画效果 如果你不需要模态框弹出时的动画效果(淡入淡出效果),删掉 .fade 类即可.一般还是不要去动这个,最多自己换个类名在写其他样式,不然你会头大的. <div class=&qu ...

  6. node 的 异步 数据库 调用 处理

    相信很多人在使用node 的时候, 一方面会觉得他强大的异步性感到很方便. 但是有时候我们却非要程序能按我们自己的想法 去串行的执行我们的思路. 同样我在编写的过程中也遇到类似的问题,比如for 和 ...

  7. 使用bootstrap做一个响应式的页面

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. [剖析Javascript原理]1.原生数据类型

    一.原生数据类型 JS共有5种原生数据类型: Boolean true或者false String 字符串,在单引号或者双引号之间(不存在字符类型) Number 整数或者浮点数 Null 空 und ...

  9. php中如何输出当前服务器的(中国)当前时间

    date_default_timezone_set('PRC');//PRC是什么?PRC是中华人民共和国啊-_- echo "今天是".date("Y年m月d日&quo ...

  10. linux命令学习02-通过tomcat学习ps和netstat

    问题:如何查找tomcat进程,以及tomcat占用的端口号? 1.ps -ef|grep tomcat root 1984 1 19 10:20 ? 00:00:10 /opt/jdk1.7.0_8 ...