This is my solution to the redis server implementation challenge from https://codingchallenges.fyi/challenges/challenge-redis/
Redis is an open source in memory key-value data store that can be used in the following ways:
- caching
- real time chat apps
- queues
- leaderboards
- session store
- geospatial data ...and many more!
Redis uses the RESP protocol for communication.
Redis clients use a protocol called Redis Serialization Protocol (RESP). RESP can serialize different data types including integers, strings, and arrays. It also features an error-specific type. A client sends a request to the Redis server as an array of strings. The array’s contents are the command and its arguments that the server should execute. The server’s reply type is command-specific. RESP is binary-safe and uses prefixed length to transfer bulk data so it does not require processing bulk data transferred from one process to another.
curl -OL https://github.com/UsamaHameed/tiny-redis/releases/latest/download/tiny-redis
run the server with:
./tiny-redis
git clone [email protected]:UsamaHameed/tiny-redis.git
go build
run the server with:
./tiny-redis
# connect to redis via tcp and then try sending any of the resp strings
nc localhost 6379
# resp strings to try
+PING\r\n
$12\r\nRedis\r\n
:10\r\n
*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n
*2\r\n$3\r\nGET\r\n$5\r\nmykey\r\n
- a cron job to build since artifacts get deleted in 90 days?
- add testing guide with files
nc localhost 6379 < file
- save to file
- handle expiry time
- handle concurrent writes and reads
- properly explain how the cuncurrency works