Memcached基础
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基础的更多相关文章
- Memcached基础介绍
1.memcached是什么,有什么作用? )memcached是一个开源的.高性能的内存的缓存软件,从名称上看mem就是内存的意思,而cache就是缓存的意思. )memcached通过在事先规划好 ...
- 分布式缓存技术memcached学习(二)——memcached基础命令
上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...
- Memcached基础知识
主要内容: Memcached基本的工作原理 Memcached的两阶段哈希 Memcached的数据存储方式 Memcached新建Item分配内存过程 Memcached的数据过期方式 Memca ...
- 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 ...
- (转)实战Memcached缓存系统(1)Memcached基础及示例程序
1.Cache定义 (1)狭义概念:用于CPU的相对高速处理与主存(Main Memory)的相对低速处理的之间起到协调功能的硬件设备. (2)广义概念:用于速度相差较大的两种硬件之间,起到协调两者数 ...
- 分布式缓存技术memcached学习系列(二)——memcached基础命令
上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...
- 【 学习笔记 】memcached基础知识
源地址:http://kb.cnblogs.com/page/42731/ 仔细学习了下,以下是记录的笔记备忘内容. 一.memcached是什么? memcached是高性能的分布式内存缓存服 ...
- memcached完全剖析系列——一、memcached基础
转自:http://blog.charlee.li/memcached-001/
- Memcached目录
Memcached 简介.安装和基本使用 Memcached基础知识 理解Memcached的分布式 Memcached存储命令 - set Memcached存储命令 - add Memcached ...
随机推荐
- CSS滤镜让图片模糊(毛玻璃效果)实例页面
<pre name="code" class="css">CSS代码: .blur { filter: url(blur.svg#blur); /* ...
- 迷宫寻宝(一)(bfs)
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...
- css3前端工具
随着CSS3的出现,CSS3讨论的话题越来越多了,现在各种教程也是多如牛毛,不比一年前的时候,找个资料要捞遍整个互联网,而且还很难找到自己需要的参考资料.从侧面也说明,CSS3对于前端工程师来说,越来 ...
- JAVA装饰器模式
Java程序员们应该对java.io对不会陌生,因为java.io包采用了装饰器模式. 一.定义: Decorator装饰器,顾名思义,就是动态地给一个对象添加一些额外的职责,就好比为房子进行装修一样 ...
- oracle 命令创建用户 、授权、数据库导入、导出
最近在使用oracle,经常要导入导出数据,命令很简单,却经常忘记,所以记下来.. drop user yfplss cascade;--登录system用户删除已存在的用户名,该用户下的所有东西都被 ...
- .NET程序员生活开始
不知不觉,开始踏入程序员生活了!加油吧.有关Session的好文章: 最近这两天被一个Web Farm环境下的Session处理问题虐得很痛苦,网上到处找解决方案,在无意中翻看到这篇文章,感觉很不错, ...
- 一个很好的用C#导出数据到Excel模板的方法
/// <summary> /// 导数据到Excel模板 /// </summary> /// <param name="tab">要输出内容 ...
- SharePoint webpart中悬浮窗口的webconfig路径
SharePoint webpart中悬浮窗口的webconfig路径在.../_layouts/15/下.
- 浅谈C++中指针和引用的区别
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个 ...
- [STL源码剖析]RB-tree的插入操作
RB-tree的性质 对于RB-tree,首先做一个了解,先看一张维基百科的RB-tree: 再看RB-tree的性质: 性质1. 节点是红色或黑色. 性质2. 根是黑色,所有叶子都是黑色(叶子节点指 ...