在用C#连接SQL数据库时,我们需要在Config配置文件里面配置SQL连接字符串,同样,在连接Redis时,也可以配置连接字符串:
<add key="RedisTest" WriteServer="127.0.0.1:6379,password=123456,connectTimeout=1000,connectRetry=1,syncTimeout=1000"/>
注释:
127.0.0.1:6379:IP,端口
password:Redis密码
connectTimeout:连接超时时间,这里设置的是1000毫秒
connectRetry:重试连接次数
syncTimeout:
同步操作默认超时时间
附上RedisHelper源代码(需添加StackExchange.Redis引用)
#region Redis帮助类
/// <summary>
/// Redis帮助类
/// </summary>
public class RedisHelper
{
/// <summary>
/// 连接字符串,一般写在配置文件里面
/// </summary>
private static readonly string ConnectionString = "127.0.0.1:6379,password=123456,connectTimeout=1000,connectRetry=1,syncTimeout=10000";
/// <summary>
/// 上锁,单例模式
/// </summary>
private static object locker = new object();
/// <summary>
/// 连接对象
/// </summary>
private volatile IConnectionMultiplexer _connection;
/// <summary>
/// 数据库
/// </summary>
private IDatabase _db;
#region 创建Redis实例
public RedisHelper()
{
_connection = ConnectionMultiplexer.Connect(ConnectionString);
_db = GetDatabase();
}
private static RedisHelper redisHelper;
public static RedisHelper GetRedisHelper()
{
if (redisHelper == null)
{
lock (locker)
{
if (redisHelper == null)
{
redisHelper = new RedisHelper();
}
}
}
return redisHelper;
}
#endregion
/// <summary>
/// 获取连接
/// </summary>
/// <returns></returns>
protected IConnectionMultiplexer GetConnection()
{
if (_connection != null && _connection.IsConnected)
{
return _connection;
}
lock (locker)
{
if (_connection != null && _connection.IsConnected)
{
return _connection;
}
if (_connection != null)
{
_connection.Dispose();
}
_connection = ConnectionMultiplexer.Connect(ConnectionString);
}
return _connection;
}
/// <summary>
/// 获取数据库
/// </summary>
/// <param name="db"></param>
/// <returns></returns>
public IDatabase GetDatabase(int? db = null)
{
return GetConnection().GetDatabase(db ?? -1);
}
/// <summary>
/// 设置
/// </summary>
/// <param name="key">键</param>
/// <param name="data">值</param>
/// <param name="cacheTime">过期时间</param>
public virtual void Set(string key, object data, int? cacheTime=null)
{
if (data == null)
{
return;
}
var entryBytes = Serialize(data);
if (cacheTime != null)
{
var expiresIn = TimeSpan.FromMinutes(Convert.ToDouble(cacheTime));
_db.StringSet(key, entryBytes, expiresIn);
}
else
{
_db.StringSet(key, entryBytes);
}
}
/// <summary>
/// 根据键获取值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public virtual T Get<T>(string key)
{
var rValue = _db.StringGet(key);
if (!rValue.HasValue)
{
return default(T);
}
var result = Deserialize<T>(rValue);
return result;
}
/// <summary>
/// 判断键是否已存在
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool IsExit(string key)
{
return _db.KeyExists(key);
}
/// <summary>
/// 判断是否已经设置
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public virtual bool IsSet(string key)
{
return _db.KeyExists(key);
}
/// <summary>
/// 序列化
/// </summary>
/// <param name="data"></param>
/// <returns>byte[]</returns>
private byte[] Serialize(object data)
{
var json = JsonConvert.SerializeObject(data);
return Encoding.UTF8.GetBytes(json);
}
/// <summary>
/// 反序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="serializedObject"></param>
/// <returns></returns>
protected virtual T Deserialize<T>(byte[] serializedObject)
{
if (serializedObject == null)
{
return default(T);
}
var json = Encoding.UTF8.GetString(serializedObject);
return JsonConvert.DeserializeObject<T>(json);
}
}
以上RedisHelper部分借鉴于网络,如有侵权,请联系博主。