一.Redis
1.简介
Redis:REmote DIctionary Server,顾名思义,远程字典服务。
Redis是单线程的。可以响应一秒钟10万次请求。Redis自身是集群的,可以有多个Redis同属于一个集群,它自己区分主从,不需要人工干预。
如果VS中要用到Redis,出来要安装Redis数据库,还要安装类似于ado.net的数据库操作的工具,我们使用sqlserver数据库,就是通过ado.net来操作的,而Redis数据库的操作工具,一个是官方提供的,ServiceStack.Redis,但是它有1小时6000次免费使用的限制,还有一个是免费的,StackExchange.Redis。不管是哪一个,都要在项目中引用。
2.开始使用
1)我们可以写一个Redis的配置文件信息:
/// <summary>
/// redis配置文件信息
/// 也可以放到配置文件去
/// </summary>
public sealed class RedisConfigInfo
{
/// <summary>
/// 可写的Redis链接地址
/// format:ip1,ip2
///
/// 默认6379端口
/// </summary>
public string WriteServerList = "127.0.0.1:6379";
/// <summary>
/// 可读的Redis链接地址
/// format:ip1,ip2
/// </summary>
public string ReadServerList = "127.0.0.1:6379";
/// <summary>
/// 最大写链接数
/// </summary>
public int MaxWritePoolSize = 60;
/// <summary>
/// 最大读链接数
/// </summary>
public int MaxReadPoolSize = 60;
/// <summary>
/// 本地缓存到期时间,单位:秒
/// </summary>
public int LocalCacheTime = 180;
/// <summary>
/// 自动重启
/// </summary>
public bool AutoStart = true;
/// <summary>
/// 是否记录日志,该设置仅用于排查redis运行时出现的问题,
/// 如redis工作正常,请关闭该项
/// </summary>
public bool RecordeLog = false;
}
2)我们把这些配置信息传给一个Redis管理类:
public class RedisManager
{
/// <summary>
/// redis配置文件信息
/// </summary>
private static RedisConfigInfo RedisConfigInfo = new RedisConfigInfo();
/// <summary>
/// Redis客户端池化管理
/// </summary>
private static PooledRedisClientManager prcManager;
/// <summary>
/// 静态构造方法,初始化链接池管理对象
/// </summary>
static RedisManager()
{
CreateManager();
}
/// <summary>
/// 创建链接池管理对象
/// </summary>
private static void CreateManager()
{
string[] WriteServerConStr = RedisConfigInfo.WriteServerList.Split(',');
string[] ReadServerConStr = RedisConfigInfo.ReadServerList.Split(',');
prcManager = new PooledRedisClientManager(ReadServerConStr, WriteServerConStr,
new RedisClientManagerConfig
{
MaxWritePoolSize = RedisConfigInfo.MaxWritePoolSize,
MaxReadPoolSize = RedisConfigInfo.MaxReadPoolSize,
AutoStart = RedisConfigInfo.AutoStart,
});
}
/// <summary>
/// 客户端缓存操作对象
/// </summary>
public static IRedisClient GetClient()
{
//prcManager是个连接池管理类,有了它,可以随时创建Client连接.
return prcManager.GetClient();
}
}
3)引用的ServiceStack.Redis中,IRedisClient是个接口,对Redis操作的方法,都在这里面,有几百个,我们再封装一个RedisBase接口,里面是常用的方法:
/// <summary>
/// RedisBase类,是redis操作的基类,继承自IDisposable接口,主要用于释放内存
/// </summary>
public abstract cla