Redis__WindowsServer主從服務部署及調用實例

本文轉自:http://www.cnblogs.com/gossip/p/4898653.htmlhtml

 

1、先談談單個Redis服務的安裝
        使用的redis是2.8.17版本,從官網下載解壓縮後文件內容爲:
         
            安裝並啓動一個redis服務很簡單,步驟以下:
            一、配置日誌文件目錄:只用修改logfile定位到Log文件夾下
                 
            二、命令行定位到解壓文件的目錄
                  cd /d D:\MasterRedis-2.8.17     (windows 7)
                  cd /d D:\SlaveRedis-2.8.17       (windows server)
            三、安裝Redis:redis-server --service-install redis.windows.conf --loglevel verbose
            四、啓動Redis:redis-server --service-start
            五、中止Redis:redis-server --service-stop
            六、卸載Redis:redis-server --service-uninstall 
 
 
2、再談談結論
        通過半天的折騰,結論就是:Success!過程我下面再談,結論就是在單臺windows servers機器上部署主從服務,第二個redis示例始終啓動不了(寫這篇文章的時候解決了),在兩個不一樣的服務器上部署也能夠成功

 
3、談談過程
      一、原本想安裝部署單個Redis的方式連續操做兩遍,才發現第一次操做時已經啓動了名稱爲Redis的服務,第二次操做時服務根本就安裝不上去,解決的方法就是給Redis服務命名,命令以下:
       redis-server --service-install redis6379.windows.conf --loglevel verbose  --service-name Redis6379
       --service-name是服務名稱,坑爹的是我在網上拷貝的命令只有一個橫槓(-),半天得不到想要的結果(一個橫崗也會建立名稱爲redis的服務)
       二、安裝服務的時候加上了servicename,在服務啓動、中止、卸載的時候也須要加上servicename參數
             一、服務啓動:redis-server --service-start --service-name Redis6379 redis6379.windows.conf
             二、服務中止:redis-server --service-stop --service-name Redis6379 redis6379.windows.conf
             三、服務卸載:redis-server --service-uninstall --service-name Redis6379 redis6379.windows.conf
       三、最後在談談以前爲何主從服務均可以安裝成功,可是啓動一個服務後第二個服務始終沒法啓動的 坑 
    事件查看器的消息以下:(不知所云啊!)
     
   
             坑就在安裝服務的命令:
    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參數的位置,在配置文件前不行,必須放在最後
 
5、談談配置文件的修改(redis.windows.conf)
       一、主Redis服務配置文件不用作修改
                可能這個地方須要修改,我沒有作測試
       二、從Redis服務配置文件修改以下:
             一、  端口修改
             二、   目前來看這裏不用作修改,註釋便可
             三、  日誌文件
              四、   指定主Redis服務的IP和端口
 
5、截個圖說明結論(用的工具是RedisDesktopManager)
      一、RedisRemoteMaster爲遠程主機的主Redis

   二、RedisRemoteSlaver爲遠程主機的從Redis (能夠看到開始主redis未設置abc時,返回的是null,設置後,返回了新值)
 
  
         三、RedisLocal爲主機的從Redis(同2)
 
 
5、調用Redis代碼
    一、配置主從服務器
          
 <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>
     二、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
            });
        }
    }
複製代碼

 

     三、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);
            }
        }

    }
複製代碼

 

     四、調用代碼
 
複製代碼
  class Program
    {
        static void Main(string[] args)
        {
            var redis = new RedisHelper();

            redis.Set<string>("aa", DateTime.Now.ToString());

            var d = redis.Get<string>("aa");
        }
    }
複製代碼
相關文章
相關標籤/搜索