πŸ”—Redis & Cross-Server Synchronization

Complete guide to setting up Redis for multi-server networks (BungeeCord/Velocity).

Overview

Redis enables BlackMarket to synchronize across multiple servers in a network:

  • βœ… Shared global market across all servers

  • βœ… Real-time stock updates

  • βœ… Synchronized purchase tracking

  • βœ… Instant market resets network-wide

  • βœ… Compatible with BungeeCord and Velocity

Without Redis: Each server has independent markets With Redis: All servers share the same market state


Prerequisites

Required

  1. Redis Server (6.0+)

  2. Multiple Minecraft servers on same network

  3. MySQL database (recommended for cross-server)

  4. Network proxy (BungeeCord or Velocity)

Installation

Ubuntu/Debian:

CentOS/RHEL:

Docker:

Windows: Download from Redis Windowsarrow-up-right


Basic Configuration

Step 1: Configure Redis Server

Edit Redis configuration:

Key settings:

Restart Redis:

Step 2: Configure Each Minecraft Server

On each server in your network:

Step 3: Set Unique Server IDs

CRITICAL: Each server must have a unique server-id:

For cross-server, use MySQL instead of SQLite:

All servers should connect to the same MySQL database.

Step 5: Restart All Servers

After configuration, restart all servers to connect to Redis.


Verifying Redis Connection

Check Server Logs

Look for these messages on startup:

Test In-Game

  1. Buy an item on Server 1

  2. Check stock on Server 2

  3. Stock should be updated instantly

Test Commands


How It Works

Market Synchronization

When market resets on any server:

Purchase Synchronization

When a player buys an item:

Data Flow


Advanced Configuration

Remote Redis Server

If Redis is on a different machine:

Firewall: Ensure port 6379 is open:

SSL/TLS Connection

For secure Redis connections:

Redis SSL setup (requires stunnel or Redis 6+ with TLS):

Multiple Redis Databases

Separate different server groups:

Connection Pool Tuning

For high-traffic servers:


Redis Data Structure

Cached Data

BlackMarket stores these in Redis:

Key
Type
Purpose
TTL

blackmarket:global_items

List

Current market items

1 hour

blackmarket:last_reset

String

Last reset timestamp

24 hours

blackmarket:stock:<item>

String

Item stock count

1 hour

Pub/Sub Channels

Channel
Purpose

blackmarket:market_update

Market items changed

blackmarket:purchase

Item purchased

blackmarket:reset

Market reset

blackmarket:sync_request

Server requests sync

blackmarket:sync_response

Server provides sync data


Monitoring Redis

Check Connected Servers

View Cached Data

Performance Monitoring


Troubleshooting

Issue 1: Redis Connection Failed

Error: Failed to initialize Redis

Solutions:

  1. Check Redis is running:

  1. Test connection:

  1. Check firewall:

  1. Verify password:

Issue 2: Data Not Syncing

Problem: Changes on one server don't appear on others

Solutions:

  1. Check server IDs are unique:

  1. Verify all servers connected:

  1. Check Redis channels:

  1. Enable debug mode:

Issue 3: High Latency

Problem: Slow synchronization between servers

Solutions:

  1. Check network latency:

  1. Increase timeout:

  1. Use local Redis (on each server):

  1. Optimize Redis:

Issue 4: Duplicate Server IDs

Error: Servers showing same data incorrectly

Solution: Ensure unique IDs on each server:


Best Practices

1. Use MySQL with Redis

βœ… Do:

❌ Don't:

2. Secure Your Redis

βœ… Do:

❌ Don't:

3. Monitor Redis Memory

Check usage:

4. Enable Persistence


Network Topologies

Topology 1: Single Redis (Simple)

Pros: Simple setup Cons: Single point of failure

Topology 2: Redis per Server (Advanced)

Pros: Better performance, no single point of failure Cons: Complex setup (requires Redis Cluster)

Topology 3: Central + Cache

Pros: Fast local reads, synchronized writes Cons: Most complex setup


Performance Tips

1. Use Connection Pooling

Already enabled by default in BlackMarket via HikariCP.

2. Minimize Network Hops

Place Redis close to Minecraft servers:

  • Same datacenter

  • Low latency network

  • Consider local Redis per server

3. Use Pipeline for Bulk Operations

BlackMarket automatically batches operations for efficiency.

4. Monitor and Optimize


Migration Guide

Moving from Standalone to Cross-Server

Step 1: Set up Redis on all servers

Step 2: Migrate to MySQL (if using SQLite):

Step 3: Enable Redis on each server:

Step 4: Sync data across servers:

  • First server to start will be the "master"

  • Other servers will sync from Redis cache

Step 5: Test synchronization:


Next Steps

Last updated