开发者

Replicate Memcached to multiple servers

I have the following code:

pr开发者_运维问答ivate bool CheckForDuplicatesInCache(Message theMessage)
{
    var cacheClient = MemcachedClient.GetInstance("IntegrationCache");
    var messageHash = theMessage.GetHashCode();
    if (cacheClient.Get(messageHash.ToString()).IsNotNull())
    {
        IntegrationContext.WriteLog("Warning: This message is a duplicate. Will Not Process.");
        return false;
    }           

    cacheClient.Set(messageHash.ToString(), "nothing", new TimeSpan(2, 0, 0));

    return true;
}

The problem is, when I scale this to multiple servers...I need to have multiple memcached intances that share data for redundancy. Does anyone have any insight?


There are 2 ways you could theoretically do it:

There is a product called repcached, however it only runs on linux right now. It has the ability to replicate the cache to a different server.

The other option is in code: you could write the value to BOTH caches and check for it in both chaches. If you add more than 2 servers, you could do it in a for loop.

        private bool CheckForDuplicatesInCache(Message theMessage)
    {
        var cacheClient = MemcachedClient.GetInstance("IntegrationCache");
        var cacheClient2 = MemcachedClient.GetInstance("IntegrationCache2");
        var messageHash = theMessage.GetHashCode();
        if (cacheClient.Get(messageHash.ToString()).IsNotNull())
        {
            IntegrationContext.WriteLog("Warning: This message is a duplicate. Will Not Process.");
            return false;
        }

        if (cacheClient2.Get(messageHash.ToString()).IsNotNull())
        {
            IntegrationContext.WriteLog("Warning: This message is a duplicate. Will Not Process.");
            return false;
        }

        cacheClient.Set(messageHash.ToString(), "nothing", new TimeSpan(2, 0, 0));
        cacheClient2.Set(messageHash.ToString(), "nothing", new TimeSpan(2, 0, 0));
        return true;
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