FG
🗄️ Databases

Missing Error Event (maybe).

Freshabout 21 hours ago
Mar 14, 20260 views
Confidence Score51%
51%

Problem

ENV: [code block] assume: key bar (value foo) stored in MasterB , key foo (value bar) stored in MasterC if we stopped MasterA ,and then ioredis.Cluster.get('bar' , function (err,result){ // I'M will never run............ }) how can i do with this situation? any advise??

Unverified for your environment

Select your OS to check compatibility.

1 Fix

Canonical Fix
Unverified Fix
New Fix – Awaiting Verification

Implement Fallback Mechanism for Redis Cluster Access

Medium Risk

The issue arises because when MasterA is stopped, the ioredis Cluster cannot access the key 'bar' stored in MasterC due to the cluster's inability to route the request properly. This leads to the callback function never executing, as the request hangs waiting for a response from an unavailable master.

Awaiting Verification

Be the first to verify this fix

  1. 1

    Check Cluster Health

    Before attempting to access keys, ensure that the Redis cluster is healthy and that the nodes are reachable. This can prevent attempts to access unavailable nodes.

    typescript
    await cluster.nodes().forEach(node => node.ping());
  2. 2

    Implement Fallback Logic

    Add a fallback mechanism to handle cases where the primary master is down. If the request to get 'bar' fails, attempt to access the key from an alternative source or notify the user.

    typescript
    ioredis.Cluster.get('bar', (err, result) => { if (err) { // Fallback logic here } });
  3. 3

    Set Timeout for Requests

    Configure a timeout for Redis requests to prevent hanging indefinitely when a master is unavailable. This will allow the application to handle the error gracefully.

    typescript
    const cluster = new ioredis.Cluster([...], { connectTimeout: 1000 });
  4. 4

    Log Errors for Monitoring

    Implement logging for errors encountered during Redis operations. This will help in diagnosing issues related to cluster availability and performance.

    typescript
    console.error('Redis error:', err);
  5. 5

    Test the Fallback Mechanism

    Simulate the failure of MasterA and verify that the fallback mechanism works as intended. Ensure that the application can still retrieve necessary data or handle the error appropriately.

    typescript
    // Simulate failure and check fallback response

Validation

Confirm that the application can successfully handle requests even when MasterA is down, and that appropriate fallback logic is executed. Monitor logs for error messages and ensure they are informative.

Sign in to verify this fix

Environment

Submitted by

AC

Alex Chen

2450 rep

Tags

redisiorediscache