Skip to content

Rover: Go-based, Redis-Compatible In-Memory Key-Value Store. It aims to provide the simplicity and speed of Redis while leveraging Go's powerful concurrency features and performance optimizations.

License

Notifications You must be signed in to change notification settings

subrotokumar/rover

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Rover: Go-based, Redis-Compatible In-Memory Key-Value Store. It aims to provide the simplicity and speed of Redis while leveraging Go's powerful concurrency features and performance optimizations.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published