125 lines
4.1 KiB
Markdown
125 lines
4.1 KiB
Markdown
|
|
## Backend Support
|
|
|
|
HeroDB supports two storage backends, both with full encryption support:
|
|
|
|
- **redb** (default): Full-featured, optimized for production use
|
|
- **sled**: Alternative embedded database with encryption support
|
|
|
|
### Starting HeroDB with Different Backends
|
|
|
|
```bash
|
|
# Use default redb backend
|
|
./target/release/herodb --dir /tmp/herodb_redb --port 6379
|
|
|
|
# Use sled backend
|
|
./target/release/herodb --dir /tmp/herodb_sled --port 6379 --sled
|
|
|
|
# Use redb with encryption
|
|
./target/release/herodb --dir /tmp/herodb_encrypted --port 6379 --encrypt --key mysecretkey
|
|
|
|
# Use sled with encryption
|
|
./target/release/herodb --dir /tmp/herodb_sled_encrypted --port 6379 --sled --encrypt --key mysecretkey
|
|
```
|
|
|
|
### Command Support by Backend
|
|
|
|
Command Category | redb | sled | Notes |
|
|
|-----------------|------|------|-------|
|
|
**Strings** | | | |
|
|
SET | ✅ | ✅ | Full support |
|
|
GET | ✅ | ✅ | Full support |
|
|
DEL | ✅ | ✅ | Full support |
|
|
EXISTS | ✅ | ✅ | Full support |
|
|
INCR/DECR | ✅ | ✅ | Full support |
|
|
MGET/MSET | ✅ | ✅ | Full support |
|
|
**Hashes** | | | |
|
|
HSET | ✅ | ✅ | Full support |
|
|
HGET | ✅ | ✅ | Full support |
|
|
HGETALL | ✅ | ✅ | Full support |
|
|
HDEL | ✅ | ✅ | Full support |
|
|
HEXISTS | ✅ | ✅ | Full support |
|
|
HKEYS | ✅ | ✅ | Full support |
|
|
HVALS | ✅ | ✅ | Full support |
|
|
HLEN | ✅ | ✅ | Full support |
|
|
HMGET | ✅ | ✅ | Full support |
|
|
HSETNX | ✅ | ✅ | Full support |
|
|
HINCRBY/HINCRBYFLOAT | ✅ | ✅ | Full support |
|
|
HSCAN | ✅ | ✅ | Full support with pattern matching |
|
|
**Lists** | | | |
|
|
LPUSH/RPUSH | ✅ | ✅ | Full support |
|
|
LPOP/RPOP | ✅ | ✅ | Full support |
|
|
LLEN | ✅ | ✅ | Full support |
|
|
LRANGE | ✅ | ✅ | Full support |
|
|
LINDEX | ✅ | ✅ | Full support |
|
|
LTRIM | ✅ | ✅ | Full support |
|
|
LREM | ✅ | ✅ | Full support |
|
|
BLPOP/BRPOP | ✅ | ❌ | Blocking operations not in sled |
|
|
**Expiration** | | | |
|
|
EXPIRE | ✅ | ✅ | Full support in both |
|
|
TTL | ✅ | ✅ | Full support in both |
|
|
PERSIST | ✅ | ✅ | Full support in both |
|
|
SETEX/PSETEX | ✅ | ✅ | Full support in both |
|
|
EXPIREAT/PEXPIREAT | ✅ | ✅ | Full support in both |
|
|
**Scanning** | | | |
|
|
KEYS | ✅ | ✅ | Full support with patterns |
|
|
SCAN | ✅ | ✅ | Full cursor-based iteration |
|
|
HSCAN | ✅ | ✅ | Full cursor-based iteration |
|
|
**Transactions** | | | |
|
|
MULTI/EXEC/DISCARD | ✅ | ❌ | Only supported in redb |
|
|
**Encryption** | | | |
|
|
Data-at-rest encryption | ✅ | ✅ | Both support [age](age.tech) encryption |
|
|
AGE commands | ✅ | ✅ | Both support AGE crypto commands |
|
|
**Full-Text Search** | | | |
|
|
FT.CREATE | ✅ | ✅ | Create search index with schema |
|
|
FT.ADD | ✅ | ✅ | Add document to search index |
|
|
FT.SEARCH | ✅ | ✅ | Search documents with query |
|
|
FT.DEL | ✅ | ✅ | Delete document from index |
|
|
FT.INFO | ✅ | ✅ | Get index information |
|
|
FT.DROP | ✅ | ✅ | Drop search index |
|
|
FT.ALTER | ✅ | ✅ | Alter index schema |
|
|
FT.AGGREGATE | ✅ | ✅ | Aggregate search results |
|
|
|
|
### Performance Considerations
|
|
|
|
- **redb**: Optimized for concurrent access, better for high-throughput scenarios
|
|
- **sled**: Lock-free architecture, excellent for specific workloads
|
|
|
|
### Encryption Features
|
|
|
|
Both backends support:
|
|
- Transparent data-at-rest encryption using the `age` encryption library
|
|
- Per-database encryption (databases >= 10 are encrypted when `--encrypt` flag is used)
|
|
- Secure key derivation using the master key
|
|
|
|
### Backend Selection Examples
|
|
|
|
```bash
|
|
# Example: Testing both backends
|
|
redis-cli -p 6379 SET mykey "redb value"
|
|
redis-cli -p 6381 SET mykey "sled value"
|
|
|
|
# Example: Using encryption with both
|
|
./target/release/herodb --port 6379 --encrypt --key secret123
|
|
./target/release/herodb --port 6381 --sled --encrypt --key secret123
|
|
|
|
# Both support the same Redis commands
|
|
redis-cli -p 6379 HSET user:1 name "Alice" age "30"
|
|
redis-cli -p 6381 HSET user:1 name "Alice" age "30"
|
|
|
|
# Both support SCAN operations
|
|
redis-cli -p 6379 SCAN 0 MATCH user:* COUNT 10
|
|
redis-cli -p 6381 SCAN 0 MATCH user:* COUNT 10
|
|
```
|
|
|
|
### Migration Between Backends
|
|
|
|
To migrate data between backends, use Redis replication or dump/restore:
|
|
|
|
```bash
|
|
# Export from redb
|
|
redis-cli -p 6379 --rdb dump.rdb
|
|
|
|
# Import to sled
|
|
redis-cli -p 6381 --pipe < dump.rdb
|
|
``` |