# About

> #### Head over to [Leanpub](https://leanpub.com/practical-redis) to grab a PDF version of this book

## Redis

[Redis](https://redis.io/) is an open source in-memory data structure server a.k.a **a NoSQL key-value database**

* **Data Structure Server** - simply put, Redis is a database but differs from traditional ones since it directly exposes core data structures - strings, lists, sets, hashes, sorted sets, geospatial indexes, hyperloglogs, bitmaps etc.
  * It is possible to add new data structures and capabilities using [Redis Modules](https://redis.io/modules)
* **Other key features** - Transactions, Pub Sub messaging, Queuing, Lua scripting, ability to process infinite *Streams* of data
* **Redis also offers** - Tunable persistence mechanisms, Sentinel for High Availability and Redis Cluster for data sharding/partitioning
* **Usage patterns** include (but are not limited to) key-value database, a cache server, message broker, session store, analytics engine etc.

## About **Practical Redis**

As the name suggests, **Practical Redis** is a hands-on, code-driven guide to Redis. Each chapter is based on an application (simple to medium complexity) which demonstrates the usage of Redis and its capabilities (data structures, commands etc.).

The applications in the book are written in [Golang](https://golang.org) and [Docker Compose](https://docs.docker.com/compose/) is used to spin up the applications (along with Redis) easily and quickly with a single command.

## Summary of chapters

Here is a quick outline of the book contents

* **Hello Redis** - quick tour of Redis capabilities including its versatile data structures
* **Redis: the basic data structures** - intro to core Redis data structures with a simple news sharing app
* **Tweet analysis service** - keep track of relevant tweets using a service which ingests tweets, consumes/processes them and produces queryable info in real time using `reliable queues` (Redis `LIST`s), `SET`s and `HASH`es
* **Extending Redis with Redis Modules** - learn about the basics of [Redis Modules](https://redis.io/modules) and make use of [ReBloom](https://github.com/RedisLabsModules/rebloom/) in a recommendation service

> ### Coming soon ...

Here is the tentative list of chapters which are planned for future releases (please note that these are subject to change)

* Pipelines and Transactions in Redis
* Scalable chat application - Use Redis PubSub and Websocket to create a chat service
* Stream processing with Redis - watch Redis Streams in action (new data structure in Redis 5.0)
* Using Redis on Kubernetes
* Redis and Kafka based application
* Data partitioning in Redis - practical examples highlighting data sharding strategies in Redis
* Redis high availability
* Distributed co-ordination with Redis

## Who is this book suitable for ?

Although I would love for this book to be used by everyone, but, it is most suitable developers who are looking to learn Redis in hands-on style

* Beginners will get a good idea of the breadth of Redis capabilities and pick up Redis faster by seeing it in action and getting their hands dirty with actual application code
* Someone who knows Redis but has not had enough hands-on experience (maybe you have been called upon to use it in a project at work ?) &#x20;
* Last but not the least, Redis ninjas might use this book as a 'refresher' if need be (although there are tons of other resources including the excellent [Redis commands documentation](https://redis.io/commands))&#x20;

## What it is not supposed to do ?

* A theoretical discourse about the nuts and bolts of Redis e.g. it's protocol etc.
* Deep dive into administrative features of Redis
* Cover extensive Docker related topics


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://abhishek-gupta.gitbook.io/practical-redis/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
