一、在Asp.net中使用Redis
StackExchange.Redis和ServiceStack.Redis是Redis的.net常用框架。因为StackExchange.Redis只支持.net4.0及以上版本,但是由于很多项目的后台框架都是.net3.x的版本,所以本文只介绍ServiceStack.Redis的安装和使用。
1.在Visual Studio的项目中添加引用
2.选择使用Nuget安装包
在浏览选项里搜索ServiceStack.Redis,并选择安装版本,如果项目后台框架.net版本过低,这里的redis客户端也要选择更低的版本。
3.安装成功后会显示新增的引用
如果安装不成功会显示版本不兼容的问题,大家可以根据自己的.net版本选择不同的redis客户端,不局限于ServiceStack.Redis,记住千万不要更改自己项目的.net版本,因为很多历史原因,这里不再多说。
二、代码示例
public class RedisHelper
{
public RedisHelper()
{
}
//redis配置服务端IP和端口号
public static RedisClient Redis = (RedisClient)CreateManager(new string[] { "10.12.75.126:6379" }, new string[] { "10.12.75.126:6379" }).GetClient();
//缓存池
PooledRedisClientManager prcm = new PooledRedisClientManager();
//默认缓存过期时间(单位:秒)
public int secondsTimeOut = 30 * 60;
private readonly Regex userNameRegex = new Regex(@"\(.*?\)", RegexOptions.Singleline);
///<summary>
///缓冲池
///</summary>
///<param name="readWriteHosts"></param>
///<param name="readOnlyHosts"></param>
///<return></return>
public static PooledRedisClientManager CreateManager(string[] readWriteHosts, string[] readOnlyHosts)
{
return new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
{
MaxWritePoolSize = readWriteHosts.Length * 5,
MaxReadPoolSize = readOnlyHosts.Length * 5,
AutoStart = true,
});
}
///<summary>
///构造函数
///</summary>
///<param name="OpenPooledRedis">是否开启缓冲池</param>
public RedisHelper(bool OpenPooledRedis = false)
{
if (OpenPooledRedis)
{
prcm = CreateManager(new string[] { "10.12.75.126:6379" }, new string[] { "10.12.75.126:6379" });
Redis = prcm.GetClient() as RedisClient;
}
}
#region key/value存储
///<summary>
///设置缓存
///</summary>
///<typeparam name="T"></typeparam>
///<param name="key">缓存键</param>
///<param name="value">缓存值</param>
///<param name="timeout">过期时间(单位:秒),-1:不过期,0:默认过期时间</param>
///<return></return>
public bool Set<T>(string key, T t, int timeout = 0)
{
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
Redis.Expire(key, secondsTimeOut);
}
return Redis.Add<T>(key, t);
}
///<summary>
///获取
///</summary>
///<typeparam name="T"></typeparam>
///<param name="key"></param>
///<return></return>
public T Get<T>(string key)
{
return Redis.Get<T>(key);
}
///<summary>
///删除
///</summary>
///<param name="key"></param>
///<return></return>
public bool Remove(string key)
{
return Redis.Remove(key);
}
///<summary>
///增加(同Set方法)
///</summary>
public bool Add<T>(string key, T t, int timeout = 0)
{
if (timeout >= 0)
{
if (timeout > 0)
{
secondsTimeOut = timeout;
}
Redis.Expire(key, secondsTimeOut);
}
return Redis.Add<T>(key, t);
}
#endregion
//释放资源
public void Dispose()
{
if (Redis != null)
{
Redis.Dispose();
Redis = null;
}
GC.Collect();
}
}
}