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