#!/bin/bash # Simple HeroDB Demo - Basic Redis Commands # This script demonstrates basic Redis functionality that's currently implemented set -e # Exit on any error # Configuration REDIS_HOST="localhost" REDIS_PORT="6381" REDIS_CLI="redis-cli -h $REDIS_HOST -p $REDIS_PORT" # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Function to print colored output print_header() { echo -e "${BLUE}=== $1 ===${NC}" } print_success() { echo -e "${GREEN}✓ $1${NC}" } print_info() { echo -e "${YELLOW}ℹ $1${NC}" } print_error() { echo -e "${RED}✗ $1${NC}" } # Function to check if HeroDB is running check_herodb() { print_info "Checking if HeroDB is running on port $REDIS_PORT..." if ! $REDIS_CLI ping > /dev/null 2>&1; then print_error "HeroDB is not running on port $REDIS_PORT" print_info "Please start HeroDB with: cargo run -- --port $REDIS_PORT" exit 1 fi print_success "HeroDB is running and responding" } # Function to execute Redis command with error handling execute_cmd() { local cmd="$1" local description="$2" echo -e "${YELLOW}Command:${NC} $cmd" if result=$($REDIS_CLI $cmd 2>&1); then echo -e "${GREEN}Result:${NC} $result" return 0 else print_error "Failed: $description" echo "Error: $result" return 1 fi } # Main demo function main() { clear print_header "HeroDB Basic Functionality Demo" echo "This demo shows basic Redis commands that are currently implemented" echo "HeroDB runs on port $REDIS_PORT (instead of Redis default 6379)" echo # Check if HeroDB is running check_herodb echo print_header "Step 1: Basic Key-Value Operations" execute_cmd "SET greeting 'Hello HeroDB!'" "Setting a simple key-value pair" echo execute_cmd "GET greeting" "Getting the value" echo execute_cmd "SET counter 42" "Setting a numeric value" echo execute_cmd "INCR counter" "Incrementing the counter" echo execute_cmd "GET counter" "Getting the incremented value" echo print_header "Step 2: Hash Operations" execute_cmd "HSET user:1 name 'John Doe' email 'john@example.com' age 30" "Setting hash fields" echo execute_cmd "HGET user:1 name" "Getting a specific field" echo execute_cmd "HGETALL user:1" "Getting all fields" echo execute_cmd "HLEN user:1" "Getting hash length" echo print_header "Step 3: List Operations" execute_cmd "LPUSH tasks 'Write code' 'Test code' 'Deploy code'" "Adding items to list" echo execute_cmd "LLEN tasks" "Getting list length" echo execute_cmd "LRANGE tasks 0 -1" "Getting all list items" echo execute_cmd "LPOP tasks" "Popping from left" echo execute_cmd "LRANGE tasks 0 -1" "Checking remaining items" echo print_header "Step 4: Key Management" execute_cmd "KEYS *" "Listing all keys" echo execute_cmd "EXISTS greeting" "Checking if key exists" echo execute_cmd "TYPE user:1" "Getting key type" echo execute_cmd "DBSIZE" "Getting database size" echo print_header "Step 5: Expiration" execute_cmd "SET temp_key 'temporary value'" "Setting temporary key" echo execute_cmd "EXPIRE temp_key 5" "Setting 5 second expiration" echo execute_cmd "TTL temp_key" "Checking time to live" echo print_info "Waiting 2 seconds..." sleep 2 execute_cmd "TTL temp_key" "Checking TTL again" echo print_header "Step 6: Multiple Operations" execute_cmd "MSET key1 'value1' key2 'value2' key3 'value3'" "Setting multiple keys" echo execute_cmd "MGET key1 key2 key3" "Getting multiple values" echo execute_cmd "DEL key1 key2" "Deleting multiple keys" echo execute_cmd "EXISTS key1 key2 key3" "Checking existence of multiple keys" echo print_header "Step 7: Search Commands (Placeholder)" print_info "Testing FT.CREATE command (currently returns placeholder response)" execute_cmd "FT.CREATE test_index SCHEMA title TEXT description TEXT" "Creating search index" echo print_header "Step 8: Server Information" execute_cmd "INFO" "Getting server information" echo execute_cmd "CONFIG GET dir" "Getting configuration" echo print_header "Step 9: Cleanup" execute_cmd "FLUSHDB" "Clearing database" echo execute_cmd "DBSIZE" "Confirming database is empty" echo print_header "Demo Summary" echo "This demonstration showed:" echo "• Basic key-value operations (GET, SET, INCR)" echo "• Hash operations (HSET, HGET, HGETALL)" echo "• List operations (LPUSH, LPOP, LRANGE)" echo "• Key management (KEYS, EXISTS, TYPE, DEL)" echo "• Expiration handling (EXPIRE, TTL)" echo "• Multiple key operations (MSET, MGET)" echo "• Server information commands" echo print_success "HeroDB basic functionality demo completed successfully!" echo print_info "Note: Full-text search (FT.*) commands are defined but not yet fully implemented" print_info "To run HeroDB server: cargo run -- --port 6381" print_info "To connect with redis-cli: redis-cli -h localhost -p 6381" } # Run the demo main "$@"