Redis__WindowsServer主从服务部署及调用实例
一、先谈谈单个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"); } }