Skip to content

Latest commit

 

History

History
110 lines (77 loc) · 3.76 KB

File metadata and controls

110 lines (77 loc) · 3.76 KB
Rover Logo

Rover

In-memory key-value store inspired by Redis, rewritten from the ground up in Go.

Go Version License Stars

🚀 Introduction

Rover is a lightning-fast, in-memory key-value store that combines the simplicity of Redis with the power of Go. Built from scratch, Rover leverages Go's robust concurrency features and performance optimizations to deliver a high-performance data storage solution.

Rover Image

✨ Features

  • 🚄 Blazing Fast: In-memory storage for rapid data access
  • 🔄 Concurrent: Utilizes Go's goroutines for efficient multi-client handling
  • Persistence: Dual persistence mechanisms (AOF & RDB) for data durability
  • 🔌 Standalone Mode: Run Rover as a standalone server
  • 🔐 Secure: (TODO: Add security features)
  • 🫙 Managing Databases: Out of the box, a Rover instance supports 16 logical databases
  • 🎨 Beautiful CLI: Eye-catching command-line interface with color support
  • 👾 Robust Command Support:
    • Data Commands: ping, get, set (with options: NX/XX, EX/PX, GET), del, exists, append
    • Counter Commands: incr, incrby, decr, decrby
    • Persistence Commands: save (synchronous save), bgsave (background save)
    • Utility Commands: flushall (clear all keys), strlen (check string length)

🛠 Installation

docker run -d --name rover -p 6379:6379 subrotokumar/rover

💾 Persistence

Rover supports two persistence mechanisms to ensure your data is durable:

Append-Only File (AOF)

AOF logs every write operation, allowing complete data reconstruction by replaying commands.

Features:

  • Real-time command logging
  • Three sync policies:
    • always: Sync after every command (safest, slowest)
    • everysec: Sync every second (balanced, default)
    • no: Let OS handle syncing (fastest, least safe)

RDB Snapshots

RDB creates point-in-time snapshots of your dataset at specified intervals.

Features:

  • Periodic automatic snapshots (default: every 5 minutes)
  • Manual snapshots with SAVE or BGSAVE commands
  • Threshold-based saves (default: after 100 changes)

Configuration

Configure persistence using environment variables:

# Disable persistence entirely
DISABLE_PERSISTENCE=true

# Customize AOF settings
AOF_PATH=./data/appendonly.aof

# Customize RDB settings  
RDB_PATH=./data/dump.rdb

# Enable debug mode
DEBUG_MODE=true

Persistence Commands

  • SAVE - Create a synchronous snapshot (blocks until complete)
  • BGSAVE - Create a snapshot in the background

Data Recovery

On startup, Rover automatically:

  1. Loads the RDB snapshot (if available)
  2. Replays AOF commands (if available)

This ensures your data is restored to its last known state.

🌟 Why Rover?

  • Go Power: Written in Go for excellent performance and concurrency
  • Redis Compatibility: Familiar Redis-like commands and interface
  • Lightweight: Minimal dependencies for a small footprint
  • Extensible: Easy to add new features and commands

📜 License

Rover is released under the Apache License Version 2.0 License. See the LICENSE file for details.

🙏 Acknowledgements

  • Inspired by Redis
  • Built with love using Go
Made with ❤️ by Subroto Kumar