Merge branch 'append'
This commit is contained in:
		
							
								
								
									
										86
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								README.md
									
									
									
									
									
								
							@@ -1,5 +1,6 @@
 | 
			
		||||
# HeroDB
 | 
			
		||||
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
Redis-compatible database server with encryption and AGE cryptographic operations.
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
@@ -13,11 +14,37 @@ Redis-compatible database server with encryption and AGE cryptographic operation
 | 
			
		||||
- Persistent storage using redb
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
=======
 | 
			
		||||
HeroDB is a Redis-compatible database built with Rust, offering a flexible and secure storage solution. It supports two primary storage backends: `redb` (default) and `sled`, both with full encryption capabilities. HeroDB aims to provide a robust and performant key-value store with advanced features like data-at-rest encryption, hash operations, list operations, and cursor-based scanning.
 | 
			
		||||
 | 
			
		||||
## Purpose
 | 
			
		||||
 | 
			
		||||
The main purpose of HeroDB is to offer a lightweight, embeddable, and Redis-compatible database that prioritizes data security through transparent encryption. It's designed for applications that require fast, reliable data storage with the option for strong cryptographic protection, without the overhead of a full-fledged Redis server.
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
- **Redis Compatibility**: Supports a subset of Redis commands over RESP (Redis Serialization Protocol) via TCP.
 | 
			
		||||
- **Dual Backend Support**:
 | 
			
		||||
    - `redb` (default): Optimized for concurrent access and high-throughput scenarios.
 | 
			
		||||
    - `sled`: A lock-free, log-structured database, excellent for specific workloads.
 | 
			
		||||
- **Data-at-Rest Encryption**: Transparent encryption for both backends using the `age` encryption library.
 | 
			
		||||
- **Key-Value Operations**: Full support for basic string, hash, and list operations.
 | 
			
		||||
- **Expiration**: Time-to-live (TTL) functionality for keys.
 | 
			
		||||
- **Scanning**: Cursor-based iteration for keys and hash fields (`SCAN`, `HSCAN`).
 | 
			
		||||
- **AGE Cryptography Commands**: HeroDB-specific extensions for cryptographic operations.
 | 
			
		||||
 | 
			
		||||
## Quick Start
 | 
			
		||||
 | 
			
		||||
### Building HeroDB
 | 
			
		||||
 | 
			
		||||
To build HeroDB, navigate to the project root and run:
 | 
			
		||||
>>>>>>> append
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
cargo build --release
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
@@ -80,4 +107,61 @@ redis-cli -p 6379 AGE GENENC
 | 
			
		||||
- **Storage**: redb embedded database
 | 
			
		||||
- **Protocol**: Redis RESP protocol over TCP
 | 
			
		||||
- **Encryption**: ChaCha20-Poly1305 for data, AGE for operations
 | 
			
		||||
- **Concurrency**: Tokio async runtime
 | 
			
		||||
- **Concurrency**: Tokio async runtime
 | 
			
		||||
=======
 | 
			
		||||
### Running HeroDB
 | 
			
		||||
 | 
			
		||||
You can start HeroDB with different backends and encryption options:
 | 
			
		||||
 | 
			
		||||
#### Default `redb` Backend
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
./target/release/herodb --dir /tmp/herodb_redb --port 6379
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### `sled` Backend
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
./target/release/herodb --dir /tmp/herodb_sled --port 6379 --sled
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### `redb` with Encryption
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
./target/release/herodb --dir /tmp/herodb_encrypted --port 6379 --encrypt --key mysecretkey
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### `sled` with Encryption
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
./target/release/herodb --dir /tmp/herodb_sled_encrypted --port 6379 --sled --encrypt --key mysecretkey
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage with Redis Clients
 | 
			
		||||
 | 
			
		||||
HeroDB can be interacted with using any standard Redis client, such as `redis-cli`, `redis-py` (Python), or `ioredis` (Node.js).
 | 
			
		||||
 | 
			
		||||
### Example with `redis-cli`
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
redis-cli -p 6379 SET mykey "Hello from HeroDB!"
 | 
			
		||||
redis-cli -p 6379 GET mykey
 | 
			
		||||
# → "Hello from HeroDB!"
 | 
			
		||||
 | 
			
		||||
redis-cli -p 6379 HSET user:1 name "Alice" age "30"
 | 
			
		||||
redis-cli -p 6379 HGET user:1 name
 | 
			
		||||
# → "Alice"
 | 
			
		||||
 | 
			
		||||
redis-cli -p 6379 SCAN 0 MATCH user:* COUNT 10
 | 
			
		||||
# → 1) "0"
 | 
			
		||||
#    2) 1) "user:1"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Documentation
 | 
			
		||||
 | 
			
		||||
For more detailed information on commands, features, and advanced usage, please refer to the documentation:
 | 
			
		||||
 | 
			
		||||
- [Basics](docs/basics.md)
 | 
			
		||||
- [Supported Commands](docs/cmds.md)
 | 
			
		||||
- [AGE Cryptography](docs/age.md)
 | 
			
		||||
>>>>>>> append
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user