summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI.Web/Controllers
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-09-22 20:46:38 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-09-22 20:46:38 -0400
commitba5cc149e265d3f14246db23b09c8feb5f9c0d3a (patch)
tree41f30948def325b50591d58779c531e6b33a6533 /src/StardewModdingAPI.Web/Controllers
parente4a2f555170b08263ae2d7e713808bd229b48947 (diff)
downloadSMAPI-ba5cc149e265d3f14246db23b09c8feb5f9c0d3a.tar.gz
SMAPI-ba5cc149e265d3f14246db23b09c8feb5f9c0d3a.tar.bz2
SMAPI-ba5cc149e265d3f14246db23b09c8feb5f9c0d3a.zip
add in-memory cache for remote queries (#336)
Diffstat (limited to 'src/StardewModdingAPI.Web/Controllers')
-rw-r--r--src/StardewModdingAPI.Web/Controllers/ModsController.cs17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/StardewModdingAPI.Web/Controllers/ModsController.cs b/src/StardewModdingAPI.Web/Controllers/ModsController.cs
index 366201e3..bd5ecef9 100644
--- a/src/StardewModdingAPI.Web/Controllers/ModsController.cs
+++ b/src/StardewModdingAPI.Web/Controllers/ModsController.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
using StardewModdingAPI.Web.Framework.ModRepositories;
using StardewModdingAPI.Web.Models;
@@ -24,10 +25,20 @@ namespace StardewModdingAPI.Web.Controllers
}
.ToDictionary(p => p.VendorKey, StringComparer.CurrentCultureIgnoreCase);
+ /// <summary>The cache in which to store mod metadata.</summary>
+ private readonly IMemoryCache Cache;
+
/*********
** Public methods
*********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="cache">The cache in which to store mod metadata.</param>
+ public ModsController(IMemoryCache cache)
+ {
+ this.Cache = cache;
+ }
+
/// <summary>Fetch version metadata for the given mods.</summary>
/// <param name="modKeys">The namespaced mod keys to search as a comma-delimited array.</param>
[HttpGet]
@@ -69,7 +80,11 @@ namespace StardewModdingAPI.Web.Controllers
}
// fetch mod info
- result[modKey] = await repository.GetModInfoAsync(modID);
+ result[modKey] = await this.Cache.GetOrCreateAsync($"{repository.VendorKey}:{modID}".ToLower(), async entry =>
+ {
+ entry.AbsoluteExpiration = DateTimeOffset.UtcNow.AddHours(1);
+ return await repository.GetModInfoAsync(modID);
+ });
}
return result;