memcached 对某些操作例如set,add支持noreply。也就是memcached 服务器不会对客户端进行应答。

假如在极短时间内,基于同一tcp connection(tcp_nodelay =false),进行2次操作,第1次是noreply,第2次need reply,并且2次的请求数据都非常小,会发生什么事呢?

下面基于java 客户端 xmemcached 1.3.5试一下,客户端和服务器分别部署在两台linux上。代码如下:

Java代码 
  1. for (int i = 0; i < 10; i++) {
  2. long start = System.currentTimeMillis();
  3. memcachedClient.setWithNoReply("a", 0, "Hello,xmemcached");//1
  4. //memcachedClient.set("a", 0, "Hello,xmemcached");//2
  5. Thread.sleep(1);
  6. String value = memcachedClient.get("a");
  7. long end = System.currentTimeMillis();
  8. System.out.println("ttl(ms)=" + (end - start));
  9. }

打印出来的花费时间除了第一次,其他的都需要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 noreply 和tcp Nagle相关推荐

  1. TCP Nagle算法简述

    TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认.为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据.(一个连接会设置MS ...

  2. 【计算机网络】2、TCP:四次挥手与TIME_WAIT、shutdown() 优雅关闭 server、探活、拥塞窗口与 Nagle 算法、端口占用、tcp 的流式协议、可靠性

    文章目录 六.四次挥手 与 TIME_WAIT 6.1 TIME_WAIT 的作用 6.2 TIME_WAIT 的危害和方案 七.server 用 shutdown() 优雅关闭 7.1 close( ...

  3. spymemcached 的 useNagle 问题与 TCP/IP延迟发送数据

    先说一下结论. 如果你没有特意在 spymemcached 的 client bean definition 里配置 useNagleAlgorithm 属性为 True, 那么默认 spymemca ...

  4. Nagle算法延时确认

    数据流分类 成块数据 交互数据 Rlogin需要远程系统(服务器)回显我们(客户)键入的字符 数据字节和数据字节的回显都需要对方确认   rlogin 每次只发送一个字节到服务器,而Telnet 可以 ...

  5. 为什么我的modbus tcp server只能连一个client_TCP 协议概览

    文章说明,视频分享 喜欢c++ Linux后台服务器开发的朋友可以后台私信[架构]获取图中视频 背景知识--互联网分层模型 应用层(DNS,FTP,HTTP,RTSP,SSH,TLS/SSL, XMP ...

  6. 让memcached和mysql更好的工作

    让memcached和mysql更好的工作 来源:http://chaoqun.17348.com/2008/08/memcached_work_with_mysql 这次是Fotolog的经验,传说 ...

  7. mac memcached_如何在Mac OS上安装Memcached Server

    mac memcached Memcached is an open-source high performance distributed memory object caching system. ...

  8. memcached 命令_Memcached Telnet命令示例

    memcached 命令 In earlier posts, we saw how to install Memcached server on Mac OS and Unix systems. Af ...

  9. 基于滴滴云搭建安全稳定的 Memcached 服务器

    介绍 Memcached 是一种内存 cache 系统,通过将一些高频使用和最近经常访问的信息储存在内存中,可以明显地优化访问后端数据库的性能. 直观上来看,借助于 Memcached 组件,可以大量 ...

最新文章

  1. 通过OKR复盘会议你会学到哪些?
  2. 零基础开始学 Web 前端开发,有什么建议吗?--知
  3. android wheelview 字体颜色,百行代码实现Android WheelView
  4. 查看和修改Oracle数据库服务器端的字符集
  5. iPhone 5用户们,苹果又喊你更新了,不然可能会变砖!
  6. 股票冲高回落意味着什么?
  7. vue 动态添加路由
  8. 前端学习资料网址收集整理
  9. python基础3-运算符总结_位操作符_优先级问题
  10. Boost Asio dispatch()与post()的区别
  11. 2级c语言程序设计无忧考试,无忧考吧二级c模拟考试系统
  12. hexo 环境变量_优雅的博客框架,快速、简洁、高效且主题丰富——Hexo
  13. Web服务客户端应用程序
  14. 全面罩防毒面具市场调研
  15. Smart210使用superboot刷机
  16. Spire.pdf-使用学习记录
  17. 关于C语言颜色改变方法
  18. 用python做梦幻手游刷宝图脚本
  19. Redis——过期时间/过期回收策略
  20. 百度Sugar BI 数据可视化里的标签页组件如何实现

热门文章

  1. 软件 pt 测试,软件测试(p网pt)完整版.ppt
  2. 绩效面谈的4种技巧三
  3. 蓝桥杯vip试题 基础练习 数的读法(C语言)
  4. adams导出图形数据,并导入matlab进行分析
  5. 淘宝 OAuth2.0 的登录验证与授权
  6. 三种函数指针的表达以及函数指针概念讲解
  7. 路由器设置上网【不求人】
  8. 唯捷创芯上市首日大跌36%:收盘市值170亿 荣秀丽为掌门人
  9. java jconsole_JDK-Jconsole管理工具
  10. 大公司该不该砍掉 IT 部?