博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Memcached基础
阅读量:4598 次
发布时间:2019-06-09

本文共 6048 字,大约阅读时间需要 20 分钟。

1、实例化

MemcachedClient client = new XMemcachedClient();public XMemcachedClient()public XMemcachedClient(List
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 
boolean add(final String key, final int exp, final T value, final Transcoder
transcoder, final long timeout)public
boolean add(final String key, final int exp, final T value, final Transcoder
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 
boolean set(String key, final int exp, final T value, final Transcoder
transcoder, final long timeout)public final
boolean set(final String key, final int exp, final T value, final Transcoder
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 
boolean replace(final String key, final int exp, final T value, final Transcoder
transcoder, final long timeout)public
boolean replace(final String key, final int exp, final T value,final Transcoder
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 get(final String key, final long timeout, final Transcoder
transcoder)public
T get(final String key, final long timeout) public
T get(final String key, final Transcoder
transcoder)public
T get(final String key)

第一个参数:键(key)

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

3、CAS(Check And Save)协议

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

3.1、gets

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

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

public final class GetsResponse
{ 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 
boolean cas(final String key, final int exp, final T value,final Transcoder
transcoder, final long cas)public
boolean cas(final String key, final int exp,final CASOperation
operation, final Transcoder
transcoder)public
boolean cas(final String key, final int exp,GetsResponse
getsReponse, final CASOperation
operation,final Transcoder
transcoder)public
boolean cas(final String key, final int exp,GetsResponse
getsReponse, final CASOperation
operation)public
boolean cas(final String key, GetsResponse
getsResponse,final CASOperation
operation)public
boolean cas(final String key, final int exp,final CASOperation
operation) public
boolean cas(final String key, final CASOperation
operation)public
boolean cas(final String key, final int exp, final T value,final Transcoder
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());      }  }

 参考:

转载于:https://www.cnblogs.com/fuxinci/p/3146426.html

你可能感兴趣的文章
js时间转换
查看>>
(转载) Android Studio你不知道的调试技巧
查看>>
POJ2231 Moo Volume 递推 C语言
查看>>
struts2类型转换的具体流程
查看>>
Hdu 1203 I NEED A OFFER!
查看>>
php文件上传类
查看>>
CF219D Choosing Capital for Treeland
查看>>
luogu P3809 【模板】后缀排序
查看>>
Red Gate 破解
查看>>
JVM 调优工具
查看>>
SCTF 2014 pwn题目分析
查看>>
集合以及特殊集合
查看>>
USACO 2.2 Runaround Numbers
查看>>
利用 force index优化sql语句性能
查看>>
Matlab画图-非常具体,非常全面
查看>>
365. Water and Jug Problem
查看>>
SQL数据库数据检索top和distinct
查看>>
平衡搜索树--红黑树 RBTree
查看>>
sqlite驱动下载
查看>>
让IE6/IE7/IE8浏览器支持CSS3属性
查看>>