Read it here.
Introduction
Needless to say, the Redis project is quite a success. It’s an
important component in backend applications.
Redis could be considered one of the building blocks of
modern computing. There are not many projects that fit the such role and
stood the test of time. Here are some examples that meet my criteria of
the “building block”: NGINX, SQLite, PostgreSQL, Kafka, Linux kernel,
etc.
Most of us are not working on projects of such a level, but it is
still worthwhile to learn from those projects. It takes higher skill and
deeper knowledge to build such projects, thus learning from those
projects could be a path to the next level as a software developer. The
book is the result of my own learning.
Why a Book?
My motivations for writing this book:
- Thanks to the open-source culture, anyone can learn from those
projects freely by reading the source code. One of my motivations for
writing the book is to share what I have learned in the past, and my
book is freely available on the web as a giving back. (You can still
purchase ebooks or paperbacks.) - Like most real-world projects, Redis is a complex project built with
lots of effort, which can be hard to grasp for beginners. Instead, my
book takes an opposite approach: learning by building things from
scratch; there are not many “from scratch” books.
Why From Scratch?
A couple of points:
- To learn faster. By building things from scratch,
concepts can be introduced gradually. Starting from the small, adding
things incrementally, and getting the big picture in the end. - To learn deeper. While there are many materials
explaining how an existing stuff works, the understanding obtained by
reading those materials is often not the same as building the stuff
yourself. It is easy to mistake memorization for understanding, and it’s
easier to pick up unimportant details than principles and basics. - To learn more. The “from scratch” approach forces
you to touch every aspect of the subject — there are no
shortcuts to knowledge! And often not every aspect is known to you
beforehand, you may discover “things I don’t know I don’t know” in the
process.
Summarized in a quote from Feynman: “What I cannot create, I do not
understand”.
Why Redis?
What makes Redis a good target is that it covers two important
subjects of software engineering: network programming and data
structures.
While there are many guides and books on network programming, I find
that there are still some gaps to be filled:
- Some books focus on the usage of socket APIs, and while mastering
socket APIs is necessary, it is not sufficient. Network programming (and
any other computing subjects) is not about using APIs, knowledge of the
event loop, protocols, timers, etc is also needed to do anything useful
in production. The socket API is only a tiny aspect of learning network
programming, and this book will cover the rest. - Other books introduce network programming by high-level libraries or
frameworks, which have downsides as stated in the “Why From Scratch” section.
Data structures are interesting topics, and what’s interesting in
Redis is that Redis only employs a few basic data structures, yet it is
quite versatile and covers quite a lot of real-world use cases.
Although many people learned some basic data structures from
textbooks, there is still something more to learn. Data structures
implemented in real projects often have some practical considerations
which are not touched by textbooks. Learning how data structures are
used in a non-toy environment is a unique experience from building
Redis.
The Book
I have split the contents into short chapters, each chapter builds on
the previous one, adding a new concept. The full source code is provided
for reference purposes, readers are advised to tinker with it or DIY
without it.
The code is written as direct and straightforwardly as I could. It’s
mostly plain C with minimal C++ features. Don’t worry if you don’t know
C, you just have the opportunity to do it in another language by
yourself.
The end result is a mini Redis alike with only about 1200 lines of
code. 1200 LoC seems low, but it illustrates many important aspects the
book attempts to cover.
The techniques and approaches used in the book are not exactly the
same as the real Redis. Some are intentionally simplified, and some are
chosen to illustrate a general topic. Readers can learn even more by
comparing different approaches.
The book is relatively short — the paperback is 120 pages of pure
content in a compact size (6x9in), and no fluffs are included.
Read the free web version here. If it’s helpful
to you, consider purchasing the ebook
or a hard copy.
Leave A Comment