memcached 对某些操作例如set,add支持noreply。也就是memcached 服务器不会对客户端进行应答。
假如在极短时间内,基于同一tcp connection(tcp_nodelay =false),进行2次操作,第1次是noreply,第2次need reply,并且2次的请求数据都非常小,会发生什么事呢?
下面基于java 客户端 xmemcached 1.3.5试一下,客户端和服务器分别部署在两台linux上。代码如下:
- for (int i = 0; i < 10; i++) {
- long start = System.currentTimeMillis();
- memcachedClient.setWithNoReply("a", 0, "Hello,xmemcached");
-
- Thread.sleep(1);
- String value = memcachedClient.get("a");
- long end = System.currentTimeMillis();
- System.out.println("ttl(ms)=" + (end - start));
- }
打印出来的花费时间除了第一次,其他的都需要40ms左右。如果不使用setWithNoReply而使用set,就几乎0ms。
40ms的延时是受了nagle 算法和ack delayed的影响。不太清楚的同学可gg一下或http://www.iteye.com/topic/1110883#2201434,该帖子的作者阐释的比较具体了。八卦一下,该作者也是xmemcached 的作者。
附:setWithNoReply和get之间睡眠1ms,是为了避免这两个操作被装进同一tcp包里。一开始测不出40ms的延时,还以为哪里出了问题,通过tcpdump发现两个操作在同一个tcp包发送。
分享到:
相关推荐
自己总结的memcached的网络部分,主要是TCP 套接字编程方面,有兴趣的可以看看。
文件详细描述了Memcached相关原理和使用方法,内容包括:Memcached原理介绍、Memcached安装和使用说明、Memcached使用的技巧等。
Memcached 原理和使用详解
主要在开发过程中针对memcached和redis选用时进行比较
memcached官方jar和一些网上的资料
Memcached 的使用和协议分析详解
memcached, libevent, MemCachedClient
Memcached_原理和使用详解,memcache的配置和使用
在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动...
memcached 64位 window memcached 64位 window memcached 64位 window
资源名称:memcached原理和使用详解内容简介: Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库...
详细介绍安装Memcached及Memcached配置
memcached是分布式高效内存对象缓存系统
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过...
Memcached数据库在Linux操作系统和Windows操作系统上的安装包
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过...
安装Memcached及Memcached配置
python-memcached python-memcached
适合java程序员开发springMVC整合memcached参考