feat: Add PostgreSQL and Redis client support
- Add PostgreSQL client functionality for database interactions. - Add Redis client functionality for cache and data store operations. - Extend Rhai scripting with PostgreSQL and Redis client modules. - Add documentation and test cases for both clients.
This commit is contained in:
@@ -6,10 +6,13 @@ A robust Redis client wrapper for Rust applications that provides connection man
|
||||
|
||||
- **Singleton Pattern**: Maintains a global Redis client instance, so we don't re-int all the time.
|
||||
- **Connection Management**: Automatically handles connection creation and reconnection
|
||||
- **Flexible Connectivity**:
|
||||
- **Flexible Connectivity**:
|
||||
- Tries Unix socket connection first (`$HOME/hero/var/myredis.sock`)
|
||||
- Falls back to TCP connection (localhost) if socket connection fails
|
||||
- **Database Selection**: Uses the `REDISDB` environment variable to select the Redis database (defaults to 0)
|
||||
- **Authentication Support**: Supports username/password authentication
|
||||
- **Builder Pattern**: Flexible configuration with a builder pattern
|
||||
- **TLS Support**: Optional TLS encryption for secure connections
|
||||
- **Error Handling**: Comprehensive error handling with detailed error messages
|
||||
- **Thread Safety**: Safe to use in multi-threaded applications
|
||||
|
||||
@@ -52,9 +55,51 @@ let result: redis::RedisResult<()> = client.execute(&mut cmd);
|
||||
reset()?;
|
||||
```
|
||||
|
||||
### Builder Pattern
|
||||
|
||||
The module provides a builder pattern for flexible configuration:
|
||||
|
||||
```rust
|
||||
use crate::redisclient::{RedisConfigBuilder, with_config};
|
||||
|
||||
// Create a configuration builder
|
||||
let config = RedisConfigBuilder::new()
|
||||
.host("redis.example.com")
|
||||
.port(6379)
|
||||
.db(1)
|
||||
.username("user")
|
||||
.password("secret")
|
||||
.use_tls(true)
|
||||
.connection_timeout(30);
|
||||
|
||||
// Connect with the configuration
|
||||
let client = with_config(config)?;
|
||||
```
|
||||
|
||||
### Unix Socket Connection
|
||||
|
||||
You can explicitly configure a Unix socket connection:
|
||||
|
||||
```rust
|
||||
use crate::redisclient::{RedisConfigBuilder, with_config};
|
||||
|
||||
// Create a configuration builder for Unix socket
|
||||
let config = RedisConfigBuilder::new()
|
||||
.use_unix_socket(true)
|
||||
.socket_path("/path/to/redis.sock")
|
||||
.db(1);
|
||||
|
||||
// Connect with the configuration
|
||||
let client = with_config(config)?;
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
- `REDISDB`: Specifies the Redis database number to use (default: 0)
|
||||
- `REDIS_HOST`: Specifies the Redis host (default: 127.0.0.1)
|
||||
- `REDIS_PORT`: Specifies the Redis port (default: 6379)
|
||||
- `REDIS_USERNAME`: Specifies the Redis username for authentication
|
||||
- `REDIS_PASSWORD`: Specifies the Redis password for authentication
|
||||
- `HOME`: Used to determine the path to the Redis Unix socket
|
||||
|
||||
## Connection Strategy
|
||||
@@ -77,6 +122,25 @@ The module includes both unit tests and integration tests:
|
||||
- Integration tests that require a real Redis server
|
||||
- Tests automatically skip if Redis is not available
|
||||
|
||||
### Unit Tests
|
||||
|
||||
- Tests for the builder pattern and configuration
|
||||
- Tests for connection URL building
|
||||
- Tests for environment variable handling
|
||||
|
||||
### Integration Tests
|
||||
|
||||
- Tests for basic Redis operations (SET, GET, EXPIRE)
|
||||
- Tests for hash operations (HSET, HGET, HGETALL, HDEL)
|
||||
- Tests for list operations (RPUSH, LLEN, LRANGE, LPOP)
|
||||
- Tests for error handling (invalid commands, wrong data types)
|
||||
|
||||
Run the tests with:
|
||||
|
||||
```bash
|
||||
cargo test --lib redisclient::tests
|
||||
```
|
||||
|
||||
## Thread Safety
|
||||
|
||||
The Redis client is wrapped in an `Arc<Mutex<>>` to ensure thread safety when accessing the global instance.
|
||||
Reference in New Issue
Block a user