EasyCaching icon indicating copy to clipboard operation
EasyCaching copied to clipboard

EasyCaching in Multitenant application

Open umar-ulabs opened this issue 3 years ago • 3 comments

I been using EasyCaching by adding one global instance and passing tenant id as Key (to isolate data) to each caching method. If I add EasyCaching service per tenant scope. So each tenant will get full EasyCaching instance, will that be better or one global service is enough? Thanks for your insights.

umar-ulabs avatar Jan 14 '23 05:01 umar-ulabs

@umar-ulabs Thanks for your interest in this project.

Based on your description, one global service is enough.

But if you want to separate them, you can use IEasyCachingFactory to get providers with different configuration.

Here is an example,

services.AddEasyCaching(option =>
{
    option..WithMessagePack("mymsgpack");
    option.UseRedis(config =>
    {
        config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6379));
        config.SerializerName = "mymsgpack";
    }, "tenant-a");

    option.UseRedis(config =>
    {
        config.DBConfig.Endpoints.Add(new ServerEndPoint("127.0.0.1", 6380));
        config.SerializerName = "mymsgpack";
    }, "tenant-b");   
});

// get IEasyCachingProviderFactory
var factory = app.ApplicationServices.GetRequiredService<EasyCaching.Core.IEasyCachingProviderFactory>();
// get provider with different tenant
var provider = factory.GetCachingProvider("tenant-a");
// call methods
provider.xxxx

catcherwong avatar Jan 14 '23 08:01 catcherwong

So essentially I can add easycache per tenant? thanks. I hesitated doing that because if I have 500 tenants it will add/maintain 500 instances of easycache. As long as its ok. I would love to add it, rather than passing tenant id for each methods.

umar-ulabs avatar Jan 15 '23 03:01 umar-ulabs