• redis 协议的简单介绍


    zhoulin@:/opt/redis307/src:gdb ./redis-server  --启动redis的服务端
    (gdb) set args /etc/redis_6379.conf  --设置gdb参数
    (gdb) br readQueryFromClient --在该函数地方设置断点
    1180 nread = read(fd, c->querybuf+qblen, readlen); --从fd中读取来自客户端的查询命令
    (gdb) p c->querybuf
    $5 = (sds) 0x7ffff1515008 "*3 $3 set $8 user1:id $3 100 "
      redis的协议是以 结束,那该函数获取到的命令是什么呢:
        *3 --该命令有3个命令 即:set user1:id 100 ,一个3个参数
        $3 set set命令3个字节
        $8 user1:id ---user1:id的长度是8个字节
        $3 100 " --100的长度为3个字节
      所以reids的命令的基本格式为 参数个数 参数1长度 参数1值 参数2长度 参数2值 参数3长度 参数3值
     

    (gdb) thread apply all b

      Thread 1 (Thread 0x7ffff7fef720 (LWP 39512)):
      #0 readQueryFromClient (el=0x7ffff14a9150, fd=10, privdata=0x7ffff1510000, mask=1) at networking.c:1181
      #1 0x000000000041b799 in aeProcessEvents (eventLoop=0x7ffff14a9150, flags=3) at ae.c:412
      #2 0x000000000041b92e in aeMain (eventLoop=0x7ffff14a9150) at ae.c:455
      #3 0x00000000004275e9 in main (argc=2, argv=0x7fffffffe548) at redis.c:3706

    bt以后的线程可以看到线程挂起的痕迹:
    man->aeMain->aeProcessEvents
     
  • 相关阅读:
    Kruskal
    克鲁斯卡尔
    克鲁斯卡尔
    实践是检验真理的唯一标准 脱壳篇02
    Kruskal
    克鲁斯卡尔算法讲解
    实践是检验真理的唯一标准 脱壳篇02
    最小生成树(普里姆算法) 数据结构和算法62
    克鲁斯卡尔算法讲解
    最小生成树(普里姆算法) 数据结构和算法62
  • 原文地址:https://www.cnblogs.com/innobase/p/5246160.html
Copyright © 2020-2023  润新知