回到目录html
Redis这个Nosql的存储系统通常会被部署到linux系统中,咱们能够把它当成是一个数据服务器,对于并发理大时,咱们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布式的,而Redis与WWW之间也是一种分布式,对于各个redis之间的分布式不须要咱们去干预,它是由咱们的redis客户端去负责连接的,你当时链到哪台服务器,彻底由客户端去控制,redis这种模式咱们一般称为“主从模式”,即一个主服务器,主要负责写入数据,多台从服务器,负责数据的读取,而它们以前的数据同步,也是redis自已为咱们实现的,咱们不须要去干预它,这种模式一般会称为“多级服务器集群架构”,它大大改善了程序的性能!linux
下面咱们分别开启主redis和从redis,如图redis
对于配置从服务器,咱们主要设置port,bind和slaveof这三个参数就能够了,port是端口,bind是从服务器的ip地址,slaveof是主服务器的地址和端口,代码以下sql
port 6380 bind 127.0.0.1 slaveof 127.0.0.1 6379
实例:在主服务器写入一个字符串,在从服务器读取字符串缓存
首先对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连接地址,它通常由多个服务器组件,通常称为从服务器(slave),各个服务器之间用逗号分开 /// </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" ReadServerList="192.168.2.71:6379,192.168.2.71:6380" MaxWritePoolSize="60" MaxReadPoolSize="60" AutoStart="true" LocalCacheTime="180" RecordeLog="false"> </RedisConfig>
下面咱们向主服务器加个对象并发
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("<br>"); }); } }
分别进行刷新以后的结果如图
最后:一处写入,多处读取,它会从咱们的全部服务器上去读取,这样大大改善了程序的相应能力,分布式将在将来对于企业来讲,将会是重中之重!