大家好,今天给大家介绍一下我的新书 —— 《Redis核心原理与实践》

后端开发的同学应该对Redis都不陌生,Redis由于性能极高、功能强大,已成为业界非常流行的内存数据库。

《Redis核心原理与实践》这本书深入地分析了Redis常用特性的内部机制与实现方式,大部分内容源自对Redis源码的分析,并从中总结出实现原理。通过阅读本书,读者可以快速、轻松地了解Redis的内部运行机制。

为什么写这本书?

我一直希望从源码层面深入分析一个C语言实现的分布式系统程序。原因如下:

(1)C语言可以说是最接近低级语言的开发语言,分析C语言程序,可以让我们更深入理解操作系统底层知识。

(2)随着互联网行业发展,对后端系统高可用,高性能的要求越来越高,分布式系统也越来越流行。分析一个分布式系统的设计与实现,对我们的工作、学习都有很大帮助。

于是,我便阅读学习了Redis源码,并编写了《Redis核心原理与实践》这本书。

为什么选择Redis呢?因为Redis是一个典型的“小而美”的程序。

Redis实现简单,源码非常优雅简洁,阅读起来并不吃力,而且Redis功能齐全,涵盖了数据存储,分布式,消息流等众多特性,非常值得深入学习。

通过写作这本书,我对Redis,Unix编程,分布式系统、存储系统都有了更进一层的理解,再学习其他相关的系统(如Mysql、Nginx,Kafka),也可以举一反三,触类旁通。希望这本书也可以帮助读者百尺竿头,更进一步。

本书结构

第一部分主要分析了Redis中字符串、散列、列表、集合,有序集合这五种数据类型的编码格式。

编码格式,即数据的存储格式,对于数据库,数据的存储格式至关重要,如关系型数据库的行式存储和列式存储。而Redis作为内存数据库,对于数据编码的总体设计思想是:最大限度的“以时间换空间”,从而最大限度地节省内存。

这一部分内容详细分析了Redis对内存的使用如何达到“锱铢必较”的程度。

第二部分分析了Redis的核心流程,包括Redis事件机制与命令执行过程。

Redis利用IO复用模型,实现了自己的事件循环机制,而Redis正在由该事件机制驱动运行(很多远程服务程序都是使用类似的架构,如Nginx,Mysql等)。

Redis事件机制设计优雅,实现简单,并且性能卓越,可以说是“化繁为简”。

第三部分分析了Redis持久化与复制机制。虽然Redis是内存数据库,但仍然最大限度保证的数据的可靠性。

不管是文件持久化,还是从节点复制,核心思想都是一样的,通过将数据复制到多个副本中,从而保持数据安全。

这部分内容分析了RDB、AOF持久化机制,主从节点复制流程等内容,向读者展示了Redis数据是如何“不胫而走”的。

第四部分分析了Redis分布式架构。这部分内容从流行的分布式算法Raft算法出发,分析Sentient如何监控节点,Cluster集群如何实现数据分片,支持动态新增、删除集群节点,以及它们的“拿手好戏"——故障转移。

分布式系统常常让我联想到一个有趣的词,铁索连舟(将集群节点想象为”舟“,节点之间的网络连接想象为”索“)。

第五部分分析了Redis中的高级特性,包括Redis事务、非阻塞删除、ACL权限控制列表、Tracking机制、Lua脚本、Module模块、Stream消息流等内容,并且提供了详细的使用案例,帮助读者循序渐进,由浅到深地进行学习理解。

Redis为各种高性能,高可用场景提供了非常全面的支持,可以说是”包罗万象“。

本书特点

本书深入分析Redis实现原理,并不是Redis入门书。为了尽量降低本书阅读难度,本书总结了Redis各核心功能的实现机制,提取Redis核心代码(本书会尽量避免堆积代码),并以适量图文,对Redis源码以及实现原理进行详细分析,向读者展示Redis核心功能的设计思想,实现流程。

本书虽然大部分内容基于Redis源码分析,但是并不复杂,即使你只是简单了解C语言的基础语法,也可以轻松读懂。

推荐理由

  • 新版本:基于Redis 6.0.9,并分析了Redis新特性,如Redis 6的ACL、Tracking、IO线程等机制。
  • 重实践:本书在对应知识点的基础上提供了详细的应用示例,帮助读者由浅到深地学习和理解Redis新特性。
  • 易掌握:本书总结了Redis各个核心功能的实现原理,并以适量图文、丰富示例,对Redis源码及其实现原理进行详细分析,循序渐进地向读者展示Redis核心功能的设计思想和实现流程。读者也可以结合本书,自行阅读Redis源码。
  • 内容丰富:本书不仅分析了Redis的功能,还由Redis源码延展了如下两方面内容:

    (1)详细介绍Redis中使用到的Unix机制,包括Unix网络编程、进程(线程)的应用等内容,并通过源码展示Redis如何使用这些Unix机制。

    (2)深入分析Redis如何实现一个分布式系统,主要是Sentinel、Cluster机制如何实现一个高可用的分布式系统。

由于我能力有限,书中难免有遗漏或错误,若您在阅读本书的过程中有任何问题或者建议,欢迎大家沟通交流。我会对您提出的问题、建议进行梳理与反馈,并在本书后续版本中及时做出勘误与更新。

