Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 3 additions & 13 deletions src/Infrastructure/BotSharp.Core/BotSharpCoreExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,21 +51,11 @@ private static void AddCacheServices(IServiceCollection services, IConfiguration
var cacheSettings = new SharpCacheSettings();
config.Bind("SharpCache", cacheSettings);
services.AddSingleton(x => cacheSettings);
services.AddSingleton<MemoryCacheService>();

if (cacheSettings.CacheType == CacheType.RedisCache)
services.AddSingleton<ICacheService>(sp => cacheSettings.CacheType switch
{
services.AddSingleton<RedisCacheService>();
}

services.AddSingleton<RedisCacheService>();
services.AddSingleton<ICacheService>(sp =>
{
return cacheSettings.CacheType switch
{
CacheType.RedisCache => sp.GetRequiredService<RedisCacheService>(),
_ => sp.GetRequiredService<MemoryCacheService>(),
};
CacheType.RedisCache => ActivatorUtilities.CreateInstance<RedisCacheService>(sp),
_ => ActivatorUtilities.CreateInstance<MemoryCacheService>(sp),
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ namespace BotSharp.Core.Infrastructures;

public class RedisCacheService : ICacheService
{
private readonly IServiceProvider _services;
private readonly IConnectionMultiplexer _redis;

public RedisCacheService()
public RedisCacheService(IConnectionMultiplexer redis)
{
_redis = redis;
}

public async Task<T?> GetAsync<T>(string key)
{
var redis = _services.GetService<IConnectionMultiplexer>();
var db = redis.GetDatabase();
var db = _redis.GetDatabase();
var value = await db.StringGetAsync(key);

if (value.HasValue)
Expand All @@ -28,8 +28,7 @@ public RedisCacheService()

public async Task<object> GetAsync(string key, Type type)
{
var redis = _services.GetService<IConnectionMultiplexer>();
var db = redis.GetDatabase();
var db = _redis.GetDatabase();
var value = await db.StringGetAsync(key);

if (value.HasValue)
Expand All @@ -43,23 +42,20 @@ public async Task<object> GetAsync(string key, Type type)

public async Task SetAsync<T>(string key, T value, TimeSpan? expiry)
{
var redis = _services.GetService<IConnectionMultiplexer>();
var db = redis.GetDatabase();
var db = _redis.GetDatabase();
await db.StringSetAsync(key, JsonConvert.SerializeObject(value), expiry);
}

public async Task RemoveAsync(string key)
{
var redis = _services.GetService<IConnectionMultiplexer>();
var db = redis.GetDatabase();
var db = _redis.GetDatabase();
await db.KeyDeleteAsync(key);
}

public async Task ClearCacheAsync(string prefix)
{
var redis = _services.GetService<IConnectionMultiplexer>();
var db = redis.GetDatabase();
var server = redis.GetServer(redis.GetEndPoints().First());
var db = _redis.GetDatabase();
var server = _redis.GetServer(_redis.GetEndPoints().First());
const int pageSize = 1000;
var keys = server.Keys(pattern: $"{prefix}*", pageSize: pageSize).ToList();

Expand Down