Step 3 - Challenge: SET and GET

Step 3 - Challenge: SET and GET

In this step your goal is to set and get the value of a key. You’re going to implement the core functionality of Redis.

To set a key in Redis we use the command SET. For this step we’re just going to implement the simplest version, i.e.:

% redis-cli set Name John
OK

We’ll ignore all the expiry options that Redis supports for now. Once a key has been set you’ll want to implement and test the related command GET.

% redis-cli get Name
"John"

When you are implementing the commands don’t forget to read the specification for each command to check that you are returning the correct results to the client and that the results are correctly serialised according to the RESP protocol.

You might also like to use the Redis client library to build some automated tests for your server.

Don’t forget to test edge/error cases as well as the happy path.

Build Your Own Redis Server (Python Edition)

Buy nowLearn more

Introduction

  • Introduction
  • Learn About Redis

Step 0 - Setting Up

  • Step Goals
  • Installing Redis
  • Setting Up Python
  • Learn To Use Redis, Redis CLI And Redis Benchmark
  • Create A GitHub Repo For Your Project.1

Step 1 - Introduction to RESP, Building a Protocol Handler Using Test-Driven Development

  • Introduction to RESP
  • Introduction to Test Driven Development
  • Using Test Driven Development to Build a Protocol Handler
  • Step 1 - Challenge: Protocol Handling
  • Step 1 - Solution: Protocol Handling5

Step 2 - Creating a Network Client and Server

  • Introduction To Creating A Network Client And Server4
  • Serialising the RESP Data Types2
  • Building a Simple Redis CLI
  • Testing the CLI Against Redis
  • Sample Solution for a Simple Redis CLI8
  • Step 2 - Challenge: Handling PING and ECHO Commands
  • Building a Simple Server To Handle Incoming Connections
  • Responding To The PING And ECHO Commands
  • Step 2 - Solution: Handling PING and ECHO Commands3

Step 3 - Data Structures, Set and Get

  • Set Up Continuous Integration
  • Step 3 - Challenge: SET and GET
  • Adding The Core Data Structure
  • Handling The Set Command
  • Handling the Get command
  • Using the Redis CLI to test Set and Get
  • Step 3 - Solution: SET and GET4

Step 4 - Handling Concurrency

  • Step 4 - Challenge: Handling Concurrent Clients1
  • Threads Versus Async
  • Making The Data Store Thread-Safe
  • Handling Concurrent Clients With Threads
  • Using The Redis CLI And Redis Benchmark To Test Concurrency
  • Step 4 - Solution: Handling Concurrent Clients With Threads
  • Step 4 - Async Solution: Handling Concurrent Clients With Async IO2

Step 5 - Implementing Expiry

  • Introducing The Two Methods Of Expiry
  • Step 5 - Challenge: Implementing Key Expiry
  • Updating The Data Store And Set Command Handler Ready For Expiry
  • Implementing Expire On Read2
  • Implementing Background Expiry
  • Step 5 - Solution: Implementing Key Expiry (Common Parts)1
  • Step 5 - Solution: Implementing Key Expiry Using Threads
  • Step 5 - Solution: Implementing Key Expiry Asynchronously

Step 6 - Implementing More Commands

  • Step 6 - Challenge: Adding More Commands2
  • Impelenting EXISTS and DEL
  • Implementing INCR and DECR3
  • Implementing LPUSH, RPUSH And LRANGE2
  • Step 6 - Solution: Adding More Commands2

Step 7 - Performance

  • Step 7 - Challenge: Performance Optimisation and Benchmarking
  • Benchmarking Your Server
  • How To Optimise For Performance
  • Performance Tuning The Server3

Step 8 - Persistence

  • Step 8 - Challenge: Persistence
  • Persisting The Database
  • Loading The Database
  • Step 8 - Solution: Persistence

Closing Remarks

  • The Complete Final Solution
  • Going Further
  • Wrapping Up