memcached(七)--常用指令抓包分析

  使用spymemcached客户端,通过wireshark抓包,更清晰的看到memcached的命令。

  先来一个简单的demo:

package spymc;

import java.io.IOException;
import java.net.InetSocketAddress;

import net.spy.memcached.CASResponse;
import net.spy.memcached.CASValue;
import net.spy.memcached.MemcachedClient;

public class TestSpyMc {

    public static void main(String[] args) throws IOException {
        MemcachedClient c = new MemcachedClient(new InetSocketAddress("aliyun.9game.cn", 11211));

        c.set("abc", 3600, "hello");
        System.err.println(c.get("abc"));

        //CASValue<Object> vasValue = c.gets("abc");
        //CASResponse resp= c.cas("abc", vasValue.getCas(), "pre");
        //System.out.println(resp.name());
        //resp= c.cas("abc", vasValue.getCas(), "after");
        //System.out.println(resp.name());
        c.shutdown();
    }
}

  抓包的结果会看到:

set abc 0 3600 5
hello
get abc
STORED
VALUE abc 0 5
hello
END

  粉色代表请求,蓝色代表响应。spymemcached在上一节说了,spymemcached是非阻塞的。所以发出set指令响应之前,get命令都发出去了。

  然后看看 gets 和cas。尝试做两次cas操作:

package spymc;

import java.io.IOException;
import java.net.InetSocketAddress;

import net.spy.memcached.CASResponse;
import net.spy.memcached.CASValue;
import net.spy.memcached.MemcachedClient;

public class TestSpyMc {

    public static void main(String[] args) throws IOException {
        MemcachedClient c = new MemcachedClient(new InetSocketAddress("aliyun.9game.cn", 11211));

        //c.set("abc", 3600, "hello");
        //System.err.println(c.get("abc"));

        CASValue<Object> vasValue = c.gets("abc");
        CASResponse resp= c.cas("abc", vasValue.getCas(), "pre");
        System.out.println(resp.name());
        resp= c.cas("abc", vasValue.getCas(), "after");
        System.out.println(resp.name());
        c.shutdown();
    }
}

  首先, 输出结果是:

OK
EXISTS

  抓包看到的是:

gets abc
VALUE abc 0 3 2272929
pre
END
cas abc 0 0 3 2272929
pre
STORED
cas abc 0 0 5 2272929
after
EXISTS

  gets 和cas 通过版本号实现原子性操作,重复两次cas,相同的版本号,第二次是失败的

  然后试试gets和sets之间,做一次set操作。java代码:

package eGroup.spymcTest;

import java.io.IOException;
import java.net.InetSocketAddress;

import net.spy.memcached.CASResponse;
import net.spy.memcached.CASValue;
import net.spy.memcached.MemcachedClient;

public class TestSpyMc {

    public static void main(String[] args) throws IOException {
        MemcachedClient c = new MemcachedClient(new InetSocketAddress("aliyun.9game.cn", 11211));

        CASValue<Object> vasValue = c.gets("abc");

        c.set("abc", 3600, "hello sb");

        CASResponse resp= c.cas("abc", vasValue.getCas(), "pre");
        System.out.println(resp.name());
        c.shutdown();
    }
}

  IDE控制台输出:

EXISTS

  抓包得出:

gets abc
VALUE abc 0 8 2279149
hello sb
END
set abc 0 3600 8
hello sb
cas abc 0 0 3 2279149
pre
STORED
EXISTS

  set成功,cas就失败了。

  可见, gets&cas,是乐观锁的概念。并不是‘独占’数据的。

  最后试试重复add操作。java代码:

        c.add("addTest", 3600, "hello");

        c.add("addTest", 3600, "hello");

  抓包得出:

add addTest 0 3600 5
hello
add addTest 0 3600 5
hello
STORED
NOT_STORED

  mc 的add指令,如果有key存在了,后续的add操作是会失败的单点memcached的话可以当互斥锁来玩。

  以下是对指令的一些总结:

  1. gets &cas 应该成对出现。在gets中会获取到一个数值类型的版本号,cas操作的时候要设置这个版本号。但是!如果gets、cas之间有改变这个数,cas会失败的。
  2. add操作不能设置重复key,否则会失败的。
时间: 2024-08-06 16:01:08

memcached(七)--常用指令抓包分析的相关文章

tcpdump抓包分析具体解释

