Redis学習ノート~Redisマスターサーバ、読み書き分離


カタログに戻る
RedisというNosqlのストレージシステムは一般的にlinuxシステムに配備され、データサーバと見なすことができます.同時理が大きい場合、複数のサーバをRedisサーバとして使用します.この場合、各Redis間も分散され、RedisとWWW間も分散されています.各redis間の分散には介入する必要はありません.それは私达のredisクライアントがリンクを担当するので、あなたはその时どのサーバーにチェーンして、完全にクライアントによって制御して、redisこのようなモードは私达は通常“主従モード”と呼ばれて、1つの主なサーバー、主にデータを书くことを担当して、複数のサーバーから、データの読み取りを担当して、それらの前のデータの同期、redisは自分で私达のために実现したので、介入する必要はありません.このモードは通常「マルチレベルサーバクラスタアーキテクチャ」と呼ばれ、プログラムのパフォーマンスを大幅に改善します.
次に、図のように主redisとredisをそれぞれ開きます.
サーバから構成するには、主にport、bind、slaveofの3つのパラメータを設定すればいいです.portはポート、bindはサーバのipアドレス、slaveofはプライマリサーバのアドレスとポートです.コードは以下の通りです.
port 6380
bind 127.0.0.1
slaveof  127.0.0.1 6379 

例:プライマリ・サーバに文字列を書き込み、サーバから文字列を読み出す
まずredisConfigの構成について説明します
    /// 
    /// redis         
    /// 
    public sealed class RedisConfigInfo : ConfigurationSection
    {
        public static RedisConfigInfo GetConfig()
        {
            RedisConfigInfo section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig");
            return section;
        }

        public static RedisConfigInfo GetConfig(string sectionName)
        {
            RedisConfigInfo section = (RedisConfigInfo)ConfigurationManager.GetSection("RedisConfig");
            if (section == null)
                throw new ConfigurationErrorsException("Section " + sectionName + " is not found.");
            return section;
        }
        /// 
        ///      Redis    ,        ,        
        /// 
        [ConfigurationProperty("WriteServerList", IsRequired = false)]
        public string WriteServerList
        {
            get
            {
                return (string)base["WriteServerList"]; 
            }
            set
            {
                base["WriteServerList"] = value;
            }
        }

        
        /// 
        ///     Redis    ,           ,        (slave),            
        /// 
        [ConfigurationProperty("ReadServerList", IsRequired = false)]
        public string ReadServerList
        {
            get
            {
                return (string)base["ReadServerList"]; 
            }
            set
            {
                base["ReadServerList"] = value;
            }
        }

        
        /// 
        ///       
        /// 
        [ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = 5)]
        public int MaxWritePoolSize
        {
            get
            {
                int _maxWritePoolSize = (int)base["MaxWritePoolSize"];
                return _maxWritePoolSize > 0 ? _maxWritePoolSize : 5;
            }
            set
            {
                base["MaxWritePoolSize"] = value;
            }
        }

       
        /// 
        ///       
        /// 
        [ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = 5)]
        public int MaxReadPoolSize
        {
            get
            {
                int _maxReadPoolSize = (int)base["MaxReadPoolSize"];
                return _maxReadPoolSize > 0 ? _maxReadPoolSize : 5;
            }
            set
            {
                base["MaxReadPoolSize"] = value;
            }
        }

         
        /// 
        ///     
        /// 
        [ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)]
        public bool AutoStart
        {
            get
            {
                return (bool)base["AutoStart"];
            }
            set
            {
                base["AutoStart"] = value;
            }
        }


        
        /// 
        ///         (    ),  : 
        /// 
        [ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = 36000)]
        public int LocalCacheTime
        {
            get
            {
                return (int)base["LocalCacheTime"];
            }
            set
            {
                base["LocalCacheTime"] = value;
            }
        }

       
        /// 
        ///       ,        redis        , redis    ,     
        /// 
        [ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)]
        public bool RecordeLog
        {
            get
            {
                return (bool)base["RecordeLog"];
            }
            set
            {
                base["RecordeLog"] = value;
            }
        }        

    }

, redis , (redis )

  "192.168.2.71:6379" ReadServerList="192.168.2.71:6379,192.168.2.71:6380" MaxWritePoolSize="60" MaxReadPoolSize="60" AutoStart="true" LocalCacheTime="180" RecordeLog="false">
  

に、プライマリ・サーバにオブジェクトを します.
using (var test = redisClient.GetTypedClient<string>())
                        {
                            test.Lists["Test"].Add("     ");

                        }
               

saveメソッドが び されていない 、オブジェクトはメモリにのみ され、データはスレーブ・サーバに されず、saveメソッドが び されると、 スレーブ・サーバに されます.
このsaveメソッドを すると、サーバから が します.
      using (var redisClient = RedisManager.GetClient())
            {
                using (var test = redisClient.GetTypedClient<string>())
                {

                    test.Lists["bobo"].Add("info");
                    test.Save();
                }
            }

に すように
 
ファイアウォールを したサーバーにとって、もちろん するポートを しなければなりません.そうしないと、クライアントもリンクできません.
したことは、コマンドラインでサーバからのデータをテストすることができます. のように.
WEB でテストを います
      using (var redisClient = RedisManager.GetClient())
            {
                using (var test = redisClient.GetTypedClient<string>())
                {

                    test.Lists["bobo"].ToList().ForEach(i =>
                    {
                        Response.Write(redisClient.Port + " " + i);
                        Response.Write("
"); }); } }

それぞれリフレッシュした を に す
に、1つの き み、 の み りは、 たちのすべてのサーバから み ります.これにより、プログラムの が に され、 は 、 にとって になります.
カタログに る