标签:style blog http color io os ar 使用 for
Redis这个Nosql的存储系统一般会被部署到linux系统中,我们可以把它当成是一个数据服务器,对于并发理大时,我们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布式的,而Redis与WWW之间也是一种分布式,对于各个redis之间的分布式不需要我们去干预,它是由我们的redis客户端去负责链接的,你当时链到哪台服务器,完全由客户端去控制。
下面看一下redisConfig里的相关配置,我加了一些说明
/// <summary> /// redis主要信息的配置参数 /// </summary> 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; } /// <summary> /// 可写的Redis链接地址,多个主机用逗号分开 /// </summary> [ConfigurationProperty("WriteServerList", IsRequired = false)] public string WriteServerList { get { return (string)base["WriteServerList"]; } set { base["WriteServerList"] = value; } } /// <summary> /// 可读的Redis链接地址,多个主机用逗号分开 /// </summary> [ConfigurationProperty("ReadServerList", IsRequired = false)] public string ReadServerList { get { return (string)base["ReadServerList"]; } set { base["ReadServerList"] = value; } } /// <summary> /// 最大写链接数 /// </summary> [ConfigurationProperty("MaxWritePoolSize", IsRequired = false, DefaultValue = 5)] public int MaxWritePoolSize { get { int _maxWritePoolSize = (int)base["MaxWritePoolSize"]; return _maxWritePoolSize > 0 ? _maxWritePoolSize : 5; } set { base["MaxWritePoolSize"] = value; } } /// <summary> /// 最大读链接数 /// </summary> [ConfigurationProperty("MaxReadPoolSize", IsRequired = false, DefaultValue = 5)] public int MaxReadPoolSize { get { int _maxReadPoolSize = (int)base["MaxReadPoolSize"]; return _maxReadPoolSize > 0 ? _maxReadPoolSize : 5; } set { base["MaxReadPoolSize"] = value; } } /// <summary> /// 自动重启 /// </summary> [ConfigurationProperty("AutoStart", IsRequired = false, DefaultValue = true)] public bool AutoStart { get { return (bool)base["AutoStart"]; } set { base["AutoStart"] = value; } } /// <summary> /// 本地缓存到期时间(超时时间),单位:秒 /// </summary> [ConfigurationProperty("LocalCacheTime", IsRequired = false, DefaultValue = 36000)] public int LocalCacheTime { get { return (int)base["LocalCacheTime"]; } set { base["LocalCacheTime"] = value; } } /// <summary> /// 是否记录日志,该设置仅用于排查redis运行时出现的问题,如redis工作正常,请关闭该项 /// </summary> [ConfigurationProperty("RecordeLog", IsRequired = false, DefaultValue = false)] public bool RecordeLog { get { return (bool)base["RecordeLog"]; } set { base["RecordeLog"] = value; } } }
而配置文件中,我们可以把redis读服务器和写服务器进行配置,多个服务器使用逗号分开(redis本身就是支持读写分离的)
<RedisConfig WriteServerList="192.168.2.71:6379,192.168.2.72:6379" ReadServerList="192.168.2.71:6379,192.168.2.72:6379" MaxWritePoolSize="60" MaxReadPoolSize="60" AutoStart="true" LocalCacheTime="180" RecordeLog="false"> </RedisConfig>
而我们使用多线程来测试一下
//testing redis 100 threads for (int i = 0; i < 100; i++) { Task.Run(() => { using (var redisClient = RedisManager.GetClient()) { using (var test = redisClient.GetTypedClient<string>()) { test.Lists["print"].Enqueue("信息被添加"); var s = test.Lists["print"].Dequeue(); Response.Write(s); Response.Write(redisClient.Host); Response.Write("<br>"); } } }); }
测试的结果就是,在每个客户端请求时,都会随机去分配一个redis服务器,我们可以看一下截图
通过上面的图可以看到,我们的信息被分别写到了两台redis服务器中,而问题又来了,在客户端去取数据时,你可能会取redisserver1里的数据,也有可能取redisserver2里的数据,而真正完整的数据是这两台server的并集,如何将多台server的数据合并,这是我们要解决的问题,如果这个问题不能解决,那多台server也就没有意思了,下一讲,我们将主要来说一下多台redisServer的数据同步问题。
标签:style blog http color io os ar 使用 for
原文地址:http://www.cnblogs.com/lori/p/4039735.html