lookupKey函数查看value值

robj *lookupKey(redisDb *db, robj *key) {dictEntry *de = dictFind(db->dict,key->ptr);if (de) {robj *val = dictGetVal(de);/* Update the access time for the ageing algorithm.* Don't do it if we have a saving child, as this will trigger* a copy on write madness. */if (server.rdb_child_pid == -1 && server.aof_child_pid == -1)val->lru = server.lruclock;return val;} else {return NULL;}
}

数据类型,ptr指针指向的就是具体value,需要强制转换

typedef struct redisObject {unsigned type:4;unsigned notused:2;     /* Not used */unsigned encoding:4;unsigned lru:22;        /* lru time (relative to server.lruclock) */int refcount;void *ptr;
} robj;

(gdb) p (char *)val->ptr
$20 = 0x7ffff7435728 "http://blog.csdn.net/unix21"
(gdb) p (char *)(*(robj *)(de->v->val))->ptr
$21 = 0x7ffff7435728 "http://blog.csdn.net/unix21"
(gdb) bt
#0  lookupKey (db=0x7ffff7515300, key=0x7ffff7486330) at db.c:51
#1  0x000000000042bee7 in lookupKeyRead (db=0x7ffff7515300, key=0x7ffff7486330) at db.c:62
#2  0x000000000042bf81 in lookupKeyReadOrReply (c=0x7ffff7531000, key=0x7ffff7486330, reply=0x7ffff7410e50) at db.c:76
#3  0x0000000000433519 in getGenericCommand (c=0x7ffff7531000) at t_string.c:145
#4  0x0000000000433588 in getCommand (c=0x7ffff7531000) at t_string.c:158
#5  0x000000000041ba15 in call (c=0x7ffff7531000, flags=7) at redis.c:1599
#6  0x000000000041c12c in processCommand (c=0x7ffff7531000) at redis.c:1774
#7  0x000000000042874a in processInputBuffer (c=0x7ffff7531000) at networking.c:1013
#8  0x00000000004289f5 in readQueryFromClient (el=0x7ffff7458150, fd=9, privdata=0x7ffff7531000, mask=1) at networking.c:1076
#9  0x0000000000415f5d in aeProcessEvents (eventLoop=0x7ffff7458150, flags=3) at ae.c:382
#10 0x00000000004160f2 in aeMain (eventLoop=0x7ffff7458150) at ae.c:425
#11 0x000000000041e8a7 in main (argc=1, argv=0x7fffffffe578) at redis.c:2721

Redis源码分析--lookupKey函数查看value值相关推荐

  1. Redis源码分析(一)redis.c //redis-server.c

    Redis源码分析(一)redis.c //redis-server.c 入口函数 int main() 4450 int main(int argc, char **argv) {4451 init ...

  2. redis源码分析 -- cs结构之服务器

    服务器与客户端是如何交互的 redis客户端向服务器发送命令请求,服务器接收到客户端发送的命令请求之后,读取解析命令,并执行命令,同时将命令执行结果返回给客户端. 客户端与服务器交互的代码流程如下图所 ...

  3. Redis源码分析:基础概念介绍与启动概述

    Redis源码分析 基于Redis-5.0.4版本,进行基础的源码分析,主要就是分析一些平常使用过程中的内容.仅作为相关内容的学习记录,有关Redis源码学习阅读比较广泛的便是<Redis设计与 ...

  4. jQuery源码分析-each函数

    本文部分截取自且行且思 jQuery.each方法用于遍历一个数组或对象,并对当前遍历的元素进行处理,在jQuery使用的频率非常大,下面就这个函数做了详细讲解: 复制代码代码 /*! * jQuer ...

  5. 10年大厂程序员是如何高效学习使用redis的丨redis源码分析丨redis存储原理

    10年大厂程序员是怎么学习使用redis的 1. redis存储原理分析 2. redis源码学习分享 3. redis跳表和B+树详细对比分析 视频讲解如下,点击观看: 10年大厂程序员是如何高效学 ...

  6. Redis源码分析 —— 发布与订阅

    前言 通过阅读Redis源码,配合GDB和抓包等调试手段,分析Redis发布订阅的实现原理,思考相关问题. 源码版本:Redis 6.0.10 思考问题 发布订阅基本概念介绍 订阅频道 -- SUBS ...

  7. redis源码之main()函数剖析

    今天看了redis的源码之中的main()函数,将大概的流程进行梳理. 在代码中进行了相应的注释,便于阅读者理解: int main(int argc, char **argv) {struct ti ...

  8. Redis 源码分析之故障转移

    在 Redis cluster 中故障转移是个很重要的功能,下面就从故障发现到故障转移整个流程做一下详细分析. 故障检测 PFAIL 标记 集群中每个节点都会定期向其他节点发送 PING 消息,以此来 ...

  9. Redis源码分析之PSYNC同步

    Redis master-slave 同步源码分析 (1)slave 流程分析 (2)master 流程分析 Slave 分析 当Redis 启动后,会每隔 1s 调用 replicationCron ...

最新文章

  1. 2018年第十届ACM四川省省赛题解(10 / 11)
  2. 【 Linux 】Vim的基本配置以及出现问题解决(su认证失败)
  3. python 在 eclipse 上的编码配置问题
  4. db2有主键时默认hash分区_不允许设置db2主键问题的解决
  5. 各种移动GPU压缩纹理的使用方法
  6. pyqt5在mac os 安装
  7. 《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
  8. ENFJ型的人:什么样的人很适合人工智能方向
  9. Quartus 调试中的Nios 程序
  10. 量化研究数据来源汇总
  11. 数据结构课程设计项目2:校园导游咨询-预习报告
  12. @Valid对页面传参的校验问题
  13. 西门子S7-300 PLC 的50个经典问题
  14. 技术人生:真的要注意身体了,坚持锻炼
  15. mysql比较多列最大值_SQL多列查询最大值
  16. PIXI_锚点图片位控
  17. Python数据分析与机器学习45- 股票预测
  18. SAP-跟我一起学习重复制造
  19. 国产化云平台如何实现多云管控,黄河云来“打样儿”
  20. 月球度假村模拟器 隐私政策

热门文章

  1. android jni 字符串拼接,AndroidJNI
  2. 使用Python,OpenCV,面部标志进行面部对齐
  3. darknet53网络结构及配置文件对比
  4. C语言实现SHA-1
  5. php字符串数组访问,php – 按字符串键x访问数组,其中x是“123”
  6. 在windows下配置pthread多线程
  7. mysql版本不一致会导致uuid_MySQL性能优化和高可用架构建议
  8. 在结构化场景中基于单目的物体与平面SLAM方案
  9. early EOF fatal: index-pack failed
  10. [Swift]LeetCode901. 股票价格跨度 | Online Stock Span