Merge pull request #840 from yileicn/RedisCacheOptimize

optimize RedisCache
This commit is contained in:
Haiping 2025-01-22 20:44:18 -06:00 committed by GitHub
commit 7bb6e7ccb8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 26 deletions

View file

@ -51,21 +51,11 @@ public static class BotSharpCoreExtensions
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),
});
}

View file

@ -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)
@ -28,8 +28,7 @@ public class RedisCacheService : ICacheService
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)
@ -43,23 +42,20 @@ public class RedisCacheService : ICacheService
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();