You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.2 KiB
C#

using Microsoft.Extensions.Options;
using ServiceStack.Redis;
using Txgy.RBS.Framework.RedisHelper.Init;
namespace Txgy.RBS.Framework.RedisHelper.Interface
{
/// <summary>
/// RedisBase类是redis操作的基类继承自IDisposable接口主要用于释放内存
/// </summary>
public abstract class RedisBase : IDisposable
{
public IRedisClient IClient { get; private set; }
/// <summary>
/// 构造时完成链接的打开
/// </summary>
public RedisBase(IOptionsMonitor<RedisConfigInfo> options)
{
IClient = RedisManager.GetClient(options.CurrentValue);
}
//public static IRedisClient iClient { get; private set; }
//static RedisBase()
//{
// iClient = RedisManager.GetClient();
//}
private bool _disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
IClient.Dispose();
IClient = null;
}
}
_disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public void Transcation()
{
using IRedisTransaction irt = IClient.CreateTransaction();
try
{
irt.QueueCommand(r => r.Set("key", 20));
irt.QueueCommand(r => r.Increment("key", 1));
irt.Commit(); // 提交事务
}
catch (Exception)
{
irt.Rollback();
throw;
}
}
/// <summary>
/// 清除全部数据 请小心
/// </summary>
public virtual void FlushAll()
{
IClient.FlushAll();
}
/// <summary>
/// 保存数据DB文件到硬盘
/// </summary>
public void Save()
{
IClient.Save();//阻塞式save
}
/// <summary>
/// 异步保存数据DB文件到硬盘
/// </summary>
public void SaveAsync()
{
IClient.SaveAsync();//异步save
}
}
}