经过本书编辑同意,我后续会在个人技术公众号(binecy)发布书中部分章节内容,作为书的预览内容,欢迎大家查阅,谢谢。

京东链接

豆瓣链接

新书介绍 -- 《Redis核心原理与实践》的更多相关文章

  1. Redis核心原理与实践--Redis启动过程源码分析

    Redis服务器负责接收处理用户请求,为用户提供服务. Redis服务器的启动命令格式如下: redis-server [ configfile ] [ options ] configfile参数指 ...

  2. Redis核心原理与实践--字符串实现原理

    Redis是一个键值对数据库(key-value DB),下面是一个简单的Redis的命令: > SET msg "hello wolrd" 该命令将键"msg&q ...

  3. Redis核心原理与实践--列表实现原理之ziplist

    列表类型可以存储一组按插入顺序排序的字符串,它非常灵活,支持在两端插入.弹出数据,可以充当栈和队列的角色. > LPUSH fruit apple (integer) 1 > RPUSH ...

  4. Redis核心原理与实践--列表实现原理之quicklist结构

    在上一篇文章<Redis列表实现原理之ziplist结构>,我们分析了ziplist结构如何使用一块完整的内存存储列表数据. 同时也提出了一个问题:如果链表很长,ziplist中每次插入或 ...

  5. Redis核心原理与实践--散列类型与字典结构实现原理

    Redis散列类型可以存储一组无序的键值对,它特别适用于存储一个对象数据. > HSET fruit name apple price 7.6 origin china 3 > HGET ...

  6. Redis核心原理与实践--事务实践与源码分析

    Redis支持事务机制,但Redis的事务机制与传统关系型数据库的事务机制并不相同. Redis事务的本质是一组命令的集合(命令队列).事务可以一次执行多个命令,并提供以下保证: (1)事务中的所有命 ...

  7. Redis核心原理

    Redis系统介绍: Redis的基础介绍与安装使用步骤:https://www.jianshu.com/p/2a23257af57b Redis的基础数据结构与使用:https://www.jian ...

  8. Spark 以及 spark streaming 核心原理及实践

    收录待用,修改转载已取得腾讯云授权 作者 | 蒋专 蒋专,现CDG事业群社交与效果广告部微信广告中心业务逻辑组员工,负责广告系统后台开发,2012年上海同济大学软件学院本科毕业,曾在百度凤巢工作三年, ...

  9. JDK ThreadPoolExecutor核心原理与实践

    一.内容概括 本文内容主要围绕JDK中的ThreadPoolExecutor展开,首先描述了ThreadPoolExecutor的构造流程以及内部状态管理的机理,随后用大量篇幅深入源码探究了Threa ...

随机推荐

  1. Python基础之动态添加属性,方法,动态类,静态类

    ## 动态添加属性class Person: def __init__(self,name): self.name = name# 1.通过对象.属性名称来操作p = Person('KTModel' ...

  2. Web 字体 font-family 浅谈

    前言 最近研究各大网站的font-family字体设置,发现每个网站的默认值都不相同,甚至一些大网站也犯了很明显的错误,说明字体还是有很大学问的,值的我们好好研究. 不同的操作系统.不同浏览器下内嵌的 ...

  3. CSP-S 2020 初赛

    游记 游记个鬼啊跨条街就到了=-= 不分Day反正就一天. 9:30开考,8:30起床. 下雨了,一出宿舍门整个学校全被白色的雾气笼罩.愚以为这是祥瑞之气,昨夜似有麒麟貔貅路过,祝我今日初赛RP++ ...

  4. java 8新特性 并行流

    使用并行流,提高cpu利用率,提高运算速度 /** * java 8并行流 * 底层运用fork join框架 */ @Test public void test(){ Instant start = ...

  5. odoo里面的一些ORM操作

    案例0001sale_obj=self.env['sale.order'].browse(k)通过browse查找对象找到对象里面的 sale_obj.name browse 获取一个数据库id或一个 ...

  6. 🏆【Java技术专区】「并发编程专题」教你如何使用异步神器CompletableFuture

    前提概要 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值.这时候,大家可能会去尝试使用Callable中的 ...

  7. mysql中的with rollup得到group by的汇总信息

    使用mysql中的with rollup可以得到每个分组的汇总级别的数据: 表如下: CREATE TABLE `test3` (  `id` int(5) unsigned NOT NULL AUT ...

  8. 洛谷P1377题解

    题面 首先他叫我们建一颗笛卡尔树,所以我们就建一颗笛卡尔树. 然后他说要生成序列中最小的.想到笛卡尔树的一条性质:左<根<右.但是根节点必须先插进去.他的两个儿子用贪心的思想就知道是先选左 ...

  9. 攻防世界Web区部分题解

    攻防世界Web区部分题解   前言:PHP序列化就是把代码中所有的 对象 , 类 , 数组 , 变量 , 匿名函数等全部转换为一个字符串 , 提供给用户传输和存储 . 而反序列化就是把字符串重新转换为 ...

  10. Oracle数据泵导入的时候创建索引是否会使用并行?

    一.疑问,Oracle数据泵导入的时候创建索引是否会使用并行? 某客户需要使用数据泵进行迁移,客户咨询导入的时间能不能加快一点. 那么如何加快导入的速度呢? 多加一些并行,那么创建索引内部的索引并行度 ...