FeOx Server
Ultra-fast Redis-compatible server powered by FeOxDB with sub-microsecond latency.
📚 FeOxDB Documentation | 💬 Issues
Features
- Extreme Performance: 3.7M+ SET/s, 5M+ GET/s with pipelining
- Redis Protocol Compatible: Drop-in replacement for Redis workloads
- Sub-microsecond Latency: Inherits FeOxDB's <200ns GET operations
- Thread-per-Core Architecture: Scales linearly with CPU cores
- Lock-Free Operations: Built on FeOxDB's lock-free data structures
Performance
Benchmarked on a standard development machine with 16 cores:
| Operation | Requests/sec | Latency (p50) |
|---|---|---|
| SET | 3,770,000 | 0.62ms |
| GET | 5,000,000 | 0.35ms |
Using redis-benchmark with 50 clients, pipeline depth 64, and 1M random keys
Quick Start
Installation
# From source
# Run the server
Basic Usage
# Start server on default port (6379)
# Custom configuration
Testing with Redis CLI
# Connect with redis-cli
# Basic operations
Supported Commands
Basic Operations
GET key- Get value by keySET key value [EX seconds]- Set key with optional expiryDEL key [key ...]- Delete one or more keysEXISTS key [key ...]- Check if keys exist
Atomic Operations
INCR key- Increment integer valueINCRBY key delta- Increment by specific amountDECR key- Decrement integer valueDECRBY key delta- Decrement by specific amount
TTL Operations
EXPIRE key seconds- Set expiration in secondsTTL key- Get remaining TTL in secondsPERSIST key- Remove expiration
Bulk Operations
MGET key [key ...]- Get multiple valuesMSET key value [key value ...]- Set multiple key-value pairs
Server Commands
PING [message]- Test connectionINFO [section]- Server informationCONFIG GET/SET- Configuration managementKEYS pattern- Find keys by patternSCAN cursor [MATCH pattern] [COUNT count]- Incremental key iteration
FeOx-Specific
JSONPATCH key patch- Apply JSON Patch (RFC 6902)CAS key expected new_value- Compare-and-swap operation
Configuration Options
| Option | Default | Description |
|---|---|---|
--port |
6379 | Port to listen on |
--bind |
127.0.0.1 | Bind address |
--threads |
CPU count | Number of worker threads |
--data-path |
None | Path to persistent storage (memory-only if not set) |
--log-level |
info | Logging level (trace/debug/info/warn/error) |
Building from Source
Requirements
- Rust 1.70 or later
- Linux/macOS (Windows support experimental)
- For best performance: Linux with io_uring support
Benchmarking
# Using redis-benchmark
# Basic test
Known Limitations
Concurrent Updates to Same Key
When multiple clients rapidly update the same key simultaneously, you may encounter "Timestamp is older than existing record" errors. This is by design - FeOx uses timestamp-based optimistic concurrency control for consistency.
Impact:
- Only affects concurrent updates to the same key in less than
- Normal usage with different keys is unaffected
- Performance with random keys: 3.7M SET/s, 5.0M GET/s
For benchmarking, use the -r flag with redis-benchmark to test with random keys
This is an architectural tradeoff that enables FeOx's lock-free, multi-threaded design while maintaining consistency.
Currently Not Supported (compared to Redis)
- Lists (LPUSH, RPOP, etc.)
- Sets (SADD, SMEMBERS, etc.)
- Sorted Sets (ZADD, ZRANGE, etc.)
- Hashes (HSET, HGET, etc.)
- Pub/Sub (PUBLISH, SUBSCRIBE, etc.)
- Transactions (MULTI, EXEC)
- Lua scripting
License
Apache License 2.0 - See LICENSE for details.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
Security
For security issues, please see SECURITY.md.