您的位置:首页 > 数据库 > Redis

redis 协议的简单介绍

2016-05-03 09:45 796 查看
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\r\n$3\r\nset\r\n$8\r\nuser1:id\r\n$3\r\n100\r\n"
  redis的协议是以\r\n结束,那该函数获取到的命令是什么呢:
    *3\r\n --该命令有3个命令  即:set user1:id 100  ,一个3个参数
    $3\r\nset\r\n  set命令3个字节
    $8\r\nuser1:id\r\n  ---user1:id的长度是8个字节
    $3\r\n100\r\n"  --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

 


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: