前言
介绍Redis数据库的实现,解答以下几个问题:
- Redis服务器是怎么保存数据库的?客户端又是怎么切换数据库的?
- 数据库的增、删、改、查的实现
- 键的过期时间是怎么保存的,又是如何删除的?怎么判断一个键是否过期?
- 过期键的删除策略有哪些?每种策略的优缺点分析?Redis采用的是哪种策略,具体又是怎么实现的?
跳跃表是一种以O(log N)期望时间支持查找、插入、删除操作的、有序的数据结构。
Redis使用跳跃表作为有序集合键的底层实现之一。
跳表的基本实现原理参考:《Skip lists: a probabilistic alternative to balanced trees》
进程收到SIGABRT
信号异常退出,异常调用栈显示__stack_chk_fail
原因分析: __stack_chk_fail
说明发生了缓冲区溢出,canary被破坏。这说明代码设置GCC编译选项fstack-protector,开启了栈保护机制canary
定位思路: