C# Redis 缓存应用 主要代码及版本选择

///


/// RedisManager类主要是创建链接池管理对象的
///

public class RedisManager
{
///
/// redis配置文件信息
///

private static string RedisPath = System.Configuration.ConfigurationSettings.AppSettings["RedisPath"];
private static PooledRedisClientManager _prcm;

///


/// 静态构造方法,初始化链接池管理对象
///

static RedisManager()
{
CreateManager();
}

///


/// 创建链接池管理对象
///

private static void CreateManager()
{
_prcm = CreateManager(new string[] { RedisPath }, new string[] { RedisPath });
}


private static PooledRedisClientManager CreateManager(string[] readWriteHosts, string[] readOnlyHosts)
{
//WriteServerList:可写的Redis链接地址。
//ReadServerList:可读的Redis链接地址。
//MaxWritePoolSize:最大写链接数。
//MaxReadPoolSize:最大读链接数。
//AutoStart:自动重启。
//LocalCacheTime:本地缓存到期时间,单位:秒。
//RecordeLog:是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项。
//RedisConfigInfo类是记录redis连接信息,此信息和配置文件中的RedisConfig相呼应

// 支持读写分离,均衡负载
return new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
{
MaxWritePoolSize = 5, // “写”链接池链接数
MaxReadPoolSize = 5, // “读”链接池链接数
AutoStart = true,

});


// ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("Redis1_IP地址:端口,password=密码");
}

private static IEnumerable SplitString(string strSource, string split)
{
return strSource.Split(split.ToArray());
}

///


/// 客户端缓存操作对象
///

public static IRedisClient GetClient()
{
if (_prcm == null)
{
CreateManager();
}
return _prcm.GetClient();
}

}

 

 

///


/// RedisOperatorBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存
///

public abstract class RedisOperatorBase : IDisposable
{
protected IRedisClient Redis { get; private set; }
private bool _disposed = false;
protected RedisOperatorBase()
{
Redis = RedisManager.GetClient();
}
protected virtual void Dispose(bool disposing)
{
if (!this._disposed)
{
if (disposing)
{
Redis.Dispose();
Redis = null;
}
}
this._disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// 保存数据DB文件到硬盘
///

public void Save()
{
Redis.Save();
}
///
/// 异步保存数据DB文件到硬盘
///

public void SaveAsync()
{
Redis.SaveAsync();
}

}

 

 

///


/// HashOperator类,是操作哈希表类。继承自RedisOperatorBase类
///

public class HashOperator : RedisOperatorBase
{
public HashOperator() : base() { }
///
/// 判断某个数据是否已经被缓存
///

public bool Exist(string hashId, string key)
{
return Redis.HashContainsEntry(hashId, key);
}
///
/// 存储数据到hash表
///

public bool Set(string hashId, string key, T t)
{
var value = JsonSerializer.SerializeToString(t);
return Redis.SetEntryInHash(hashId, key, value);
}
///
/// 移除hash中的某值
///

public bool Remove(string hashId, string key)
{
return Redis.RemoveEntryFromHash(hashId, key);
}
///
/// 移除整个hash
///

public bool Remove(string key)
{
return Redis.Remove(key);
}
///
/// 从hash表获取数据
///

public T Get(string hashId, string key)
{
string value = Redis.GetValueFromHash(hashId, key);
return JsonSerializer.DeserializeFromString(value);
}
///
/// 获取整个hash的数据
///

public List GetAll(string hashId)
{
var result = new List();
var list = Redis.GetHashValues(hashId);
if (list != null && list.Count > 0)
{
list.ForEach(x =>
{
var value = JsonSerializer.DeserializeFromString(x);
result.Add(value);
});
}
return result;
}
///
/// 设置缓存过期
///

public void SetExpire(string key, DateTime datetime)
{
Redis.ExpireEntryAt(key, datetime);
}
}

 

调用实例 

 

using (HashOperator ht = new HashOperator())
{
ht.Set(i.ToString(), "a"+i.ToString(), "value"+i.ToString());
//string str = ht.Get(i.ToString(), "a" + i.ToString());
//Console.WriteLine(str);
//MessageBox.Show(str);
}

 

配置服务访问连接字符串

   

  其中 123456 为密码 

        127.0.0.1:6379 为服务地址及端口

 

使用  ServiceStack.Redis V3.9.71 版本 可以避免高版本 每小时6000次的访问并发限制

C# Redis 缓存应用 主要代码及版本选择_第1张图片

 

转载于:https://www.cnblogs.com/lhxsoft/p/11495687.html

你可能感兴趣的:(C# Redis 缓存应用 主要代码及版本选择)