本文转自:http://www.cnblogs.com/gossip/p/4898653.html
一、先谈谈单个Redis服务的安装
使用的redis是2.8.17版本,从官网下载解压缩后文件内容为:
安装并启动一个redis服务很简单,步骤如下:
1、配置日志文件目录:只用修改logfile定位到Log文件夹下
2、命令行定位到解压文件的目录
cd /d D:\MasterRedis-2.8.17 (windows 7)
cd /d D:\SlaveRedis-2.8.17 (windows server)
3、安装Redis:redis-server --service-install redis.windows.conf --loglevel verbose
4、启动Redis:redis-server --service-start
5、停止Redis:redis-server --service-stop
6、卸载Redis:redis-server --service-uninstall
二、再谈谈结论
经过半天的折腾,结论就是:Success!过程我下面再谈,结论就是在单台windows servers机器上部署主从服务,第二个redis示例始终启动不了(写这篇文章的时候解决了),在两个不同的服务器上部署也可以成功
三、谈谈过程
1、本来想安装部署单个Redis的方式连续操作两遍,才发现第一次操作时已经启动了名称为Redis的服务,第二次操作时服务根本就安装不上去,解决的方法就是给Redis服务命名,命令如下:
redis-server --service-install redis6379.windows.conf --loglevel verbose --service-name Redis6379
--service-name是服务名称,坑爹的是我在网上拷贝的命令只有一个横杠(-),半天得不到想要的结果(一个横岗也会创建名称为redis的服务)
2、安装服务的时候加上了servicename,在服务启动、停止、卸载的时候也需要加上servicename参数
1、服务启动:redis-server --service-start --service-name Redis6379 redis6379.windows.conf
2、服务停止:redis-server --service-stop --service-name Redis6379 redis6379.windows.conf
3、服务卸载:redis-server --service-uninstall --service-name Redis6379 redis6379.windows.conf
3、最后在谈谈之前为什么主从服务都可以安装成功,但是启动一个服务后第二个服务始终无法启动的坑
事件查看器的消息如下:(不知所云啊!)
坑就在安装服务的命令:
redis-server --service-install --service-name Redis6379 redis6379.windows.conf --loglevel verbose (不OK)
redis-server --service-install redis6379.windows.conf --loglevel verbose --service-name Redis6379 (OK)
看清楚了,就在于service-name参数的位置,在配置文件前不行,必须放在最后
五、谈谈配置文件的修改(redis.windows.conf)
1、主Redis服务配置文件不用做修改
可能这个地方需要修改,我没有做测试
2、从Redis服务配置文件修改如下:
1、 端口修改
2、 目前来看这里不用做修改,注释即可
3、 日志文件
4、 指定主Redis服务的IP和端口
五、截个图说明结论(用的工具是RedisDesktopManager)
1、RedisRemoteMaster为远程主机的主Redis
2、RedisRemoteSlaver为远程主机的从Redis (可以看到开始主redis未设置abc时,返回的是null,设置后,返回了新值)
3、RedisLocal为主机的从Redis(同2)
五、调用Redis代码
1、配置主从服务器
<appSettings>
<!--Redis写入服务器地址,可以添加多个服务器通过,分隔-->
<add key="ReadWriteHosts" value="192.168.1.100:6379" />
<!--Redis读服务器地址,可以添加多个服务器通过,分隔-->
<add key="ReadOnlyHosts" value="192.168.1.100:6380,127.0.0.1:6379" />
</appSettings>
2、Redis初始化(RedisConfig.cs)
class RedisConfig
{
public static RedisClient Redis
{
get
{
return (RedisClient)reidsPools.GetClient();
}
} private static string[] hosts;
private static PooledRedisClientManager reidsPools;
static RedisConfig()
{
var readWriteHosts = ConfigurationManager.AppSettings["ReadWriteHosts"].Split(',');
var readOnlyHosts = ConfigurationManager.AppSettings["ReadOnlyHosts"].Split(','); reidsPools = new PooledRedisClientManager(readWriteHosts, readOnlyHosts, new RedisClientManagerConfig
{
MaxWritePoolSize = 100,//“写”链接池链接数
MaxReadPoolSize = 200,//“读”链接池链接数
AutoStart = true,
DefaultDb = 0
});
}
}
3、Redis操作工具类(RedisHelper.cs)
public class RedisHelper
{
/// <summary>
/// 获取值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T Get<T>(string key)
{
using (var redis = RedisConfig.Redis)
{
return redis.Get<T>(key);
}
} /// <summary>
/// 设置值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public bool Set<T>(string key, T value)
{
using (var redis = RedisConfig.Redis)
{
return redis.Set<T>(key, value);
}
} /// <summary>
/// 设置值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public bool Set<T>(string key, T value, DateTime dt)
{
using (var redis = RedisConfig.Redis)
{
return redis.Set<T>(key, value, dt);
}
} }
4、调用代码
class Program
{
static void Main(string[] args)
{
var redis = new RedisHelper(); redis.Set<string>("aa", DateTime.Now.ToString()); var d = redis.Get<string>("aa");
}
}