From e03bc675d37337767108993c9397b92ec6ad8f8a Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 12 Aug 2018 17:23:26 -0500 Subject: [PATCH] add 4-hr in-memory cache for key endpoints ref #332 --- .../Extensions/ConfigureServicesCollection.cs | 1 + .../V1/Controllers/BaseController.cs | 12 +++++++++++- .../V1/Controllers/ListsController.cs | 19 +++++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs b/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs index bbb244100..221ec482f 100644 --- a/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs +++ b/src/FilterLists.Api/DependencyInjection/Extensions/ConfigureServicesCollection.cs @@ -15,6 +15,7 @@ public static class ConfigureServicesCollection public static void AddFilterListsApi(this IServiceCollection services) { services.ConfigureCookiePolicy(); + services.AddMemoryCache(); services.AddMvcCustom(); services.AddRoutingCustom(); services.AddApiVersioning(); diff --git a/src/FilterLists.Api/V1/Controllers/BaseController.cs b/src/FilterLists.Api/V1/Controllers/BaseController.cs index ff2f3ad3e..802749eb7 100644 --- a/src/FilterLists.Api/V1/Controllers/BaseController.cs +++ b/src/FilterLists.Api/V1/Controllers/BaseController.cs @@ -1,5 +1,7 @@ -using FilterLists.Services.Seed; +using System; +using FilterLists.Services.Seed; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; namespace FilterLists.Api.V1.Controllers { @@ -8,6 +10,8 @@ namespace FilterLists.Api.V1.Controllers [Route("v{version:apiVersion}/[controller]")] public class BaseController : Controller { + protected readonly TimeSpan AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(4); + protected readonly IMemoryCache MemoryCache; protected readonly SeedService SeedService; public BaseController() @@ -15,5 +19,11 @@ public BaseController() } protected BaseController(SeedService seedService) => SeedService = seedService; + + protected BaseController(IMemoryCache memoryCache, SeedService seedService) + { + MemoryCache = memoryCache; + SeedService = seedService; + } } } \ No newline at end of file diff --git a/src/FilterLists.Api/V1/Controllers/ListsController.cs b/src/FilterLists.Api/V1/Controllers/ListsController.cs index 4d7c40841..85052babd 100644 --- a/src/FilterLists.Api/V1/Controllers/ListsController.cs +++ b/src/FilterLists.Api/V1/Controllers/ListsController.cs @@ -4,6 +4,7 @@ using FilterLists.Services.Seed; using FilterLists.Services.Seed.Models; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; namespace FilterLists.Api.V1.Controllers { @@ -11,16 +12,26 @@ public class ListsController : BaseController { private readonly FilterListService filterListService; - public ListsController(SeedService seedService, FilterListService filterListService) : base(seedService) => - this.filterListService = filterListService; + public ListsController(IMemoryCache memoryCache, SeedService seedService, FilterListService filterListService) : + base(memoryCache, seedService) => this.filterListService = filterListService; [HttpGet] - public async Task Index() => Json(await filterListService.GetAllSummariesAsync()); + public async Task Index() => + Json(await MemoryCache.GetOrCreate("ListsController_Index", entry => + { + entry.AbsoluteExpirationRelativeToNow = AbsoluteExpirationRelativeToNow; + return filterListService.GetAllSummariesAsync(); + })); [HttpGet] [Route("{id}")] //TODO: respond with appropriate exception if negative id queried - public async Task GetById(int id) => Json(await filterListService.GetDetailsAsync((uint) id)); + public async Task GetById(int id) => + Json(await MemoryCache.GetOrCreate("ListsController_GetById_" + id, entry => + { + entry.AbsoluteExpirationRelativeToNow = AbsoluteExpirationRelativeToNow; + return filterListService.GetDetailsAsync((uint)id); + })); [HttpGet("seed")] public async Task Seed() => Json(await SeedService.GetAllAsync());