https://github.com/sadaf2005/recache
A lightweight, custom implementation of a Redis-like server built from scratch using Node.js. This server supports a subset of Redis commands and features, providing a simple yet powerful in-memory key-value store with additional functionality like transactions, expiry, multiple execution and persistence.
https://github.com/sadaf2005/recache
docker docker-image javascript nodejs parser-library redis redis-cache redis-server
Last synced: 4 months ago
JSON representation
A lightweight, custom implementation of a Redis-like server built from scratch using Node.js. This server supports a subset of Redis commands and features, providing a simple yet powerful in-memory key-value store with additional functionality like transactions, expiry, multiple execution and persistence.
- Host: GitHub
- URL: https://github.com/sadaf2005/recache
- Owner: Sadaf2005
- Created: 2025-02-15T08:46:32.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-15T11:22:48.000Z (over 1 year ago)
- Last Synced: 2025-04-12T00:49:11.979Z (about 1 year ago)
- Topics: docker, docker-image, javascript, nodejs, parser-library, redis, redis-cache, redis-server
- Language: JavaScript
- Homepage:
- Size: 20.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ReCache: A Custom Redis Server
## Project Overview
This project, ReCache, is a custom implementation of a Redis-like in-memory data structure store built using **Node.js**. It provides a lightweight, in-memory key-value store designed to replicate some of the core functionalities and behaviors of the popular open-source Redis server. The goal is to offer a deeper understanding of how such high-performance data stores work, while being simple, extensible, and easy to use for learning, testing, or lightweight applications.
## 🚀 Features
ReCache is under active development and currently supports a range of fundamental Redis-like features:
* **GET & SET:** Store and retrieve key-value pairs.
* **INCR & DECR:** Perform atomic increment and decrement operations on numeric values.
* **Lists (LPUSH, RPUSH, LPOP, RPOP, LRANGE):** Implement list operations for managing ordered sequences of elements, suitable for queue-like behaviors.
* **EXPIRE & TTL:** Set a time-to-live (TTL) for keys, allowing for automatic expiration.
* **DEL:** Remove keys and their associated values from storage.
* **Persistence:** Data is saved inside a Docker container for basic durability.
* **Transaction Support (MULTI, EXEC, DISCARD):** (Planned) Support for atomic execution of command batches.
* **Pub/Sub:** (Coming Soon) A real-time messaging system for publish/subscribe functionality.
## Motivation
The primary motivations behind building ReCache include:
* **Educational Purposes:** To gain a comprehensive understanding of the internal workings of an in-memory data store like Redis, including network programming, data structure management, and protocol implementation.
* **Exploring Performance:** To experiment with different implementation techniques and data structures in Node.js to understand their impact on performance.
* **Customization and Specialization:** To create a base for building a data store with specific optimizations or features not present in the standard Redis.
* **Skill Development:** To enhance skills in Node.js development, network programming, and understanding database internals.
## Tech Stack
ReCache is built using the following technologies:
* **Core Programming Language:** Node.js
* **Protocol Parsing:** Likely utilizes a library like `redis-parser` for handling the Redis Serialization Protocol (RESP).
* **Data Structures:** Custom or built-in Node.js data structures for key-value storage and list implementations.
* **Networking:** Node.js's built-in networking modules for handling TCP connections.
## 📦 Setup & Installation
To get a local copy of ReCache up and running, follow these steps:
1. **Clone the Repository:**
```bash
git clone https://github.com/Sadaf2005/ReCache.git
```
2. **Navigate to the project directory:**
```bash
cd ReCache
```
3. **Install Dependencies:**
*(Assuming a `package.json` with dependencies)*
```bash
npm install
# or yarn install
```
4. **Start the ReCache Server:**
Run the server in one terminal:
```bash
node index.js
```
The server should start and listen on port `8001`.
5. **Start a Docker Container for Persistence (Optional but Recommended):**
Ensure Docker is installed, then build your Docker image (if you haven't already, based on a provided Dockerfile in the repo) and run:
```bash
docker build -t recache-image . # Build the image if a Dockerfile exists
docker run --name recache-container -v $(pwd)/data:/data -d recache-image
```
(Replace `recache-image` with your actual image name if different.)
To restart the container after stopping it:
```bash
docker start recache-container
```
## Quick Guide to Test the Server
You can connect to the ReCache server using the `redis-cli` tool (assuming you have it installed) or other compatible Redis clients.
Open another terminal and run:
```bash
redis-cli -p 8001
```
### Supported Commands
#### Basic Commands
```
127.0.0.1:8001> SET mykey "Hello, World!"
+OK
127.0.0.1:8001> GET mykey
$13
Hello, World!
127.0.0.1:8001> DEL mykey
:1
127.0.0.1:8001> SET counter 10
+OK
127.0.0.1:8001> INCR counter
:11
127.0.0.1:8001> DECR counter
:10
```
#### List Commands
```
127.0.0.1:8001> LPUSH mylist "item1"
:1
127.0.0.1:8001> RPUSH mylist "item2"
:2
127.0.0.1:8001> LPOP mylist
$5
item1
127.0.0.1:8001> RPOP mylist
$5
item2
127.0.0.1:8001> LRANGE mylist 0 -1
*0
```
#### Expiry Commands
```
127.0.0.1:8001> SET tempkey "tempvalue"
+OK
127.0.0.1:8001> EXPIRE tempkey 10
:1
127.0.0.1:8001> TTL tempkey
:8
```
#### Transaction Commands (If Implemented)
```
127.0.0.1:8001> MULTI
+OK
127.0.0.1:8001> SET key1 "value1"
+QUEUED
127.0.0.1:8001> INCR counter
+QUEUED
127.0.0.1:8001> EXEC
*2
+OK
:11
127.0.0.1:8001> MULTI
+OK
127.0.0.1:8001> SET key2 "value2"
+QUEUED
127.0.0.1:8001> DISCARD
+OK
```
## Future Enhancements
The following features are planned for future development:
* Support for more data types (e.g., sets, hashes, sorted sets)
* Implement clustering for horizontal scaling
* Add authentication and security features
* Optimize performance and add benchmarking
* Full implementation of Pub/Sub
## Contributing
Contributions to ReCache are welcome! If you find bugs, have suggestions for improvements, or want to add new features, feel free to:
1. Fork the repository
2. Create a new branch (`git checkout -b feature/your-feature`)
3. Make your changes
4. Commit your changes (`git commit -am 'Add some feature'`)
5. Push to the branch (`git push origin feature/your-feature`)
6. Create a new Pull Request
Please ensure your code adheres to any existing coding styles and includes appropriate tests if applicable.
## License
This project is licensed under the MIT License. See the LICENSE file for details.
## Acknowledgments
* Inspired by the official Redis project
* Built using Node.js and potentially the `redis-parser` library *(Confirm library usage from code)*
## Connect with Me
* GitHub: [github.com/Sadaf2005]
* Email: [alisadaf434@gmail.com]