《Redis 设计与实现》

深入了解Redis【一】源码下载与参考资料准备

青春壹個敷衍的年華 提交于 2019-12-10 23:17:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 引言 一直在使用redis,但是却没有系统的了解过它的底层实现,准备边学习边记录,深入了解redis。 打算分析以下几个方面: redis的基本类型及底层原理与java对比,每种数据类型的使用场景 redis底层对象 key的一致性Hash算法 单线程的redis“快” redis的过期策略以及内存淘汰机制 redis分布式锁原理 redis备份方式 多机环境下主从赋值、哨兵、集群的优缺点 哨兵机制与选举算法 集群机制的分片原理 缓存的key并发竞争问题 缓存和数据库双写一致性问题 缓存雪崩问题 缓存击穿问题 这只是暂时列举出来,最后有可能删减。 前期准备: 带注释的源码 redis-3.0-annotated 参考资料 《Redis设计与实现》PDF 关注下方公众号,回复 redis 索要。 Redis 源码日志 参考的博客文章将在每一篇文章下方给出。 来源: oschina 链接: https://my.oschina.net/u/4024767/blog/3141498

Redis设计与实现系列-基本数据结构-链表和压缩列表

可紊 提交于 2019-11-28 13:14:34
关于《Redis设计与实现》读书笔记 链表作为一种非常友好的数据结构在很多高级编程语言中都有内置,然而C语言中没有没有链表这种数据结构,在redis中redis自行设计了一套链表数据结构用于存储链式数据,redis中设计了一个双端链表,该链表跟普通链表没什么大的区别这里就不详细描述,本文主要介绍redis中另一种链式数据结构压缩列表。 压缩列表(ziplist)是用一些列特殊的编码构成的内存区域,是redis为了节省内存而设计的,ziplist中每个节点可以保存一个长度受限的字符数组(不以 \0 结尾的 char 数组)或者整数,redis中ziplist结果如下图所示: area |<---- ziplist header ---->|<----------- entries ------------->|<-end->| size 4 bytes 4 bytes 2 bytes ? ? ? ? 1 byte +---------+--------+-------+--------+--------+--------+--------+-------+ component | zlbytes | zltail | zllen | entry1 | entry2 | ... | entryN | zlend | +---------+--------+-------+-------