• 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");
            }
        }
  • 相关阅读:
    利用git上传到码云
    js 数组的方法总结
    什么是浏览器的回流和重绘以及如何减少回流和重绘
    数组的方法some和includes
    node.js中使用http-proxy-middleware请求转发给其它服务器
    什么是BFC
    如何用Github上传项目中的代码
    前端渲染与后端渲染的区别有哪些
    移动端路由的切换
    面试题
  • 原文地址:https://www.cnblogs.com/xiashenbin/p/5631330.html
Copyright © 2020-2023  润新知