Aris is a simple in-memory database fully compatible with the Redis protocol, written in Go. It implements the Redis Serialization Protocol (RESP) for client-server communication.
- ✅ RESP (Redis Serialization Protocol) parsing
- ✅ High-performance gnet-based server
- ✅ Standard Go net server fallback
- ✅ Redis commands: SET, GET, PING, HSET, HGET, HGETALL
- ✅ Thread-safe in-memory storage
- ✅ Concurrent client connections
- 🔲 Data persistence
- 🔲 Additional Redis commands
- 🔲 Pub/Sub support
git clone https://github.com/ODudek/go-aris.git
cd go-aris
go build .go run .
# or explicitly
go run . -gnet=true -port=:8089go run . -gnet=false -port=:8089The server will start on port 8089 and accept Redis-compatible commands.
redis-cli -p 8089- Go 1.20 or higher
go test ./...go build ..
├── main.go # Application entry point
├── server/ # Server implementations
│ ├── handler.go # Server interface and config
│ ├── gnet_server.go # High-performance gnet server
│ └── standard_server.go # Standard Go net server
├── commands/ # Redis command handlers
│ ├── command.go # Command interface
│ ├── parser.go # Command parsing logic
│ ├── ping.go # PING command
│ ├── set.go # SET command
│ ├── get.go # GET command
│ ├── hset.go # HSET command
│ ├── hget.go # HGET command
│ └── hgetall.go # HGETALL command
├── storage/ # In-memory storage
│ └── storage.go # Thread-safe storage implementation
└── resp/ # Redis Serialization Protocol
├── reader.go # RESP message parsing
├── writer.go # RESP message formatting
└── *.go # RESP data types (str, int, bulk, array, null, err)
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Aris uses gnet by default for exceptional performance:
- Event-driven architecture - No goroutines per connection overhead
- Multi-core support - Scales across CPU cores
- Memory efficient - Lower memory footprint than standard net
- High throughput - Handles thousands of concurrent connections
You can switch to standard Go net server using -gnet=false for compatibility.
- Implement handlers for SET, GET, PING, HSET, HGET, HGETALL commands
- Implement thread-safe in-memory storage
- Support concurrent client connections
- High-performance server with gnet
- Add data persistence to file
- Add more Redis commands (DEL, EXISTS, EXPIRE, etc.)
- Add comprehensive test coverage
- Add Docker support
- Performance benchmarking vs Redis
- Pub/Sub support
- Clustering support
This project is licensed under the MIT License - see the LICENSE file for details.