mirror of
https://github.com/vlang/v.git
synced 2025-08-03 09:47:15 -04:00
Redis Client for V
This module provides a Redis client implementation in V that supports the Redis Serialization Protocol (RESP) with a type-safe interface for common Redis commands.
Features
- Type-Safe Commands: Auto-detects value types at compile time
- Pipeline Support: Group commands for batch execution
- Connection Pooling: Efficient resource management
- RESP Protocol Support: Full Redis Serialization Protocol implementation
- Memory Efficient: Pre-allocated buffers for minimal allocations
Quick Start
module main
import db.redis
fn main() {
// Connect to Redis
mut db := redis.connect(redis.Config{
host: 'localhost'
port: 6379
})!
// Set and get values
db.set('name', 'Alice')!
name := db.get[string]('name')!
println('Name: ${name}') // Output: Name: Alice
// Integer operations
db.set('counter', 42)!
db.incr('counter')!
counter := db.get[int]('counter')!
println('Counter: ${counter}') // Output: Counter: 43
// Clean up
db.close()!
}
Supported Commands
Key Operations
// Set value
db.set('key', 'value')!
db.set('number', 42)!
db.set('binary', []u8{len: 4, init: 0})!
// Get value
str_value := db.get[string]('key')!
int_value := db.get[int]('number')!
bin_value := db.get[[]u8]('binary')!
// Delete key
db.del('key')!
// Set expiration
db.expire('key', 60)! // 60 seconds
Hash Operations
// Set hash fields
db.hset('user:1', {
'name': 'Bob',
'age': 30,
})!
// Get single field
name := db.hget[string]('user:1', 'name')!
// Get all fields
user_data := db.hgetall[string]('user:1')!
println(user_data) // Output: {'name': 'Bob', 'age': '30'}
Pipeline Operations
// Start pipeline
db.pipeline_start()
// Queue commands
db.incr('counter')
db.set('name', 'Charlie')
db.get[string]('name')
// Execute and get responses
responses := db.pipeline_execute()!
for resp in responses {
println(resp)
}
Custom Commands
// Run raw commands
resp := db.cmd('SET', 'custom', 'value')!
result := db.cmd('GET', 'custom')!
// Complex commands
db.cmd('HSET', 'user:2', 'field1', 'value1', 'field2', '42')!
Error Handling
All functions return !
types and will return detailed errors for:
- Connection issues
- Protocol violations
- Type mismatches
- Redis error responses
- Timeout conditions
result := db.get[string]('nonexistent') or {
println('Key not found')
return
}
Connection Management
config := redis.Config{
host: 'redis.server'
port: 6379
version: 2 // RESP2 protocol
}
mut db := redis.connect(config)!
defer {
db.close() or { eprintln('Error closing connection: $err') }
}
Performance Tips
- Reuse Connections: Maintain connections instead of creating new ones
- Use Pipelines: Batch commands for high-throughput operations
- Prefer Integers: Use numeric types for counters and metrics
- Specify Types: Always specify return types for get operations