Files
AnimeAnnouncer/AnimeAnnouncer/Cache/TMDBCache.cs

68 lines
1.9 KiB
C#

using System.Security.Cryptography;
using System.Text.Json;
using StackExchange.Redis;
using TMDbLib.Utilities.Converters;
namespace AnimeAnnouncer.Cache;
public class TMDBCache
{
private readonly ConnectionMultiplexer redis;
public TimeSpan CacheExpiration { get; set; }
public TMDBCache(String redisConnectionString)
{
CacheExpiration = TimeSpan.FromDays(3);
redis = ConnectionMultiplexer.Connect(redisConnectionString);
}
public async Task SetCacheItem(String key, TMDBCacheItem item)
{
var db = redis.GetDatabase();
String jsonItem = JsonSerializer.Serialize(item);
await db.StringSetAsync(key, jsonItem, CacheExpiration);
}
public async Task<TMDBCacheItem> GetCacheItem(String key)
{
var db = redis.GetDatabase();
String jsonItem = await db.StringGetAsync(key);
if(!String.IsNullOrEmpty(jsonItem))
return JsonSerializer.Deserialize<TMDBCacheItem>(jsonItem);
else
return null;
}
public async Task SetAiringSoon(List<AiringSoonItem> list)
{
var db = redis.GetDatabase();
String jsonItem = JsonSerializer.Serialize(list);
await db.StringSetAsync("AiringSoon", jsonItem, TimeSpan.FromDays(60));
}
public async Task<List<AiringSoonItem>> GetAiringList()
{
var db = redis.GetDatabase();
String jsonItem = await db.StringGetAsync("AiringSoon");
if(!String.IsNullOrEmpty(jsonItem))
return JsonSerializer.Deserialize<List<AiringSoonItem>>(jsonItem);
else
return null;
}
public async Task<bool> KeyExists(String key)
{
var db = redis.GetDatabase();
return await db.KeyExistsAsync(key);
}
public async Task SetPair(String key, String value)
{
var db = redis.GetDatabase();
await db.StringSetAsync(key, value);
}
}