Merge pull request #840 from yileicn/RedisCacheOptimize
optimize RedisCache
This commit is contained in:
commit
7bb6e7ccb8
|
|
@ -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),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue