• Redis主从服务部署


    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");
            }
        }
    复制代码
     
  • 相关阅读:
    使用Python学习RabbitMQ消息队列
    Python调用nmap扫描网段主机信息生成xml
    扫描网站服务器真实IP的小脚本
    C语言实现将彩色BMP位图转化为二值图
    Python socket编程之构造IP首部和ICMP首部
    ARP协议抓包之帧长度和Gratuitous ARP的问题
    合天解密200-找茬游戏
    合天misc100
    IDF实验室-简单的js解密
    IDF实验室—不难不易的js加密
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4899843.html
Copyright © 2020-2023  润新知