diff --git a/AskFm/AskFm.API/AskFm.API.csproj b/AskFm/AskFm.API/AskFm.API.csproj
index 77d8e4c..59c3c20 100644
--- a/AskFm/AskFm.API/AskFm.API.csproj
+++ b/AskFm/AskFm.API/AskFm.API.csproj
@@ -18,7 +18,9 @@
+
+
diff --git a/AskFm/AskFm.API/Program.cs b/AskFm/AskFm.API/Program.cs
index c06620b..efe32e8 100644
--- a/AskFm/AskFm.API/Program.cs
+++ b/AskFm/AskFm.API/Program.cs
@@ -150,6 +150,16 @@ public static void Main(string[] args)
})
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
+
+
+ builder.Services.AddStackExchangeRedisCache(options =>
+ {
+ options.Configuration = builder.Configuration.GetConnectionString("Redis");
+ options.InstanceName = "AskFmCache";
+ });
+
+ builder.Services.AddSingleton();
+
var app = builder.Build();
diff --git a/AskFm/AskFm.API/appsettings.json b/AskFm/AskFm.API/appsettings.json
index 779f8b0..0ea25cc 100644
--- a/AskFm/AskFm.API/appsettings.json
+++ b/AskFm/AskFm.API/appsettings.json
@@ -1,6 +1,7 @@
{
"ConnectionStrings": {
- "DefaultConnection": "CONNECTIONSTRING"
+ "DefaultConnection": "CONNECTIONSTRING",
+ "Redis": "localhost:6379"
},
"Logging": {
"LogLevel": {
diff --git a/AskFm/AskFm.BLL/Services/IRedisService.cs b/AskFm/AskFm.BLL/Services/IRedisService.cs
new file mode 100644
index 0000000..ae55879
--- /dev/null
+++ b/AskFm/AskFm.BLL/Services/IRedisService.cs
@@ -0,0 +1,14 @@
+using Microsoft.Extensions.Caching.Distributed;
+using System.Text.Json;
+
+namespace AskFm.BLL.Services;
+
+public interface IRedisService
+{
+ public Task SetCacheAsync(string key, T value, TimeSpan expirationTime);
+
+ public Task GetCacheAsync(string key);
+
+ public Task RemoveCacheAsync(string key);
+}
+
diff --git a/AskFm/AskFm.BLL/Services/RedisCacheService.cs b/AskFm/AskFm.BLL/Services/RedisCacheService.cs
new file mode 100644
index 0000000..0c95a83
--- /dev/null
+++ b/AskFm/AskFm.BLL/Services/RedisCacheService.cs
@@ -0,0 +1,37 @@
+using Microsoft.Extensions.Caching.Distributed;
+using System.Text.Json;
+
+namespace AskFm.BLL.Services;
+
+public class RedisCacheService : IRedisService
+{
+ private readonly IDistributedCache _cache;
+
+ public RedisCacheService(IDistributedCache cache)
+ {
+ _cache = cache;
+ }
+
+ public async Task SetCacheAsync(string key, T value, TimeSpan expirationTime)
+ {
+ var options = new DistributedCacheEntryOptions
+ {
+ AbsoluteExpirationRelativeToNow = expirationTime
+ };
+
+ var jsonData = JsonSerializer.Serialize(value);
+ await _cache.SetStringAsync(key, jsonData, options);
+ }
+
+ public async Task GetCacheAsync(string key)
+ {
+ var jsonData = await _cache.GetStringAsync(key);
+ return jsonData is null ? default : JsonSerializer.Deserialize(jsonData);
+ }
+
+ public async Task RemoveCacheAsync(string key)
+ {
+ await _cache.RemoveAsync(key);
+ }
+}
+