說實在的,對於 tcpdump 這個軟體來說,你甚至能够說這個軟體其實就是個駭客軟體, 因為他不但能够分析封包的流向,連封包的內容也能够進行『監聽』, 假设你使用的傳輸資料是明碼的話,不得了,在 router 上面就可能被人家監聽走了! 非常可怕吶!所以,我們也要來瞭解一下這個軟體啊!(註:這個 tcpdump 必須使用 root 的身份執行) [[email protected] ~]# tcpdump [-nn] [-i 介面] [-w 儲存檔名] [-c 次數] [-Ae] [-qX] [

Wireshark数据抓包分析——网络协议篇

Wireshark是目前最受欢迎的抓包工具.它可以运行在Windows.Linux及MAC OS X操作系统中,并提供了友好的图形界面.同时,Wireshark提供功能强大的数据抓包功能.使用它,可以以各种方式抓取用户所需要的网络数据包. 但是用户往往无法从数据包中直接获取所需要的数据.这是由于所有的信息在传输过程中,都会被按照各种网络协议进行封装.用户想要从海量的数据抓包中获取的有用的信息,必须了解各种常见的网络协议.为了方便用户对数据包的分析,本书详细介绍了常用的各种网络协议,如ARP.IP

[转]Linux操作系统tcpdump抓包分析详解

PS:tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具. tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具.tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息.因此系统中存在网络分析工具主要不是对本

Wireshark和TcpDump抓包分析对比

常见的抓包分析工具有:微软的Network Monitor和Message Analyzer.Sniff.WSExplorer.SpyNet.iptools.WinNetCap.WinSock Expert.Wireshark和linux的tcpdump等工具 今天,做了实验测试就对比分析其中的两款,其他的大家可以百度谷歌测试一哈^_^ 1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用

抓包分析YY音频

YY的音频数据传输是P2P协议,音频的编码为AAC,下面抓去的音频编码的信息和频谱信息. 音频编码为AAC,采样为44K,码率24kb/s.音频编码在24kb/s码率能达到15K的音质.值得大家学习啊. 1.准备工具 procexp.exe      分析YY的进程信息 Procmon.exe      分析YY的网络数据包 wireshark.exe    分析网络包的内容 2.分析YY的进程信息 使用procexp分析YY的大致信息,比如进程号,网络连接等 3.分析YY的网络传输信息 使用p

抓包分析TCP的三次握手和四次握手

问题描写叙述: 在上一篇<怎样对Android设备进行抓包>中提到了,server的开发者须要我bug重现然后提供抓包给他们分析.所以抓好包自己也试着分析了一下.发现里面全是一些TCP协议和HTTP协议.所以要想进行抓包分析,必须先了解TCP的原理.这里介绍了TCP的建立连接的三次握手和断开连接的四次握手. 问题分析: 1.TCP建立连接的三次握手 1.1前言:介绍三次握手之前,先介绍TCP层的几个FLAGS字段,这个字段有例如以下的几种标示 SYN表示建立连接, FIN表示关闭连接. ACK

wireshark抓包分析

wireshark抓包分析 wireshark是非常流行的网络封包分析软件,功能十分强大.可以抓取各种网络包,并显示网络包的详细信息. 开始界面 wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡. 点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡.然后点击"Start"按钮, 开始抓包 Wireshark 窗口介绍 WireShark 主要分为这几个界面 1. Display Filter(显示过滤

转:tcpdump抓包分析(强烈推荐)

评:示例详细,还有很不错的图解 转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac718685382c0aa1cb5dbca45&scene=5&srcid=0527iHXDsFlkjBlkxHbM2S3E#rd 转自:http://www.jianshu.com/p/8d9accf1d2f1 1 起因 前段时间,一直在调线上的一个问题:线上应用

第5组-17级通信工程3班-037-网络协议抓包分析

一.  地址规划表 本机地址 目的地址 网站 172.31.148.37 183.232.231.174/172 百度:www.baidu.com 39.137.28.125 中国移动:www.10086.cn 配置步骤:打开抓包软件,点击以太网进行抓包,然后打开浏览器进入www.baidu.com/www.10086.cn.等浏览器反应后等10s左右,然后关闭浏览器.在抓包软件上按上停止抓包按键,随后进行抓包分析. 二.应用层 2.1直播所测试的目的地址ip 图表 1 www.baidu.co