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();
|
var cacheSettings = new SharpCacheSettings();
|
||||||
config.Bind("SharpCache", cacheSettings);
|
config.Bind("SharpCache", cacheSettings);
|
||||||
services.AddSingleton(x => cacheSettings);
|
services.AddSingleton(x => cacheSettings);
|
||||||
services.AddSingleton<MemoryCacheService>();
|
|
||||||
|
|
||||||
if (cacheSettings.CacheType == CacheType.RedisCache)
|
services.AddSingleton<ICacheService>(sp => cacheSettings.CacheType switch
|
||||||
{
|
{
|
||||||
services.AddSingleton<RedisCacheService>();
|
CacheType.RedisCache => ActivatorUtilities.CreateInstance<RedisCacheService>(sp),
|
||||||
}
|
_ => ActivatorUtilities.CreateInstance<MemoryCacheService>(sp),
|
||||||
|
|
||||||
services.AddSingleton<RedisCacheService>();
|
|
||||||
services.AddSingleton<ICacheService>(sp =>
|
|
||||||
{
|
|
||||||
return cacheSettings.CacheType switch
|
|
||||||
{
|
|
||||||
CacheType.RedisCache => sp.GetRequiredService<RedisCacheService>(),
|
|
||||||
_ => sp.GetRequiredService<MemoryCacheService>(),
|
|
||||||
};
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,16 +6,16 @@ namespace BotSharp.Core.Infrastructures;
|
||||||
|
|
||||||
public class RedisCacheService : ICacheService
|
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)
|
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);
|
var value = await db.StringGetAsync(key);
|
||||||
|
|
||||||
if (value.HasValue)
|
if (value.HasValue)
|
||||||
|
|
@ -28,8 +28,7 @@ public class RedisCacheService : ICacheService
|
||||||
|
|
||||||
public async Task<object> GetAsync(string key, Type type)
|
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);
|
var value = await db.StringGetAsync(key);
|
||||||
|
|
||||||
if (value.HasValue)
|
if (value.HasValue)
|
||||||
|
|
@ -43,23 +42,20 @@ public class RedisCacheService : ICacheService
|
||||||
|
|
||||||
public async Task SetAsync<T>(string key, T value, TimeSpan? expiry)
|
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);
|
await db.StringSetAsync(key, JsonConvert.SerializeObject(value), expiry);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RemoveAsync(string key)
|
public async Task RemoveAsync(string key)
|
||||||
{
|
{
|
||||||
var redis = _services.GetService<IConnectionMultiplexer>();
|
var db = _redis.GetDatabase();
|
||||||
var db = redis.GetDatabase();
|
|
||||||
await db.KeyDeleteAsync(key);
|
await db.KeyDeleteAsync(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ClearCacheAsync(string prefix)
|
public async Task ClearCacheAsync(string prefix)
|
||||||
{
|
{
|
||||||
var redis = _services.GetService<IConnectionMultiplexer>();
|
var db = _redis.GetDatabase();
|
||||||
var db = redis.GetDatabase();
|
var server = _redis.GetServer(_redis.GetEndPoints().First());
|
||||||
var server = redis.GetServer(redis.GetEndPoints().First());
|
|
||||||
const int pageSize = 1000;
|
const int pageSize = 1000;
|
||||||
var keys = server.Keys(pattern: $"{prefix}*", pageSize: pageSize).ToList();
|
var keys = server.Keys(pattern: $"{prefix}*", pageSize: pageSize).ToList();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue