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
相关文章推荐
- perl 操作redis 数据库 带用户名和密码验证,选择数据库0.1.2
- c 实现字符串反转(参考redis源码)
- Redis内存分配简单分析
- redis分布式锁简单实现
- 初识redis及实现session共享
- redis(一)在互联网开发中的使用之简单介绍
- redis(二)redis实战 使用redis进行文章的排序
- redis事务详解
- java对redis的操作
- java对redis的基本操作
- Redis+Spring缓存实例(windows环境,附实例源码及详解)
- 1.5linux安装redis
- JAVA - Redis的连接
- java操作redis
- redis-集合
- springmvc mybatis redis mysql maven搭建基本开发框架 (三)
- redis安装
- redis安装
- redis 一二事 - 设置过期时间,以文件夹形式展示key显示缓存数据
- redis主从复制深入解析