All Projects → creamdog → Nancy.LightningCache

creamdog / Nancy.LightningCache

Licence: other
Asyncronous caching for Nancy

Programming Languages

C#
18002 projects
Boo
14 projects
shell
77523 projects

Nancy.LightningCache

Delivers dynamic content with the speed of static content using asyncronous caching. Nancy.LightningCache will allways deliver cached responses if they exist and update asynchronously if needed.

##Installation

Install via nuget https://nuget.org/packages/Nancy.LightningCache

PM> Install-Package Nancy.LightningCache

Or build from source and drop Nancy.LightningCache.dll into your solution

##Example usage the following example is using the default "System.Web.Cache" CacheStore ###1. Add to your bootstrapper

using Nancy.LightningCache.Extensions;
using Nancy.Routing;

namespace Asp.Net.Example
{
    public class ApplicationBootrapper : Nancy.DefaultNancyBootstrapper
    {
        protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
        {
            base.ApplicationStartup(container, pipelines);
            /*enable lightningcache, vary by url params id,query,take and skip*/
            this.EnableLightningCache(container.Resolve<IRouteResolver>(), ApplicationPipelines, new[] { "id", "query", "take", "skip" });
        }
    }
}

###2. Enable caching by adding "AsCacheable" to any of your routes

using System;
using Nancy;
using Nancy.LightningCache.Extensions;

namespace Asp.Net.Example
{
    public class ExampleModule : NancyModule
    {
        public ExampleModule()
        {
            Get["/"] = _ =>
            {
                /*cache view*/
                return View["hello.html"].AsCacheable(DateTime.Now.AddSeconds(30));
            };

            Get["/CachedResponse"] = _ =>
            {
                /*cache response*/
                return Response.AsText("hello").AsCacheable(DateTime.Now.AddSeconds(30));
            };
        }
    }
}

##Example usage of the DiskCacheStore If your application does not have access to "System.Web.Cache" as in running in self hosting mode you can use the DiskCacheStore to enable caching thought LightningCache.

using Nancy.LightningCache.CacheStore;
using Nancy.LightningCache.Extensions;
using Nancy.Routing;

namespace Asp.Net.Example
{
    public class ApplicationBootrapper : Nancy.DefaultNancyBootstrapper
    {
        protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
        {
            base.ApplicationStartup(container, pipelines);
            /*enable lightningcache using the DiskCacheStore, vary by url params id,query,take and skip*/
            this.EnableLightningCache(container.Resolve<IRouteResolver>(), ApplicationPipelines, new[] { "id", "query", "take", "skip" }, new DiskCacheStore("c:/tmp/cache"));
        }
    }
}

##Example definining your own cache key generation using ICacheKeyGenerator

using System;
using System.Text;
using Nancy;
using Nancy.LightningCache.Extensions;
using Nancy.Routing;

namespace WebApplication
{
    public class Bootstrapper : Nancy.DefaultNancyBootstrapper
    {
        protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
        {
            base.ApplicationStartup(container, pipelines);
            this.EnableLightningCache(container.Resolve<IRouteResolver>(), ApplicationPipelines, new UrlHashKeyGenerator());
        }

        public class UrlHashKeyGenerator : Nancy.LightningCache.CacheKey.ICacheKeyGenerator
        {
            public string Get(Request request)
            {
               using(var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider())
               {
                   var hash = md5.ComputeHash(Encoding.UTF8.GetBytes(request.Url.ToString()));
                   return Convert.ToBase64String(hash);
               }
            }
        }
    }
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].