Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Redis caching with ServiceStack OrmLite and SQL Server persistence

We have a Web app (ASP.NET/C#) with SQL Server backend. We use ServiceStack OrmLite as our POCO Micro ORM. We would now like to extend a part of our app to cache frequently-read data (mainly a collection of POCO objects as values, with numeric keys). But I'm not sure how to go about integrating a simple caching solution (in-memory or Redis based) that works seamlessly with OrmLite and MSSQL as the Master database.

I've read about the ServiceStack Redis Client, MemoryCacheClient and Multi nested database connections (OrmLiteConnectionFactory), but I couldn't find any examples, tutorial or code samples to learn more about implementing caching that works with OrmLite.

Any suggestions or links will be helpful and much appreciated.

like image 483
Nick Avatar asked May 22 '26 17:05

Nick


1 Answers

I use this extension to help simplify the integration between the db and the cache.

public static class ICacheClientExtensions
{
    public static T ToResultUsingCache<T>(this ICacheClient cache, string cacheKey, Func<T> fn, int hours = 1) where T : class
    {
        var cacheResult = cache.Get<T>(cacheKey);
        if (cacheResult != null)
        {
            return cacheResult;
        }
        var result = fn();
        if (result == null) return null;
        cache.Set(cacheKey, result, TimeSpan.FromHours(hours));
        return result;
    } 
}

public class MyService : Service
{
    public Data Get(GetData request)
    {
        var key = UrnId.Create<Data>(request.Id);

        Func<Data> fn = () => Db.GetData(request.Id);

        return Cache.ToResultUsingCache(key, fn);
    }

    [Route("/data/{id}")]
    public class GetData: IReturn<Data>
    {
        public int Id{ get; set; }
    }
}
like image 179
jeffgabhart Avatar answered May 25 '26 05:05

jeffgabhart



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!