JedisClusterFactory.java
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
//Jedis Cluster will attempt to discover cluster nodes automatically
jedisClusterNodes.add(new HostAndPort("10.96.5.183",9001));
jedisClusterNodes.add(new HostAndPort("10.96.5.183",9002));
jedisClusterNodes.add(new HostAndPort("10.96.5.183",9003));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
二ã€åˆ©ç”¨spring-data-redisæ¥å®žçŽ?br />
<!--é€šè¿‡æž„é€ æ–¹æ³•æ³¨å…¥RedisNode-->
<bean id="clusterRedisNodes1" class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg value="10.96.5.183" />
<constructor-arg value="9002" type="int" />
</bean>
....
<!--setteræ–¹å¼æ³¨å…¥-->
<bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
<property name="clusterNodes">
<set>
<ref bean="clusterRedisNodes1"/>
<ref bean="clusterRedisNodes2"/>
<ref bean="clusterRedisNodes3"/>
</set>
</property>
</bean>
<!--setteræ–¹å¼æ³¨å…¥,对应的属性需å˜åœ¨setterXXXæ–ÒŽ³•-->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxToal" value="1000" />
<property name="maxIdle" value="1000" />
<property name="maxWaitMillis" value="1000" />
</bean>
<bean id="jedisConnFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:use-pool="true">
<constructor-arg ref="redisClusterConfiguration" />
<constructor-arg ref="jedisPoolConfig" />
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnFactory" />
<!--setteræ–¹å¼æ³¨å…¥PersonRepoImpl-->
<bean id="personRepo" class="com.example.repo.impl.PersonRepoImpl">
<property name="redisTemplate" ref="redisTemplate" />
</bean>
三ã€ç®€å•集æˆSpring
自己¾~–写jedisCluster的工厂类JedisClusterFactory,ç„¶åŽé€šè¿‡Spring注入的方å¼èŽ·å–jedisCluster,实现客户端ä‹É用Redis3.0版本的集¾Ÿ¤ç‰¹æ€§ã€?/p>
  æ“作¾pÈ»Ÿ
   Linuxæ“作¾pÈ»Ÿæœ‰å¾ˆå¤šä¸ªä¸åŒçš„å‘行版åQŒå¦‚Red Hat Enterprise Linuxã€SUSE Linux Enterpriceã€Debianã€Ubuntuã€CentOS½{‰ï¼Œæ¯ä¸€ä¸ªå‘行版都有自己的特è‰ÔŒ¼Œæ¯”如RHEL的稳定,Ubuntu的易用,åŸÞZºŽ½E›_®šæ€?和性能的考虑åQŒæ“作系¾lŸé€‰æ‹©CentOSåQˆCommunity ENTerprise Operating SystemåQ‰æ˜¯ä¸€ä¸ªç†æƒ³çš„æ–ÒŽ¡ˆã€?/p>
   CentOSåQˆCommunity ENTerprise Operating SystemåQ‰æ˜¯Linuxå‘行版之一åQŒæ˜¯RHEL/Red Hat Enterprise Linux的精½Ž€å…费版,和RHELä¸ºåŒæ ïLš„æºä»£ç ,ä¸è¿‡åQŒRHELå’ŒSUSE LE½{‰ä¼ä¸šç‰ˆåQŒæä¾›çš„å‡çñ”æœåС凿˜¯æ”¶è´¹å‡çñ”åQŒæ— 法å…费在¾U¿å‡¾U§ï¼Œå› æ¤è¦æ±‚å…费的高度稳定性的æœåС噍å¯ä»¥ç”¨CentOS替代Red Hat Enterprise Linux使用ã€?/p>
LAMP¾|‘站架构å›?/p>
  WebæœåС噍ã€ç¼“å˜å’ŒPHPåŠ é€?/strong>
   Apache是LAMPæž¶æž„æœ€æ ¸å¿ƒçš„Web ServeråQŒå¼€æºã€ç¨³å®šã€æ¨¡å—丰富是Apache的优åŠÑ€‚但Apache的缺ç‚ÒŽ˜¯æœ‰äº›è‡ƒè‚¿åQŒå†…å˜å’ŒCPU开销大,性能上有æŸè€—,ä¸å¦‚一些轻é‡çñ”çš„Web æœåŠ¡å™¨ï¼ˆä¾‹å¦‚nginxåQ‰é«˜æ•ˆï¼Œè½»é‡¾U§çš„WebæœåŠ¡å™¨å¯¹äºŽé™æ€æ–‡ä»¶çš„å“应能力æ¥è¯´˜qœé«˜äºŽApacheæœåС噍ã€?/p>
  ApacheåšäØ“Web Server是负载PHP的最佳选择åQŒå¦‚æžœæµé‡å¾ˆå¤§çš„è¯ï¼Œå¯ä»¥é‡‡ç”¨nginxæ¥è´Ÿè½½éžPHPçš„Webè¯äh±‚。nginx是一个高性能的HTTPå’Œåå‘ä»£ç†æœ 务器åQŒNginx以它的稳定性ã€ä¸°å¯Œçš„功能集ã€ç¤ºä¾‹é…¾|®æ–‡ä»¶å’Œä½Žç³»¾lŸèµ„æºçš„æ¶ˆè€—而闻å。Nginx䏿”¯æŒPHPå’ŒCGI½{‰åЍæ€è¯a€åQŒä½†æ”¯æŒè´Ÿè²å‡è¡¡å’Œå®¹ 错,å¯å’ŒApacheé…åˆä½¿ç”¨åQŒæ˜¯è½»é‡¾U§çš„HTTPæœåŠ¡å™¨çš„é¦–é€‰ã€?/p>
  WebæœåŠ¡å™¨çš„¾~“å˜ä¹Ÿæœ‰å¤šç§æ–ÒŽ¡ˆåQŒApacheæä¾›äº†è‡ªå·Þqš„¾~“å˜æ¨?å—,也å¯ä»¥ä‹Éç”¨å¤–åŠ çš„Squid模嗘q›è¡Œ¾~“å˜åQŒè¿™ä¸¤ç§æ–¹å¼å‡å¯ä»¥æœ‰æ•ˆçš„æé«˜Apache的访问å“应能力。Squid Cache是一个Web¾~“å˜æœåŠ¡å™¨ï¼Œæ”¯æŒé«˜æ•ˆçš„缓å˜ï¼Œå¯ä»¥ä½œäØ“¾|‘页æœåŠ¡å™¨çš„å‰ç½®cacheæœåŠ¡å™¨ç¼“å˜ç›¸å…Œ™¯·æ±‚æ¥æé«˜WebæœåŠ¡å™¨çš„é€Ÿåº¦åQŒæŠŠSquid攑֜¨ Apacheçš„å‰ç«¯æ¥¾~“å˜WebæœåŠ¡å™¨ç”Ÿæˆçš„动æ€å†…容,而Web应用½E‹åºåªéœ€è¦é€‚当地设¾|®é¡µé¢å®žæ•ˆæ—¶é—´å³å¯ã€‚如讉K—®é‡å·¨å¤§åˆ™å¯è€ƒè™‘使用memcacheä½?为分布弾~“å˜ã€?/p>
  PHPçš„åŠ é€Ÿä‹É用eAcceleratoråŠ é€Ÿå™¨åQŒeAccelerator是一个自由开放æºç PHPåŠ é€Ÿå™¨åQŒä¼˜åŒ–å’ŒåŠ?æ€å†…容缓å˜ï¼Œæé«˜äº†æ€§èƒ½PHPè„šæœ¬çš„ç¼“å˜æ€§èƒ½åQŒä‹Éå¾—PHP脚本在编译的状æ€ä¸‹åQŒå¯¹æœåŠ¡å™¨çš„å¼€é”€å‡ ä¹Žå®Œå…¨æ¶ˆé™¤ã€‚å®ƒ˜q˜æœ‰å¯¹è„šæœ¬è“v优化作用åQŒä»¥åŠ å¿«å…¶æ‰§è¡Œæ•ˆçŽ‡ã€?使PHP½E‹åºä»£ç 执效率能æé«˜1-10å€ã€?/p>
  具体的解å†Ïx–¹æ¡ˆæœ‰ä»¥ä¸‹å‡ ç§åQ?/p>
  1ã€squid + Apache + PHP + eAccelerator
  使用Apacheè´Ÿè²PHPåQŒä‹É用squid˜q›è¡Œ¾~“å˜åQŒhtml或图片的è¯äh±‚å¯ä»¥ç›´æŽ¥ç”±squid˜q”回¾l™ç”¨æˆ—÷€‚很多大型网站都采用˜q™ç§æž¶æž„ã€?/p>
  2ã€nginx/Apache + PHPåQˆfastcgiåQ?+ eAccelerator
  使用nginx或Apacheè´Ÿè²PHPåQŒPHP使用fastcgi方弘q行åQŒæ•ˆçŽ‡è¾ƒé«˜ã€?/p>
  3ã€nginx + Apache + PHP + eAccelerator
ã€€ã€€æ¤æ–¹æ¡ˆç»¼åˆäº†nginxå’ŒApache的优点,使用Apacheè´Ÿè²PHPåQŒnginx负责解æžå…¶ä»–Webè¯äh±‚åQŒä‹É用nginxçš„rewrite模å—åQŒApache端å£ä¸å¯¹å¤–开放ã€?/p>
  数æ®åº?/strong>
   开æºçš„æ•°æ®åº“ä¸åQŒMySQL在性能ã€ç¨³å®šæ€§å’ŒåŠŸèƒ½ä¸Šæ˜¯é¦–é€‰ï¼Œå¯ä»¥è¾‘Öˆ°ç™¾ä¸‡¾U§åˆ«çš„æ•°æ®å˜å‚¨ï¼Œ¾|‘ç«™åˆæœŸå¯ä»¥ž®†MySQLå’ŒWebæœåŠ¡å™¨æ”¾åœ¨ä¸€èµøP¼Œä½†æ˜¯å½“访é—?é‡è¾¾åˆîC¸€å®šè§„模åŽåQŒåº”该将MySQLæ•°æ®åº“从Web Server上独立出æ¥ï¼Œåœ¨å•独的æœåŠ¡å™¨ä¸Š˜q行åQŒåŒæ—¶ä¿æŒWeb Serverå’ŒMySQLæœåŠ¡å™¨çš„½E›_®š˜qžæŽ¥ã€?/p>
  当数æ®åº“讉K—®é‡è¾¾åˆ°æ›´å¤§çš„¾U§åˆ«åQŒå¯ä»¥è€ƒè™‘使用MySQL Cluster½{‰æ•°æ®åº“集群或者库表散列ç‰è§£å†³æ–ÒŽ¡ˆã€?/p>
  æ€Èš„æ¥è¯´åQŒLAMP架构的网站性能会远˜qœä¼˜äºŽWindows IIS + ASP + AccessåQˆä¾‹å¦‚月光åšå®¢ï¼‰˜q™æ ·çš„网站,å¯ä»¥è´Ÿè²çš„访问é‡ä¹Ÿéžå¸¸å¤§åQŒå›½å†…的大é‡ä¸ªäh¾|‘站如果惌™¦æ”¯æ’‘大访问é‡åQŒé‡‡ç”¨LAMP架构是一个ä¸é”™çš„æ–ÒŽ¡ˆã€?/p>
  ¾lég¸Šæ‰€˜qŽÍ¼ŒåŸÞZºŽLAMP架构设计å…ähœ‰æˆæœ¬ä½Žå»‰ã€éƒ¨¾|²çµ‹z…R€å¿«é€Ÿå¼€å‘ã€å®‰å…¨ç¨³å®šç‰ç‰¹ç‚¹åQŒæ˜¯Web¾|‘络应用和环境的优秀¾l„åˆã€?/p>
按需æä¾›å¤§åž‹¾|‘站的架构设计,具体包括åQ?/p>
A. æä¾›åŽå°æ•°æ®åº“设计:æ ÒŽ®ä¸šåŠ¡éœ€æ±‚çš„ç†è§£åQŒé’ˆå¯ÒŽŒ‡å®šçš„æ•°æ®åº“(æ¶ëŠ›–Oracle,MySql,SqlServer,DB2åQ‰æä¾›ç½‘站项目的åŽå°æ•°æ®åº“设计ã€?/p>
åŽå°æ•°æ®åº“的设计是整个网站最é‡è¦çš„环节,其结构定义通常¼‹®å®šäº†åŽåîC¸šåŠ¡æ•°æ®çš„å˜å‚¨æ–¹å¼ä»¥åŠ ¾l大部分åŽå°æ•°æ®è®‰K—®æ¨¡åž‹ã€‚对大型¾|‘站而言åQŒç”±äºŽå…¶éœ€è¦æ”¯æ’‘的负è·å¾ˆå¤§åQŒæ•°æ®åº“设计ž®†å…³¾pÕdˆ°æ•°æ®å‚¨å˜é‡ï¼Œæ•°æ®è®‰K—®æ•ˆçއåQŒç¼“å˜æ•ˆçŽ‡ï¼Œæ•°æ®å®‰å…¨½{‰å¤šä¸ªæ–¹é¢ï¼Œå¤?型网站的数æ®åº“设计原则与普通ä¼ä¸šåº”用的设计原则有许多区别,需è¦ç»éªŒä¸°å¯Œçš„æž¶æž„师æ‰èƒ½èƒœä»…R€?/p>
æä¾›åŽå°æŒä¹…层设计:æŒä¹…层设计是在åŽå°æ•°æ®åº“设计的基¼‹€ä¸Šï¼Œæ ÒŽ®å…·ä½“¾~–程è¯è¨€åQŒæ ¹æ®ç½‘站访问特å¾å…·ä½“设计的¾~–ç¨‹æ¡†æž¶ã€‚è®¾è®¡ç›®æ ‡å°†å…¼é¡¾å¤„ç†æ•ˆçŽ‡å’Œä»£ç çš„å¯ç»´æŠ¤æ€§ã€å¯ç†è§£æ€§ï¼ˆå¦‚é¢å‘对象)ã€?/p>
B. æä¾›¾~“å˜è®¾è®¡åQšæ ¹æ®ä¸šåŠ¡éœ€æ±‚ï¼Œ¾l“åˆåŽå°æ•°æ®åº“设计和åŽå°æŒä¹…层设计,æä¾›¾|‘站的缓å˜è®¾è®¡æ–¹æ¡ˆã€‚具体包括å‰ç«¯ç¼“å˜ï¼Œå…׃ín数殾~“å˜åQŒåˆ†å¸ƒå¼¾~“å˜ã€?/p>
所谓å‰ç«¯ç¼“å˜ï¼ŒæŒ‡æŠŠ¾|‘é¡µä¸ŠçŸæœŸå†…ä¸å¤ªå˜åŒ–的内å®V€æ ¹æ®è®¿é—®æ•ˆçŽ‡è¯„ä¼ŽÍ¼Œé€šè¿‡ç‰‡æ®µå½¢å¼ä»¥ä¸€å®šç–略缓å˜è“væ¥ï¼Œä»Žè€Œå‡ž®‘åŽå°å†…容生æˆçš„æ—‰™—´åQŒæå‡ç½‘站的å“åº”æ•ˆçŽ‡å’ŒèŠ‚çœæœåŠ¡å™¨çš„å¤„ç†èµ„æºå 用ã€?/p>
所谓共享数æ®ç¼“å˜ï¼ŒæŒ‡æŠŠåŽå°ä¸å…¬å…Þqš„æ•°æ®æ ÒŽ®è®‰K—®é¢‘度和更新频度以一定ç–略在æœåŠ¡å™¨ç¼“å˜è“væ¥ï¼Œé¿å…æ¯æ¬¡ä½¿ç”¨éƒ½éœ€è¦ä»Žæ•°æ®åº“或¼‚盘æå–ã€?/p>
所谓分布弾~“å˜åQŒæŒ‡å¤§åž‹¾|‘站需è¦åˆ©ç”¨åˆ†å¸ƒå¼çš„ç¼“å˜æ¥åœ¨å¤šå°é›†¾Ÿ¤æœºå™¨ä¹‹é—´å…±äº«æŸäº›å¤„ç†ç»“果内å®V€?/p>
C. æä¾›MVCåQˆModel-View-ControlleråQ‰æ¡†æž¶è®¾è®¡ï¼šæ ÒŽ®ä¸šåŠ¡éœ€æ±‚å’Œ¾|‘站特点æä¾›åˆé€‚çš„ã€é«˜æ•ˆçš„MVCå¤„ç†æ¡†æž¶ã€?/p>
MVC是Web应用å‰ç«¯çš„é‡è¦æž¶æž„组æˆï¼Œ¾|‘站交互的ç»å¤§éƒ¨åˆ†å†…容将集ä¸åœ¨è¿™ä¸ªéƒ¨åˆ†ï¼Œä¸€å¥—高效而易于扩展和使用的MVC框架是整个网站ä¸é‡è¦¾l„æˆã€?/p>
D. æä¾›å®‰å…¨æ¡†æž¶åQšæ ¹æ®ä¸šåŠ¡éœ€è¦å’Œæ•°æ®å®‰å…¨ä¿æŠ¤çš„需è¦ï¼Œæä¾›¾|‘站安全框架ã€?/p>
E. æä¾›SEOåQˆSearch Engine Optimize)æ–ÒŽ¡ˆåQšé¢å‘æœç´¢å¼•擎æä¾›ç½‘ç«™æœç´¢ä¼˜åŒ–方案ã€?/p>
F. æä¾›å¤‡ä†¾æ–ÒŽ¡ˆåQšæ ¹æ®ä¸šåŠ¡éœ€è¦æä¾›é’ˆå¯¹ä¸åŒåã^å°çš„æ•°æ®åQˆä»£ç ã€æ•°æ®ã€ç”¨æˆ¯‚µ„料)½{‰å¤‡ä»½æ–¹æ¡ˆã€?/p>