1、项目引用类库
StackExchange.Redis 包
Newtonsoft.Json 包
2、C#帮助类代码
///
/// Redis帮助类
///
public class RedisHelper
{
private static readonly string ConnectionString = "127.0.0.1:6379,password=123456,connectTimeout=1000,connectRetry=1,syncTimeout=1000";
/// <summary>
/// 上锁,单例模式
/// </summary>
private static object locker = new object();
#region 链接对象、数据库对象 (私有字段和属性)
/// <summary>
/// 连接对象
/// </summary>
private volatile IConnectionMultiplexer _connection;
/// <summary>
/// 连接对象
/// </summary>
/// <returns></returns>
private IConnectionMultiplexer Connection
{
get
{
if (_connection != null && _connection.IsConnected)
return _connection;
lock (locker)
{
if (_connection != null)
{
if (_connection.IsConnected)
return _connection;
else _connection.Dispose();
}
_connection = ConnectionMultiplexer.Connect(ConnectionString);
}
return _connection;
}
}
/// <summary>
/// 数据库对象
/// </summary>
private volatile IDatabase _db;
/// <summary>
/// 数据库对象
/// </summary>
private IDatabase Db
{
get
{
if (_db != null)
return _db;
_db = Connection.GetDatabase();
return _db;
}
set
{
_db = value;
}
}
#endregion
#region 实例化帮助对象、设置数据库ID、数据库连接对象
/// <summary>
/// 私有构造函数
/// </summary>
private RedisHelper()
{
_connection = ConnectionMultiplexer.Connect(ConnectionString);
SetDatabase();
}
/// <summary>
/// 实例化对象
/// </summary>
private static RedisHelper redisHelper;
/// <summary>
/// 实例化
/// </summary>
public static RedisHelper Instance
{
get
{
if (redisHelper == null)
lock (locker)
{
if (redisHelper == null)
redisHelper = new RedisHelper();
}
return redisHelper;
}
}
/// <summary>
/// 获取数据库
/// </summary>
/// <param name="db">要获取的数据库ID</param>
/// <returns></returns>
public void SetDatabase(int? db = null)
{
Db = Connection.GetDatabase(db ?? -1);
}
#endregion
#region Redis 验证对象是否存在、删除对象、添加对象
/// <summary>
/// 判断键是否已存在
/// </summary>
/// <param name="key">关键字</param>
/// <returns></returns>
public bool IsExit(string key)
{
return Db.KeyExists(key);
}
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="key">关键字</param>
/// <returns>如果存在则删除,不存在时则直接返回false</returns>
public virtual bool Delete(string key)
{
if (IsExit(key))
return Db.KeyDelete(key);
return false;
}
/// <summary>
/// 获取字符串值
/// </summary>
/// <param name="key">关键字</param>
/// <returns></returns>
public virtual string GetString(string key)
{
return Db.StringGet(key);
}
/// <summary>
/// 设置字符串值
/// </summary>
/// <param name="key">关键字</param>
/// <param name="value">值</param>
/// <param name="cacheTime">有效期(分钟)</param>
public virtual bool SetString(string key, string value, int? cacheTime = null)
{
if (cacheTime != null)
return Db.StringSet(key, value, TimeSpan.FromMinutes(Convert.ToDouble(cacheTime)));
else
return Db.StringSet(key, value);
}
/// <summary>
/// 获取对象值
/// </summary>
/// <param name="key">关键字</param>
/// <returns></returns>
public virtual T Get<T>(string key)
{
string value = GetString(key);
if (string.IsNullOrEmpty(value))
return default(T);
else
return JsonConvert.DeserializeObject<T>(value);
}
/// <summary>
/// 设置对象缓存
/// </summary>
/// <param name="key">关键字</param>
/// <param name="value">值</param>
/// <param name="cacheTime">有效期(分钟)</param>
public virtual void Set<T>(string key, T value, int? cacheTime = null)
{
if (value == null) return;
string data = JsonConvert.SerializeObject(value);
if (cacheTime != null)
SetString(key, data, cacheTime);
else
SetString(key, data);
}
#endregion
#region Redis List列表操作
/// <summary>
/// 推入列表
/// </summary>
/// <param name="key">列表关键字</param>
/// <param name="value">值</param>
/// <param name="IsTop">是否插入头部</param>
/// <returns></returns>
public virtual long ListPush<T>(string key, T value, bool IsTop = false)
{
if (value == null)
return Db.ListLength(key);
string data = JsonConvert.SerializeObject(value);
if (IsTop)
return Db.ListLeftPush(key, data);
else
return Db.ListRightPush(key, data);
}
/// <summary>
/// 取出列表值
/// </summary>
/// <param name="key">列表关键字</param>
/// <param name="IsTop">是否从头部取</param>
/// <returns></returns>
public virtual T ListPop<T>(string key, bool IsTop = false)
{
string value = string.Empty;
if (IsTop)
value = Db.ListLeftPop(key);
else
value = Db.ListRightPop(key);
if (value == null)
return default(T);
return JsonConvert.DeserializeObject<T>(value);
}
/// <summary>
/// 获取列表长度
/// </summary>
/// <param name="key">列表关键字</param>
/// <returns></returns>
public virtual long GetListLength(string key)
{
return Db.ListLength(key);
}
#endregion
#region 清空Redis数据库
/// <summary>
/// 清空缓存数据库
/// </summary>
/// <returns></returns>
public virtual void FlushDatabase(int db=-1)
{
using (ConnectionMultiplexer connection = ConnectionMultiplexer.Connect($"{ConnectionString},allowAdmin=true"))
{
IServer server = connection.GetServer(ConnectionString.Split(',')[0]);
if (server != null)
server.FlushDatabase(db);
}
}
#endregion
}
3、调用测试代码
public class KS
{
public string XM { get; set; }
public string SFZH { get; set; }
public int CJ { get; set; }
}
RedisHelper.Instance.SetString("XM", "小明");
string v = RedisHelper.Instance.GetString("XM");
KS kS= new KS() { XM="小刚",SFZH="1238975645645643123",CJ=670 };
RedisHelper.Instance.Set<KS>(kS.SFZH, kS);
KS ks = RedisHelper.Instance.Get<KS>(kS.SFZH);
RedisHelper.Instance.FlushDatabase();