2022-05-27 42
ArrayList£¬LinkedList£¬Vector¶¼ÊôÓÚList
List£ºÔªËØÊÇÓÐ˳ÐòµÄ£¬ÔªËØ¿ÉÒÔÖØ¸´ÒòΪÿ¸öÔªËØÓÐ×Ô¼ºµÄ½Ç±ê£¨Ë÷Òý£©
|-- ArrayList:µ×²ãµÄÊý¾Ý½á¹¹ÊÇÊý×é½á¹¹£¬ÌصãÊÇ£º²éѯºÜ¿ì£¬Ôö ɾ ÉÔ΢Âýµã£¬Ï̲߳»Í¬²½
|-- LinkedList£ºµ×²ãʹÓõÄÊÇÁ´±íÊý¾Ý½á¹¹£¬ÌصãÊÇ£ºÔö ɾºÜ¿ì£¬²éѯÂý¡£
|--Vector:µ×²ãÊÇÊý×éÊý¾Ý½á¹¹£¬Ïß³Ìͬ²½£¬±»ArrayList´úÌæÁË£¬ÏÖÔÚÓõÄÖ»ÓÐËûµÄö¾Ù¡£
Set£ºÔªËØÊÇÎÞÐòµÄ£¬ÇÒ²»¿ÉÒÔÖØ¸´£¨´æÈëºÍÈ¡³öµÄ˳Ðò²»Ò»¶¨Ò»Ö£©£¬Ï̲߳»Í¬²½¡£
|--HashSet£ºµ×²ãÊǹþÏ£±íÊý¾Ý½á¹¹¡£¸ù¾ÝhashCodeºÍequals·½·¨À´È·¶¨ÔªËصÄΨһÐÔ
|--TreeSet£º¿ÉÒÔ¶ÔSet¼¯ºÏÖеÄÔªËØ½øÐÐÅÅÐò£¨×ÔÈ»ÑÐò£©£¬µ×²ãµÄÊý¾Ý½á¹¹ÊǶþ²æÊ÷£¬
Ò²¿ÉÒÔ×Ô¼ºÐ´¸öÀàʵÏÖComparable »òÕß Comparator ½Ó¿Ú£¬¶¨Òå×Ô¼ºµÄ±È½ÏÆ÷£¬½«Æä×÷Ϊ²ÎÊý´«µÝ¸øTreeSetµÄ¹¹Ô캯Êý¡£
Map£ºÕâ¸ö¼¯ºÏÊÇ´æ´¢¼üÖµ¶ÔµÄ£¬Ò»¶ÔÒ»¶ÔÍùÀï´æ£¬¶øÇÒҪȷ±£¼üµÄΨһÐÔ£¨01£¬ÕÅÈý£©ÕâÑùµÄÐÎʽ´òÓ¡³öÀ´¾ÍÊÇ 01=ÕÅÈý
|--HashTable£ºµ×²ãÊǹþÏ£±íÊý¾Ý½á¹¹£¬²»¿ÉÒÔ´æÈënull¼üºÍnullÖµ£¬¸Ã¼¯ºÏÏß³ÌÊÇͬ²½µÄ£¬Ð§ÂʱȽϵ͡£³öÏÖÓÚJDK1.0
|--HashMap£ºµ×²ãÊǹþÏ£±íÊý¾Ý½á¹¹£¬¿ÉÒÔ´æÈënull¼üºÍnullÖµ£¬Ï̲߳»Í¬²½£¬Ð§Âʽϸߣ¬´úÌæÁËHashTable£¬³öÏÖÓÚJDK 1.2
|--TreeMap:µ×²ãÊǶþ²æÊ÷Êý¾Ý½á¹¹£¬Ï̲߳»Í¬²½£¬¿ÉÒÔÓÃÓÚ¸ömap¼¯ºÏÖеļü½øÐÐÅÅÐò
ÔÚJava±à³ÌÓïÑÔÖУ¬×î»ù±¾µÄ½á¹¹¾ÍÊÇÁ½ÖÖ£¬Ò»¸öÊÇÊý×飬ÁíÍâÒ»¸öÊÇÄ£ÄâÖ¸Õ루ÒýÓã©£¬ËùÓеÄÊý¾Ý½á¹¹¶¼¿ÉÒÔÓÃÕâÁ½¸ö»ù±¾½á¹¹À´¹¹ÔìµÄ£¬HashMapÒ²²»ÀýÍâ¡£
HashMapʵ¼ÊÉÏÊÇÒ»¸ö¡°Á´±íµÄÊý×顱µÄÊý¾Ý½á¹¹£¬Ã¿¸öÔªËØ´æ·ÅÁ´±íÍ·½áµãµÄÊý×飬¼´Êý×éºÍÁ´±íµÄ½áºÏÌå¡£HashMapµ×²ã¾ÍÊÇÒ»¸öÊý×飬Êý×éÖеÄÿһÏîÓÖÊÇÒ»¸öÁ´±í¡£µ±Ð½¨Ò»¸öHashMapµÄʱºò£¬¾Í»á³õʼ»¯Ò»¸öÊý×é
ConcurrentHashMapÊÇÓÉSegmentÊý×é½á¹¹ºÍHashEntryÊý×é½á¹¹×é³É¡£SegmentÊÇÒ»ÖÖ¿ÉÖØÈëËøReentrantLock£¬ÔÚConcurrentHashMapÀï°çÑÝËøµÄ½ÇÉ«£¬HashEntryÔòÓÃÓÚ´æ´¢¼üÖµ¶ÔÊý¾Ý¡£
Ò»¸öConcurrentHashMapÀï°üº¬Ò»¸öSegmentÊý×飬SegmentµÄ½á¹¹ºÍHashMapÀàËÆ£¬ÊÇÒ»ÖÖÊý×éºÍÁ´±í½á¹¹£¬ Ò»¸öSegmentÀï°üº¬Ò»¸öHashEntryÊý×飬
ÿ¸öHashEntryÊÇÒ»¸öÁ´±í½á¹¹µÄÔªËØ£¬ ÿ¸öSegmentÊØ»¤ÕßÒ»¸öHashEntryÊý×éÀïµÄÔªËØ,µ±¶ÔHashEntryÊý×éµÄÊý¾Ý½øÐÐÐÞ¸Äʱ£¬±ØÐëÊ×ÏÈ»ñµÃËü¶ÔÓ¦µÄSegmentËø
·½·¨Ò»£º ά»¤Ò»ÕÅ±í£¬´æ´¢Êý¾Ý²åÈëµÄ˳Ðò£¬¿ÉÒÔʹÓÃvector¡£µ«ÊÇÈç¹ûɾ³ýÊý¾ÝÄØ£¬Ê×ÏȵÃÔÚvectorÀïÃæÕÒµ½ÄǸöÊý¾Ý£¬ÔÙɾ³ý£¬¶øÉ¾³ýÓÖÒªÒÆ¶¯´óÁ¿Êý¾Ý¡£ÐÔÄÜЧÂʺܵ͡£
ʹÓÃlist£¬Òƶ¯ÎÊÌâ¿ÉÒÔ½â¾ö£¬µ«ÊDzéÕÒÊý¾ÝµÄO(n)ʱ¼äÏûºÄ£¬Èç¹ûɾ³ým´Î£¬ÄDzéÕÒÊý¾ÝµÄÐÔÄܾÍÊÇ0£¨n*m)£¬ÄÇ×ÜÌåÐÔÄÜÒ²ÊÇ O(n2)¡£ÐÔÄÜ»¹ÊÇû·¨½ÓÊÜ¡£
·½·¨¶þ£º
¿ÉÒÔÔÚhashmapÀïÃæÎ¬»¤²åÈë˳ÐòµÄid, ÔÚvalue½¨Ò»¸ö×ֶδ洢idÖµ£¬ÔÙά»¤Ò»Õűívector£¬²¢ÇÒid¶ÔÓ¦vectorÀïÃæµÄÖµ¡£
²åÈëµÄʱºò£¬id£«£½1£¬ hashmap.insert£¬vector.push_back.
ɾ³ýµÄʱºò£¬ÏÈhashmap.find(key), µÃµ½value, ²¢´ÓvalueÖеõ½id, ͨ¹ýid°Ñ¶ÔÓ¦vectorÖµÖÃΪÎÞЧ¡£
¸üУºÉ¾³ý£«²åÈë¡£
ά»¤¹¤×÷OKÁË£¬Êä³öµÄʱºòÖ±½ÓÊä³övectorÀïÃæµÄÖµ¾Í¿ÉÒÔÁË£¬ ÎÞЧµÄ¾Ícontinue¡£
Ëã·¨¸´ÔÓ¶ÈΪO(n)
·½·¨Èý£º
JavaÀïÃæÓиöÈÝÆ÷LinkedHashMap, ËüÄÜʵÏÖ°´ÕÕ²åÈëµÄ˳ÐòÊä³ö½á¹û¡£
ËüµÄÔÀíÒ²ÊÇά»¤Ò»ÕÅ±í£¬µ«ËüÊÇÁ´±í£¬²¢ÇÒhashmapÖÐά»¤Ö¸ÏòÁ´±íµÄÖ¸Õ룬ÕâÑù¿ÉÒÔ¿ìËÙ¶¨Î»Á´±íÖеÄÔªËØ½øÐÐɾ³ý¡£
ËüµÄʱ¼ä¸´ÔÓ¶ÈÒ²ÊÇO(n), ¿Õ¼äÉÏÒª±ÈÉÏÃæÉÙЩ
HashTableÈÝÆ÷ʹÓÃsynchronizedÀ´±£Ö¤Ḭ̈߳²È«£¬µ«ÔÚÏ߳̾ºÕù¼¤ÁÒµÄÇé¿öÏÂHashTableµÄЧÂʷdz£µÍÏ¡£
ÒòΪµ±Ò»¸öÏ̷߳ÃÎÊHashTableµÄͬ²½·½·¨Ê±£¬ÆäËûÏ̷߳ÃÎÊHashTableµÄͬ²½·½·¨Ê±£¬¿ÉÄÜ»á½øÈë×èÈû»òÂÖѯ״̬¡£
ÈçÏß³Ì1ʹÓÃput½øÐÐÌí¼ÓÔªËØ£¬Ïß³Ì2²»µ«²»ÄÜʹÓÃput·½·¨Ìí¼ÓÔªËØ£¬²¢ÇÒÒ²²»ÄÜʹÓÃget·½·¨À´»ñÈ¡ÔªËØ£¬ËùÒÔ¾ºÕùÔ½¼¤ÁÒЧÂÊÔ½µÍ
ConcurrentHashMapʹÓõÄËø·Ö¶Î¼¼Êõ£¬Ê×ÏȽ«Êý¾Ý·Ö³ÉÒ»¶ÎÒ»¶ÎµÄ´æ´¢£¬È»ºó¸øÃ¿Ò»¶ÎÊý¾ÝÅäÒ»°ÑËø£¬µ±Ò»¸öÏß³ÌÕ¼ÓÃËø·ÃÎÊÆäÖÐÒ»¸ö¶ÎÊý¾ÝµÄʱºò£¬ÆäËû¶ÎµÄÊý¾ÝÒ²Äܱ»ÆäËûÏ̷߳ÃÎÊ
1 .ÈýÕßÔÚÖ´ÐÐËÙ¶È·½ÃæµÄ±È½Ï£ºStringBuilder > StringBuffer > String
2 .String <£¨StringBuffer£¬StringBuilder£©µÄÔÒò
String£º×Ö·û´®³£Á¿
StringBuffer£º×Ö·û´®³£Á¿
StringBuilder£º×Ö·û´®³£Á¿
StringBuilder£ºÏ̷߳ǰ²È«µÄ
StringBuffer£ºḬ̈߳²È«µÄ
µ±ÎÒÃÇÔÚ×Ö·û´®»º³åÈ¥±»¶à¸öÏß³ÌʹÓÃÊÇ£¬JVM²»Äܱ£Ö¤StringBuilderµÄ²Ù×÷Êǰ²È«µÄ£¬ËäÈ»ËûµÄËÙ¶È×î¿ì£¬µ«ÊÇ¿ÉÒÔ±£Ö¤StringBufferÊÇ¿ÉÒÔÕýÈ·²Ù×÷µÄ¡£
µ±È»´ó¶àÊýÇé¿öϾÍÊÇÎÒÃÇÊÇÔÚµ¥Ïß³ÌϽøÐеIJÙ×÷£¬ËùÒÔ´ó¶àÊýÇé¿öÏÂÊǽ¨ÒéÓÃStringBuilder¶ø²»ÓÃStringBufferµÄ£¬¾ÍÊÇËٶȵÄÔÒò¡£
¶ÔÓÚÈýÕßʹÓõÄ×ܽ᣺ 1.Èç¹ûÒª²Ù×÷ÉÙÁ¿µÄÊý¾ÝÓà = String
2.µ¥Ï̲߳Ù×÷×Ö·û´®»º³åÇø ϲÙ×÷´óÁ¿Êý¾Ý = StringBuilder
3.¶àÏ̲߳Ù×÷×Ö·û´®»º³åÇø ϲÙ×÷´óÁ¿Êý¾Ý = StringBuffer
waitºÍnotifyµÄ±¾ÖÊÊÇ»ùÓÚÌõ¼þ¶ÔÏóµÄ£¬¶øÇÒÖ»ÄÜÓÉÒѾ»ñµÃËøµÄÏ̵߳÷Óá£javaµÄÿ¸öObject¶¼ÓÐÒ»¸öÒþÊ½Ëø£¬Õâ¸öÒþÊ½Ëø¹ØÁªÒ»¸öConditionÌõ¼þ¶ÔÏó£¬Ïß³ÌÄõ½Õâ¸öÒþÊ½Ëø£¨±ÈÈç½øÈësynchronized´úÂëÇøÓò£©£¬¾Í¿ÉÒÔµ÷ÓÃwait£¬
ÓïÒåÊÇÔÚConditionÌõ¼þ¶ÔÏóÉϵȴý£¬ÆäËûµÄÏ߳̿ÉÒÔÔÚÕâ¸öConditionÌõ¼þ¶ÔÏóÉϵȴý£¬µÈÂú×ãÌõ¼þÖ®ºó£¬¾Í¿ÉÒÔµ÷ÓÃnotify»òÕßnotifyAllÀ´»½ÐÑËùÓÐÔÚ´ËÌõ¼þ¶ÔÏóÉϵȴýµÄÏß³Ì
sleep()ÊÇThreadÀàÖеķ½·¨£¬¶øwait()ÔòÊÇObjectÀàÖеķ½·¨¡£
sleep()·½·¨µ¼ÖÂÁ˳ÌÐòÔÝÍ££¬µ«ÊÇËûµÄ¼à¿Ø×´Ì¬ÒÀÈ»±£³Ö×Å£¬µ±Ö¸¶¨µÄʱ¼äµ½ÁËÓÖ»á×Ô¶¯»Ö¸´ÔËÐÐ״̬¡£ÔÚµ÷ÓÃsleep()·½·¨µÄ¹ý³ÌÖУ¬Ï̲߳»»áÊͷŶÔÏóËø¡£
wait()·½·¨»áµ¼ÖÂÏß³Ì·ÅÆú¶ÔÏóËø£¬½øÈëµÈ´ý´Ë¶ÔÏóµÄµÈ´ýËø¶¨³Ø£¬Ö»ÓÐÕë¶Ô´Ë¶ÔÏóµ÷ÓÃnotify()·½·¨ºó±¾Ï̲߳ŽøÈë¶ÔÏóËø¶¨³Ø×¼±¸»ñÈ¡¶ÔÏóËø½øÈëÔËÐÐ״̬¡£
JVMÔÚÔËÐÐʱ½«Êý¾Ý»®·ÖΪÁË6¸öÇøÓòÀ´´æ´¢£¬¶ø²»½ö½öÊÇ´ó¼ÒÊìÖªµÄHeapÇøÓò
Ò» PC Register(PC¼Ä´æÆ÷)
PC¼Ä´æÆ÷ÊÇÒ»¿éºÜСµÄÄÚ´æÇøÓò£¬Ö÷Òª×÷ÓÃÊǼǼµ±Ç°Ïß³ÌËùÖ´ÐеÄ×Ö½ÚÂëµÄÐкš£×Ö½ÚÂë½âÊÍÆ÷¹¤×÷ʱ¾ÍÊÇͨ¹ý¸Ä±äµ±Ç°Ï̵߳ijÌÐò¼ÆÊýÆ÷ѡȡÏÂÒ»Ìõ×Ö½ÚÂëÖ¸ÁîÀ´¹¤×÷µÄ¡£ÈκηÖÖ§£¬Ñ»·£¬·½·¨µ÷Óã¬Åжϣ¬Òì³£´¦Àí£¬Ï̵߳ȴýÒÔ¼°»Ö¸´Ị̈߳¬µÝ¹éµÈµÈ¶¼ÊÇͨ¹ýÕâ¸ö¼ÆÊýÆ÷À´Íê³ÉµÄ¡£
ÓÉÓÚJava¶àÏß³ÌÊÇͨ¹ý½»ÌæÏß³ÌÂÖÁ÷Çл»²¢·ÖÅä´¦ÀíÆ÷ʱ¼äµÄ·½Ê½À´ÊµÏֵģ¬ÔÚÈκÎÒ»¸öÈ·¶¨µÄʱ¼äÀÔÚ´¦ÀíÆ÷µÄÒ»¸öÄÚºËÖ»»áÖ´ÐÐÒ»ÌõÏß³ÌÖеÄÖ¸Áî¡£
Òò´ËΪÁËÏ̵߳ȴý½áÊøÐèÒª»Ö¸´µ½ÕýÈ·µÄλÖÃÖ´ÐУ¬Ã¿ÌõÏ̶߳¼»áÓÐÒ»¸ö¶ÀÁ¢µÄ³ÌÐò¼ÆÊýÆ÷À´¼Ç¼µ±Ç°Ö¸ÁîµÄÐкš£¼ÆÊýÆ÷Ö®¼äÏ໥¶ÀÁ¢»¥²»Ó°Ï죬ÎÒÃdzÆÕâ¿éÄÚ´æÎª¡°Ïß³Ì˽ÓС±µÄÄÚ´æ¡£
Èç¹ûËùµ÷Óõķ½·¨ÎªnativeµÄ£¬ÔòPC¼Ä´æÆ÷Öв»´æ´¢ÈκÎÐÅÏ¢¡£
¶þ JVMÕ»
JVMÕ»ÊÇÏß³Ì˽Óеģ¬Ã¿¸öÏ̴߳´½¨µÄͬʱ¶¼»á´´½¨JVMÕ»£¬JVMÕ»Öдæ·ÅµÄΪµ±Ç°Ïß³ÌÖоֲ¿»ù±¾ÀàÐ͵ıäÁ¿£¨javaÖж¨ÒåµÄ°ËÖÖ»ù±¾ÀàÐÍ£ºboolean¡¢char¡¢byte¡¢short¡¢int¡¢long¡¢float¡¢double£©¡¢²¿·ÖµÄ·µ»Ø½á¹ûÒÔ¼°Stack Frame£¬
·Ç»ù±¾ÀàÐ͵ĶÔÏóÔÚJVMÕ»ÉϽö´æ·ÅÒ»¸öÖ¸Ïò¶ÑÉϵĵØÖ·£¬Òò´ËJavaÖлù±¾ÀàÐ͵ıäÁ¿ÊÇÖµ´«µÝ£¬¶ø·Ç»ù±¾ÀàÐ͵ıäÁ¿ÊÇÒýÓô«µÝ£¬Sun JDKµÄʵÏÖÖÐJVMÕ»µÄ¿Õ¼äÊÇÔÚÎïÀíÄÚ´æÉÏ·ÖÅäµÄ£¬¶ø²»ÊÇ´Ó¶ÑÉÏ·ÖÅä¡£
ÓÉÓÚJVMÕ»ÊÇÏß³Ì˽Óеģ¬Òò´ËÆäÔÚÄÚ´æ·ÖÅäÉϷdz£¸ßЧ£¬²¢ÇÒµ±Ïß³ÌÔËÐÐÍê±Ïºó£¬ÕâЩÄÚ´æÒ²¾Í±»×Ô¶¯»ØÊÕ¡£
µ±JVMÕ»µÄ¿Õ¼ä²»×ãʱ£¬»áÅ׳öStackOverflowErrorµÄ´íÎó£¬ÔÚSun JDKÖпÉÒÔͨ¹ý-XssÀ´Ö¸¶¨Õ»µÄ´óС
Èý ¶Ñ£¨Heap£©
HeapÊÇ´ó¼Ò×îΪÊìϤµÄÇøÓò£¬ËüÊÇJVMÓÃÀ´´æ´¢¶ÔÏóʵÀýÒÔ¼°Êý×éÖµµÄÇøÓò£¬¿ÉÒÔÈÏΪJavaÖÐËùÓÐͨ¹ýnew´´½¨µÄ¶ÔÏóµÄÄÚ´æ¶¼ÔÚ´Ë·ÖÅ䣬
HeapÖеĶÔÏóµÄÄÚ´æÐèÒªµÈ´ýGC½øÐлØÊÕ£¬HeapÔÚ32λµÄ²Ù×÷ϵͳÉÏ×î´óΪ2G£¬ÔÚ64λµÄ²Ù×÷ϵͳÉÏÔòûÓÐÏÞÖÆ£¬
Æä´óСͨ¹ý-XmsºÍ-XmxÀ´¿ØÖÆ£¬-XmsΪJVMÆô¶¯Ê±ÉêÇëµÄ×îСHeapÄڴ棬ĬÈÏΪÎïÀíÄÚ´æµÄ1/64µ«Ð¡ÓÚ1G£¬-XmxΪJVM¿ÉÉêÇëµÄ×î´óHeapÄڴ棬ĬÈÏΪÎïÀíÄÚ´æµÄ1/4£¬Ä¬Èϵ±¿ÕÓà¶ÑÄÚ´æÐ¡ÓÚ40%ʱ£¬JVM»áÔö´óHeapµÄ´óСµ½-XmxÖ¸¶¨µÄ´óС
£¬¿Éͨ¹ý-XX:MinHeapFreeRatio=À´Ö¸¶¨Õâ¸ö±ÈÀý£¬µ±¿ÕÓà¶ÑÄÚ´æ´óÓÚ70%ʱ£¬JVM»á½«HeapµÄ´óСÍù-XmsÖ¸¶¨µÄ´óСµ÷Õû£¬¿Éͨ¹ý-XX:MaxHeapFreeRatio=À´Ö¸¶¨Õâ¸ö±ÈÀý£¬
µ«¶ÔÓÚÔËÐÐϵͳ¶øÑÔ£¬ÎªÁ˱ÜÃâÆµ·±µÄHeap SizeµÄ´óС£¬Í¨³£¶¼»á½«-XmsºÍ-XmxµÄÖµÉè³ÉÒ»Ñù£¬Òò´ËÕâÁ½¸öÓÃÓÚµ÷Õû±ÈÀýµÄ²ÎÊýͨ³£ÊÇûÓõġ£ÆäʵjvmÖжÔÓÚ¶ÑÄÚ´æµÄ·ÖÅ䡢ʹÓᢹÜÀí¡¢ÊÕ¼¯µÈÓиüΪ¾«ÇɵÄÉè¼Æ£¬¾ßÌå¿ÉÒÔÔÚJVM¶ÑÄÚ´æ·ÖÎöÖнøÐÐÏêϸ½éÉÜ¡£
µ±¶ÑÖÐÐèҪʹÓõÄÄڴ泬¹ýÆäÔÊÐíµÄ´óСʱ£¬»áÅ׳öOutOfMemoryµÄ´íÎóÐÅÏ¢¡£
ËÄ ·½·¨ÇøÓò£¨MethodArea£©
·½·¨ÇøÓò´æ·ÅÁËËù¼ÓÔØµÄÀàµÄÐÅÏ¢£¨Ãû³Æ¡¢ÐÞÊηûµÈ£©¡¢ÀàÖеľ²Ì¬±äÁ¿¡¢ÀàÖж¨ÒåΪfinalÀàÐ͵ij£Á¿¡¢ÀàÖеÄFieldÐÅÏ¢¡¢ÀàÖеķ½·¨ÐÅÏ¢£¬
µ±¿ª·¢ÈËÔ±ÔÚ³ÌÐòÖÐͨ¹ýClass¶ÔÏóÖеÄgetName¡¢isInterfaceµÈ·½·¨À´»ñÈ¡ÐÅϢʱ£¬ÕâЩÊý¾Ý¶¼À´Ô´ÓÚ·½·¨ÇøÓò£¬¿É¼û·½·¨ÇøÓòµÄÖØÒªÐÔ
¡£Í¬Ñù£¬·½·¨ÇøÓòÒ²ÊÇÈ«¾Ö¹²ÏíµÄ£¬ËüÔÚÐéÄâ»úÆô¶¯Ê±ÔÚÒ»¶¨µÄÌõ¼þÏÂËüÒ²»á±»GC£¬µ±·½·¨ÇøÓòÐèҪʹÓõÄÄڴ泬¹ýÆäÔÊÐíµÄ´óСʱ£¬»áÅ׳öOutOfMemoryµÄ´íÎóÐÅÏ¢¡£
ÔÚSun JDKÖÐÕâ¿éÇøÓò¶ÔÓ¦µÄΪPermanetGeneration£¬ÓÖ³ÆÎª³Ö¾Ã´ú£¬Ä¬ÈÏΪ64M£¬¿Éͨ¹ý-XX:PermSizeÒÔ¼°-XX:MaxPermSizeÀ´Ö¸¶¨Æä´óС¡£
Îå ÔËÐÐʱ³£Á¿³Ø£¨RuntimeConstant Pool£©
ÀàËÆCÖеķûºÅ±í£¬´æ·ÅµÄΪÀàÖеĹ̶¨µÄ³£Á¿ÐÅÏ¢¡¢·½·¨ºÍFieldµÄÒýÓÃÐÅÏ¢µÈ£¬Æä¿Õ¼ä´Ó·½·¨ÇøÓòÖзÖÅä¡£Àà»ò½Ó¿ÚµÄ³£Á¿³ØÔÚ¸ÃÀàµÄclassÎļþ±»javaÐéÄâ»ú³É¹¦×°ÔØÊ±·ÖÅä¡£
Áù ±¾µØ·½·¨¶ÑÕ»£¨NativeMethod Stacks£©
JVM²ÉÓñ¾µØ·½·¨¶ÑÕ»À´Ö§³Önative·½·¨µÄÖ´ÐУ¬´ËÇøÓòÓÃÓڴ洢ÿ¸önative·½·¨µ÷ÓõÄ״̬
ÔÚJDK 1.2Ö®ºó£¬Java¶ÔÒýÓõĸÅÄî½øÐÐÁËÀ©³ä£¬½«ÒýÓ÷ÖΪǿÒýÓã¨Strong Reference£©¡¢ÈíÒýÓã¨Soft Reference£©¡¢ÈõÒýÓã¨Weak Reference£©¡¢ÐéÒýÓã¨Phantom Reference£©ËÄÖÖ£¬ÕâËÄÖÖÒýÓÃÇ¿¶ÈÒÀ´ÎÖð½¥¼õÈõ¡£
Ç¿ÒýÓþÍÊÇÖ¸ÔÚ³ÌÐò´úÂëÖ®ÖÐÆÕ±é´æÔڵģ¬ÀàËÆ¡°Object obj = new Object()¡±ÕâÀàµÄÒýÓã¬Ö»ÒªÇ¿ÒýÓû¹´æÔÚ£¬À¬»øÊÕ¼¯Æ÷ÓÀÔ¶²»»á»ØÊÕµô±»ÒýÓõĶÔÏó¡£
ÈíÒýÓÃÓÃÀ´ÃèÊöһЩ»¹ÓÐÓ㬵«²¢·Ç±ØÐèµÄ¶ÔÏó¡£¶ÔÓÚÈíÒýÓùØÁª×ŵĶÔÏó£¬ÔÚϵͳ½«Òª·¢ÉúÄÚ´æÒç³öÒ쳣֮ǰ£¬½«»á°ÑÕâЩ¶ÔÏóÁнø»ØÊÕ·¶Î§Ö®Öв¢½øÐеڶþ´Î»ØÊÕ¡£Èç¹ûÕâ´Î»ØÊÕ»¹ÊÇûÓÐ×ã¹»µÄÄڴ棬²Å»áÅ׳öÄÚ´æÒç³öÒì³£¡£
ÔÚJDK 1.2Ö®ºó£¬ÌṩÁËSoftReferenceÀàÀ´ÊµÏÖÈíÒýÓá£
ÈõÒýÓÃÒ²ÊÇÓÃÀ´ÃèÊö·Ç±ØÐè¶ÔÏóµÄ£¬µ«ÊÇËüµÄÇ¿¶È±ÈÈíÒýÓøüÈõһЩ£¬±»ÈõÒýÓùØÁªµÄ¶ÔÏóÖ»ÄÜÉú´æµ½ÏÂÒ»´ÎÀ¬»øÊÕ¼¯·¢Éú֮ǰ¡£µ±À¬»øÊÕ¼¯Æ÷¹¤×÷ʱ£¬ÎÞÂÛµ±Ç°ÄÚ´æÊÇ·ñ×ã¹»£¬¶¼»á»ØÊÕµôÖ»±»ÈõÒýÓùØÁªµÄ¶ÔÏó¡£
ÔÚJDK 1.2Ö®ºó£¬ÌṩÁËWeakReferenceÀàÀ´ÊµÏÖÈõÒýÓá£
ÐéÒýÓÃÒ²³ÆÎªÓÄÁéÒýÓûòÕß»ÃÓ°ÒýÓã¬ËüÊÇ×îÈõµÄÒ»ÖÖÒýÓùØÏµ¡£Ò»¸ö¶ÔÏóÊÇ·ñÓÐÐéÒýÓõĴæÔÚ£¬ÍêÈ«²»»á¶ÔÆäÉú´æÊ±¼ä¹¹³ÉÓ°Ï죬ҲÎÞ·¨Í¨¹ýÐéÒýÓÃÀ´È¡µÃÒ»¸ö¶ÔÏóʵÀý¡£
Ϊһ¸ö¶ÔÏóÉèÖÃÐéÒýÓùØÁªµÄΨһĿµÄ¾ÍÊÇÏ£ÍûÄÜÔÚÕâ¸ö¶ÔÏó±»ÊÕ¼¯Æ÷»ØÊÕʱÊÕµ½Ò»¸öϵͳ֪ͨ¡£ÔÚJDK 1.2Ö®ºó£¬ÌṩÁËPhantomReferenceÀàÀ´ÊµÏÖÐéÒýÓÃ
ÔÚJavaÖУ¬Êý×é±äÁ¿ÊÇÒýÓÃÀàÐ͵ıäÁ¿£¬Í¬Ê±ÒòΪJavaÊǵäÐ͵ľ²Ì¬ÓïÑÔ£¬Òò´ËËüµÄÊý×éÒ²ÊǾ²Ì¬µÄ£¬ËùÒÔÏëҪʹÓþͱØÐëÏȳõʼ»¯£¨ÎªÊý×é¶ÔÏóµÄÔªËØ·ÖÅä¿Õ¼ä£©¡£¶ÔÓÚJavaÊý×éµÄ³õʼ»¯£¬ÓÐÒÔÏÂÁ½ÖÖ·½Ê½:¾²Ì¬³õʼ»¯£º³õʼ»¯Ê±ÓɳÌÐòÔ±ÏÔʽָ¶¨Ã¿¸öÊý×éÔªËØµÄ³õʼֵ£¬ÓÉϵͳ¾ö¶¨Êý×鳤¶È¶¯Ì¬³õʼ»¯£º³õʼ»¯Ê±ÓɳÌÐòÔ±ÏÔʾµÄÖ¸¶¨Êý×éµÄ³¤¶È£¬ÓÉϵͳΪÊý¾Ýÿ¸öÔªËØ·ÖÅä³õʼֵ¾²Ì¬³õʼ»¯·½Ê½£¬³ÌÐòÔ±ËäȻûÓÐÖ¸¶¨Êý×鳤¶È£¬µ«ÊÇϵͳÒѾ×Ô¶¯°ïÎÒÃǸø·ÖÅäÁË£¬¶ø¶¯Ì¬³õʼ»¯·½Ê½£¬³ÌÐòÔ±ËäȻûÓÐÏÔʾµÄÖ¸¶¨³õʼ»¯Öµ£¬µ«ÊÇÒòΪJavaÊý×éÊÇÒýÓÃÀàÐ͵ıäÁ¿£¬ËùÒÔϵͳҲΪÿ¸öÔªËØ·ÖÅäÁ˳õʼ»¯Öµnull£¬µ±È»²»Í¬ÀàÐ͵ijõʼ»¯ÖµÒ²ÊDz»Ò»ÑùµÄ£¬¼ÙÉèÊÇ»ù±¾ÀàÐÍintÀàÐÍ£¬ÄÇôΪϵͳ·ÖÅäµÄ³õʼ»¯ÖµÒ²ÊǶÔÓ¦µÄĬÈÏÖµ0
Éè¼ÆÄ£Ê½µÄ·ÖÀà×ÜÌåÀ´ËµÉè¼ÆÄ£Ê½·ÖΪÈý´óÀࣺ´´½¨ÐÍģʽ£¬¹²ÎåÖÖ£º¹¤³§·½·¨Ä£Ê½¡¢³éÏ󹤳§Ä£Ê½¡¢µ¥Àýģʽ¡¢½¨ÔìÕßģʽ¡¢ÔÐÍģʽ¡£½á¹¹ÐÍģʽ£¬¹²ÆßÖÖ£ºÊÊÅäÆ÷ģʽ¡¢×°ÊÎÆ÷ģʽ¡¢´úÀíģʽ¡¢Íâ¹Ûģʽ¡¢ÇŽÓģʽ¡¢×éºÏģʽ¡¢ÏíԪģʽ¡£ÐÐΪÐÍģʽ£¬¹²Ê®Ò»ÖÖ£º²ßÂÔģʽ¡¢Ä£°å·½·¨Ä£Ê½¡¢¹Û²ìÕßģʽ¡¢µü´ú×Óģʽ¡¢ÔðÈÎÁ´Ä£Ê½¡¢ÃüÁîģʽ¡¢±¸Íü¼ģʽ¡¢×´Ì¬Ä£Ê½¡¢·ÃÎÊÕßģʽ¡¢ÖнéÕßģʽ¡¢½âÊÍÆ÷ģʽ¡£Æäʵ»¹ÓÐÁ½Àࣺ²¢·¢ÐÍģʽºÍÏ̳߳ØÄ£Ê½
springmvcÊÇ»ùÓÚservletµÄǰ¶Ë¿ØÖÆ¿ò¼Ü,ºËÐÄÊÇiocºÍaop(»ùÓÚspringʵÏÖ)ºËÐļܹ¹µÄ¾ßÌåÁ÷³Ì²½ÖèÈçÏ£º1¡¢Ê×ÏÈÓû§·¢ËÍÇëÇ󡪡ª>DispatcherServlet£¬Ç°¶Ë¿ØÖÆÆ÷ÊÕµ½ÇëÇóºó×Ô¼º²»½øÐд¦Àí£¬¶øÊÇίÍиøÆäËûµÄ½âÎöÆ÷½øÐд¦Àí£¬×÷Ϊͳһ·ÃÎʵ㣬½øÐÐÈ«¾ÖµÄÁ÷³Ì¿ØÖÆ£»2¡¢DispatcherServlet¡ª¡ª>HandlerMapping£¬ HandlerMapping ½«»á°ÑÇëÇóÓ³ÉäΪHandlerExecutionChain ¶ÔÏ󣨰üº¬Ò»¸öHandler ´¦ÀíÆ÷£¨Ò³Ãæ¿ØÖÆÆ÷£©¶ÔÏó¡¢¶à¸öHandlerInterceptor À¹½ØÆ÷£©¶ÔÏó£¬Í¨¹ýÕâÖÖ²ßÂÔģʽ£¬ºÜÈÝÒ×Ìí¼ÓеÄÓ³Éä²ßÂÔ£»3¡¢DispatcherServlet¡ª¡ª>HandlerAdapter£¬HandlerAdapter ½«»á°Ñ´¦ÀíÆ÷°üװΪÊÊÅäÆ÷£¬´Ó¶øÖ§³Ö¶àÖÖÀàÐ͵Ĵ¦ÀíÆ÷£¬¼´ÊÊÅäÆ÷Éè¼ÆÄ£Ê½µÄÓ¦Ó㬴ӶøºÜÈÝÒ×Ö§³ÖºÜ¶àÀàÐ͵Ĵ¦ÀíÆ÷£»4¡¢HandlerAdapter¡ª¡ª>´¦ÀíÆ÷¹¦ÄÜ´¦Àí·½·¨µÄµ÷Óã¬HandlerAdapter ½«»á¸ù¾ÝÊÊÅäµÄ½á¹ûµ÷ÓÃÕæÕýµÄ´¦ÀíÆ÷µÄ¹¦ÄÜ´¦Àí·½·¨£¬Íê³É¹¦ÄÜ´¦Àí£»²¢·µ»ØÒ»¸öModelAndView ¶ÔÏ󣨰üº¬Ä£ÐÍÊý¾Ý¡¢Âß¼ÊÓͼÃû£©£»5¡¢ModelAndViewµÄÂß¼ÊÓͼÃû¡ª¡ª> ViewResolver£¬ ViewResolver ½«°ÑÂß¼ÊÓͼÃû½âÎöΪ¾ßÌåµÄView£¬Í¨¹ýÕâÖÖ²ßÂÔģʽ£¬ºÜÈÝÒ׸ü»»ÆäËûÊÓͼ¼¼Êõ£»6¡¢View¡ª¡ª>äÖȾ£¬View»á¸ù¾Ý´«½øÀ´µÄModelÄ£ÐÍÊý¾Ý½øÐÐäÖȾ£¬´Ë´¦µÄModelʵ¼ÊÊÇÒ»¸öMapÊý¾Ý½á¹¹£¬Òò´ËºÜÈÝÒ×Ö§³ÖÆäËûÊÓͼ¼¼Êõ£»7¡¢·µ»Ø¿ØÖÆÈ¨¸øDispatcherServlet£¬ÓÉDispatcherServlet·µ»ØÏìÓ¦¸øÓû§£¬µ½´ËÒ»¸öÁ÷³Ì½áÊøIOC¿ØÖÆ·´×ªµÄʵÏÖÊÇ»ùÓÚspringµÄbean¹¤³§,ͨ¹ý»ñȡҪ´´½¨µÄÀàµÄclassÈ«ÏÞ¶¨Ãû³Æ,·´Éä´´½¨¶ÔÏó
ʵÏÖAOPµÄ¼¼Êõ£¬Ö÷Òª·ÖΪÁ½´óÀࣺһÊDzÉÓö¯Ì¬´úÀí¼¼Êõ£¬ÀûÓýØÈ¡ÏûÏ¢µÄ·½Ê½£¬¶Ô¸ÃÏûÏ¢½øÐÐ×°ÊΣ¬ÒÔÈ¡´úÔÓжÔÏóÐÐΪµÄÖ´ÐУ»¶þÊDzÉÓþ²Ì¬Ö¯ÈëµÄ·½Ê½£¬ÒýÈëÌØ¶¨µÄÓï·¨´´½¨¡°·½Ã桱£¬´Ó¶øÊ¹µÃ±àÒëÆ÷¿ÉÒÔÔÚ±àÒëÆÚ¼äÖ¯ÈëÓйء°·½Ã桱µÄ´úÂ롣ͨ¹ý·´Éä´´½¨¶¯Ì¬´úÀí¶ÔÏó,À¹½Ø·½·¨Ö´ÐÐ,ÔÚ½«×Ô¼ºÐèÒª¶îÍâÖ´ÐеĴúÂë¼ÓÈû½øÀ´Ö´ÐÐ
ͨ¹ý»ñÈ¡µ½ËùÓеķµ»ØµÄÁÐÃû×Ö,·´Éä»ñȡĿ±ê¶ÔÏóÖÐÕâ¸öÃû×Ö¶ÔÓ¦µÄÊôÐÔ,µ÷ÓÃset·½·¨,½øÐи³Öµ
,¶à̬ҪÓж¯Ì¬°ó¶¨,·ñÔò¾Í²»ÊǶà̬,·½·¨ÖØÔØÒ²²»ÊǶà̬(ÒòΪ·½·¨ÖØÔØÊDZàÒëÆÚ¾ö¶¨ºÃµÄ,ûÓкóÆÚÒ²¾ÍÊÇÔËÐÐÆÚµÄ¶¯Ì¬°ó¶¨)
µ±Âú×ãÕâÈý¸öÌõ¼þ 1.Óм̳Р2. ÓÐÖØÐ´ 3. ÒªÓи¸ÀàÒýÓÃÖ¸Ïò×ÓÀà¶ÔÏó
1¡¢ÖØÒªÐÔ£ºÔÚJavaÓïÑÔÖУ¬ abstract class ºÍinterface ÊÇÖ§³Ö³éÏóÀඨÒåµÄÁ½ÖÖ»úÖÆ¡£ÕýÊÇÓÉÓÚÕâÁ½ÖÖ»úÖÆµÄ´æÔÚ£¬²Å¸³ÓèÁËJavaÇ¿´óµÄ ÃæÏò¶ÔÏóÄÜÁ¦¡£
2¡¢¼òµ¥¡¢¹æ·¶ÐÔ£ºÈç¹ûÒ»¸öÏîÄ¿±È½ÏÅÓ´ó£¬ÄÇô¾ÍÐèÒªÒ»¸öÄÜÀíÇåËùÓÐÒµÎñµÄ¼Ü¹¹Ê¦À´¶¨ÒåһЩÖ÷ÒªµÄ½Ó¿Ú£¬ÕâЩ½Ó¿Ú²»½ö¸æËß¿ª·¢ÈËÔ±ÄãÐèҪʵÏÖÄÇЩҵÎñ£¬¶øÇÒÒ²½«ÃüÃû¹æ·¶ÏÞ֯סÁË£¨·ÀֹһЩ¿ª·¢ÈËÔ±Ëæ±ãÃüÃûµ¼Ö±ðµÄ³ÌÐòÔ±ÎÞ·¨¿´Ã÷°×£©¡£
3¡¢Î¬»¤¡¢ÍØÕ¹ÐÔ£º±ÈÈçÄãÒª×öÒ»¸ö»°å³ÌÐò£¬ÆäÖÐÀïÃæÓÐÒ»¸öÃæ°åÀ࣬Ö÷Òª¸ºÔð»æ»¹¦ÄÜ£¬È»ºóÄã¾ÍÕâÑù¶¨ÒåÁËÕâ¸öÀà¡£
¿ÉÊÇÔÚ²»¾Ã½«À´£¬ÄãͻȻ·¢ÏÖÕâ¸öÀàÂú×ã²»ÁËÄãÁË£¬È»ºóÄãÓÖÒªÖØÐÂÉè¼ÆÕâ¸öÀ࣬¸üÔã¸âÊÇÄã¿ÉÄÜÒª·ÅÆúÕâ¸öÀ࣬ÄÇôÆäËûµØ·½¿ÉÄÜÓÐÒýÓÃËû£¬ÕâÑùÐÞ¸ÄÆðÀ´ºÜÂé·³¡£
Èç¹ûÄãÒ»¿ªÊ¼¶¨ÒåÒ»¸ö½Ó¿Ú£¬°Ñ»æÖƹ¦ÄÜ·ÅÔÚ½Ó¿ÚÀȻºó¶¨ÒåÀàʱʵÏÖÕâ¸ö½Ó¿Ú£¬È»ºóÄãÖ»ÒªÓÃÕâ¸ö½Ó¿ÚÈ¥ÒýÓÃʵÏÖËüµÄÀà¾ÍÐÐÁË£¬ÒÔºóÒª»»µÄ»°Ö»²»¹ýÊÇÒýÓÃÁíÒ»¸öÀà¶øÒÑ£¬ÕâÑù¾Í´ïµ½Î¬»¤¡¢ÍØÕ¹µÄ·½±ãÐÔ¡£
4¡¢°²È«¡¢ÑÏÃÜÐÔ£º½Ó¿ÚÊÇʵÏÖÈí¼þËÉñîºÏµÄÖØÒªÊֶΣ¬ËüÃèÐðÁËϵͳ¶ÔÍâµÄËùÓзþÎñ£¬¶ø²»Éæ¼°ÈκξßÌåµÄʵÏÖϸ½Ú¡£ÕâÑù¾Í±È½Ï°²È«¡¢ÑÏÃÜһЩ£¨Ò»°ãÈí¼þ·þÎñÉÌ¿¼ÂǵıȽ϶ࣩ¡£
HTTPS£¨Secure Hypertext Transfer Protocol£©°²È«³¬Îı¾´«ÊäÐÒ飺
ËüÊÇÒ»¸ö°²È«Í¨ÐÅͨµÀ£¬Ëü»ùÓÚHTTP¿ª·¢£¬ÓÃÓÚÔÚ¿Í»§¼ÆËã»úºÍ·þÎñÆ÷Ö®¼ä½»»»ÐÅÏ¢£¬ËüʹÓð²È«Ì×½Ó×Ö²ã(SSL)½øÐÐÐÅÏ¢½»»»£¬¼òµ¥À´ËµËüÊÇHTTPµÄ°²È«°æ¡£
ËüÊÇÓÉNetscape¿ª·¢²¢ÄÚÖÃÓÚÆää¯ÀÀÆ÷ÖУ¬ÓÃÓÚ¶ÔÊý¾Ý½øÐÐѹËõºÍ½âѹ²Ù×÷£¬²¢·µ»ØÍøÂçÉÏ´«ËͻصĽá¹û¡£HTTPSʵ¼ÊÉÏÓ¦ÓÃÁËNetscapeµÄ°²È«È«Ì×½Ó×ֲ㣨SSL£©×÷ΪHTTPÓ¦ÓòãµÄ×Ӳ㡣
£¨HTTPSʹÓö˿Ú443£¬¶ø²»ÊÇÏóHTTPÄÇÑùʹÓö˿Ú80À´ºÍTCP/IP½øÐÐͨÐÅ¡££©SSLʹÓÃ40 λ¹Ø¼ü×Ö×÷ΪRC4Á÷¼ÓÃÜËã·¨£¬Õâ¶ÔÓÚÉÌÒµÐÅÏ¢µÄ¼ÓÃÜÊǺÏÊʵġ£
HTTPSºÍSSLÖ§³ÖʹÓÃX.509Êý×ÖÈÏÖ¤£¬Èç¹ûÐèÒªµÄ»°Óû§¿ÉÒÔÈ·ÈÏ·¢ËÍÕßÊÇË¡£×ܵÄÀ´Ëµ£¬HTTPSÐÒéÊÇÓÉSSL+HTTPÐÒé¹¹½¨µÄ¿É½øÐмÓÃÜ´«Êä¡¢Éí·ÝÈÏÖ¤µÄÍøÂçÐÒéÒª±ÈhttpÐÒ鰲ȫ¡£
ÔÚURLǰ¼Óhttps://ǰ׺±íÃ÷ÊÇÓÃSSL¼ÓÃܵģ¬ÄãµÄµçÄÔÓë·þÎñÆ÷Ö®¼äÊÕ·¢µÄÐÅÏ¢´«Ê佫¸ü¼Ó°²È«¡£ Web·þÎñÆ÷ÆôÓÃSSLÐèÒª»ñµÃÒ»¸ö·þÎñÆ÷Ö¤Êé²¢½«¸ÃÖ¤ÊéÓëҪʹÓÃSSLµÄ·þÎñÆ÷°ó¶¨¡£
HTTPSºÍHTTPµÄÇø±ð£º
httpsÐÒéÐèÒªµ½caÉêÇëÖ¤Ê飬һ°ãÃâ·ÑÖ¤ÊéºÜÉÙ£¬ÐèÒª½»·Ñ¡£
httpÊdz¬Îı¾´«ÊäÐÒ飬ÐÅÏ¢ÊÇÃ÷ÎÄ´«Ê䣬https ÔòÊǾßÓа²È«ÐÔµÄssl¼ÓÃÜ´«ÊäÐÒé¡£
httpºÍhttpsʹÓõÄÊÇÍêÈ«²»Í¬µÄÁ¬½Ó·½Ê½ÓõĶ˿ÚÒ²²»Ò»Ñù,ǰÕßÊÇ80,ºóÕßÊÇ443¡£
httpµÄÁ¬½ÓºÜ¼òµ¥,ÊÇÎÞ״̬µÄ¡£
HTTPSÐÒéÊÇÓÉSSL+HTTPÐÒé¹¹½¨µÄ¿É½øÐмÓÃÜ´«Êä¡¢Éí·ÝÈÏÖ¤µÄÍøÂçÐÒé Òª±ÈhttpÐÒ鰲ȫ¡£
HTTPS½â¾öµÄÎÊÌ⣺
1 . ÐÅÈÎÖ÷»úµÄÎÊÌâ.
²ÉÓÃhttps µÄserver ±ØÐë´ÓCA ÉêÇëÒ»¸öÓÃÓÚÖ¤Ã÷·þÎñÆ÷ÓÃ;ÀàÐ͵ÄÖ¤Êé. ¸ÄÖ¤ÊéÖ»ÓÐÓÃÓÚ¶ÔÓ¦µÄserver µÄʱºò,¿Í»§¶È²ÅÐÅÈδËÖ÷»ú. ËùÒÔĿǰËùÓеÄÒøÐÐÏµÍ³ÍøÕ¾,¹Ø¼ü²¿·ÖÓ¦Óö¼ÊÇhttps µÄ.
¿Í»§Í¨¹ýÐÅÈθÃÖ¤Êé,´Ó¶øÐÅÈÎÁ˸ÃÖ÷»ú. ÆäʵÕâÑù×öЧÂʺܵÍ,µ«ÊÇÒøÐиü²àÖØ°²È«. ÕâÒ»µã¶ÔÎÒÃÇûÓÐÈκÎÒâÒå,ÎÒÃǵÄserver ,²ÉÓõÄÖ¤Êé²»¹Ü×Ô¼ºissue »¹ÊÇ´Ó¹«Öڵĵط½issue, ¿Í»§¶Ë¶¼ÊÇ×Ô¼ºÈË,ËùÒÔÎÒÃÇÒ²¾Í¿Ï¶¨ÐÅÈθÃserver.
2 . ͨѶ¹ý³ÌÖеÄÊý¾ÝµÄйÃܺͱ»´Ü¸Ä
1) Ò»°ãÒâÒåÉϵÄhttps, ¾ÍÊÇ server ÓÐÒ»¸öÖ¤Êé.
a) Ö÷ҪĿµÄÊDZ£Ö¤server ¾ÍÊÇËûÉù³ÆµÄserver. Õâ¸ö¸úµÚÒ»µãÒ»Ñù.
b) ·þÎñ¶ËºÍ¿Í»§¶ËÖ®¼äµÄËùÓÐͨѶ,¶¼ÊǼÓÃܵÄ.
i. ¾ßÌå½²,Êǿͻ§¶Ë²úÉúÒ»¸ö¶Ô³ÆµÄÃÜÔ¿,ͨ¹ýserver µÄÖ¤ÊéÀ´½»»»ÃÜÔ¿. Ò»°ãÒâÒåÉϵÄÎÕÊÖ¹ý³Ì.
ii. ËùÓеÄÐÅÏ¢ÍùÀ´¾Í¶¼ÊǼÓÃܵÄ. µÚÈý·½¼´Ê¹½Ø»ñ,ҲûÓÐÈκÎÒâÒå.ÒòΪËûûÓÐÃÜÔ¿. µ±È»´Ü¸ÄÒ²¾ÍûÓÐʲôÒâÒåÁË.
2). ÉÙÐí¶Ô¿Í»§¶ËÓÐÒªÇóµÄÇé¿öÏÂ,»áÒªÇó¿Í»§¶ËÒ²±ØÐëÓÐÒ»¸öÖ¤Êé.
a) ÕâÀï¿Í»§¶ËÖ¤Êé,Æäʵ¾ÍÀàËÆ±íʾ¸öÈËÐÅÏ¢µÄʱºò,³ýÁËÓû§Ãû/ÃÜÂë, »¹ÓÐÒ»¸öCA ÈÏÖ¤¹ýµÄÉí·Ý. ӦΪ¸öÈËÖ¤ÊéÒ»°ãÀ´Ëµ±ðÈËÎÞ·¨Ä£ÄâµÄ,ËùÓÐÕâÑùÄܹ»¸üÉîµÄÈ·ÈÏ×Ô¼ºµÄÉí·Ý.
b) ĿǰÉÙÊý¸öÈËÒøÐеÄרҵ°æÊÇÕâÖÖ×ö·¨,¾ßÌåÖ¤Êé¿ÉÄÜÊÇÄÃUÅÌ×÷Ϊһ¸ö±¸·ÝµÄÔØÌå.
3 .HTTPS Ò»¶¨ÊÇ·±ËöµÄ.
a) ±¾À´¼òµ¥µÄhttpÐÒé,Ò»¸ögetÒ»¸öresponse. ÓÉÓÚhttps Òª»¹ÃÜÔ¿ºÍÈ·ÈϼÓÃÜËã·¨µÄÐèÒª.µ¥ÎÕÊÖ¾ÍÐèÒª6/7 ¸öÍù·µ.
i. ÈκÎÓ¦ÓÃÖÐ,¹ý¶àµÄround trip ¿Ï¶¨Ó°ÏìÐÔÄÜ.
b) ½ÓÏÂÀ´²ÅÊǾßÌåµÄhttpÐÒé,ÿһ´ÎÏìÓ¦»òÕßÇëÇó, ¶¼ÒªÇó¿Í»§¶ËºÍ·þÎñ¶Ë¶Ô»á»°µÄÄÚÈÝ×ö¼ÓÃÜ/½âÃÜ.
i. ¾¡¹Ü¶Ô³Æ¼ÓÃÜ/½âÃÜЧÂʱȽϸß,¿ÉÊÇÈÔȻҪÏûºÄ¹ý¶àµÄCPU,Ϊ´ËÓÐרÃŵÄSSL оƬ. Èç¹ûCPU ÐÅÄܱȽϵ͵ϰ,¿Ï¶¨»á½µµÍÐÔÄÜ,´Ó¶ø²»ÄÜserve ¸ü¶àµÄÇëÇó.
ii. ¼ÓÃܺóÊý¾ÝÁ¿µÄÓ°Ïì. ËùÒÔ£¬²Å»á³öÏÖÄÇô¶àµÄ°²È«ÈÏÖ¤Ìáʾ
TCP/IPÐÒé´ØÊÇInternetµÄ»ù´¡£¬Ò²Êǵ±½ñ×îÁ÷ÐеÄ×éÍøÐÎʽ¡£TCP/IPÊÇÒ»×éÐÒéµÄ´úÃû´Ê£¬°üÀ¨Ðí¶à±ðµÄÐÒ飬×é³ÉÁËTCP/IPÐÒé´Ø¡£
ÆäÖбȽÏÖØÒªµÄÓÐSLIPÐÒé¡¢PPPÐÒé¡¢IPÐÒé¡¢ICMPÐÒé¡¢ARPÐÒé¡¢TCPÐÒé¡¢UDPÐÒé¡¢FTPÐÒé¡¢DNSÐÒé¡¢SMTPÐÒéµÈ¡£TCP/IPÐÒé²¢²»ÍêÈ«·ûºÏOSIµÄÆß²ã²Î¿¼Ä£ÐÍ¡£
´«Í³µÄ¿ª·Åʽϵͳ»¥Á¬²Î¿¼Ä£ÐÍ£¬ÊÇÒ»ÖÖͨÐÅÐÒéµÄ7²ã³éÏóµÄ²Î¿¼Ä£ÐÍ£¬ÆäÖÐÿһ²ãÖ´ÐÐÄ³Ò»ÌØ¶¨ÈÎÎñ¡£¸ÃÄ£Ð͵ÄÄ¿µÄÊÇʹ¸÷ÖÖÓ²¼þÔÚÏàͬµÄ²ã´ÎÉÏÏ໥ͨÐÅ¡£
¶øTCP/IPͨѶÐÒé²ÉÓÃÁË4²ãµÄ²ã¼¶½á¹¹£¬Ã¿Ò»²ã¶¼ºô½ÐËüµÄÏÂÒ»²ãËùÌṩµÄÍøÂçÀ´Íê³É×Ô¼ºµÄÐèÇó
SLIPÐÒé±à¼
SLIPÌṩÔÚ´®ÐÐͨÐÅÏß·ÉÏ·â×°IP·Ö×éµÄ¼òµ¥·½·¨£¬Ê¹Ô¶³ÌÓû§Í¨¹ýµç»°ÏߺÍMODEMÄÜ·½±ãµØ½ÓÈëTCP/IPÍøÂç¡£SLIPÊÇÒ»ÖÖ¼òµ¥µÄ×éÖ¡·½Ê½£¬µ«Ê¹ÓÃʱ»¹´æÔÚһЩÎÊÌâ¡£
Ê×ÏÈ£¬SLIP²»Ö§³ÖÔÚÁ¬½Ó¹ý³ÌÖеĶ¯Ì¬IPµØÖ··ÖÅ䣬ͨÐÅË«·½±ØÐëÊÂÏȸæÖª¶Ô·½IPµØÖ·£¬Õâ¸øÃ»Óй̶¨IPµØÖ·µÄ¸öÈËÓû§ÉÏINTERNETÍø´øÀ´Á˺ܴóµÄ²»±ã¡£
Æä´Î£¬SLIPÖ¡ÖÐÎÞУÑé×ֶΣ¬Òò´ËÁ´Â·²ãÉÏÎÞ·¨¼ì²â³ö²î´í£¬±ØÐëÓÉÉϲãʵÌå»ò¾ßÓоÀ´íÄÜÁ¦MODEMÀ´½â¾ö´«Êä²î´íÎÊÌâ¡£
PPPÐÒé±à¼
ΪÁ˽â¾öSLIP´æÔÚµÄÎÊÌ⣬ÔÚ´®ÐÐͨÐÅÓ¦ÓÃÖÐÓÖ¿ª·¢ÁËPPPÐÒé¡£PPPÐÒéÊÇÒ»ÖÖÓÐЧµÄµã¶ÔµãͨÐÅÐÒ飬ËüÓÉ´®ÐÐͨÐÅÏß·ÉϵÄ×éÖ¡·½Ê½£¬ÓÃÓÚ½¨Á¢¡¢ÅäÖÆ¡¢²âÊԺͲð³ýÊý¾ÝÁ´Â·µÄÁ´Â·¿ØÖÆÐÒéLCP¼°Ò»×éÓÃÒÔÖ§³Ö²»Í¬ÍøÂç²ãÐÒéµÄÍøÂç¿ØÖÆÐÒéNCPsÈý²¿·Ö×é³É¡£
PPPÖеÄLCPÐÒéÌṩÁËͨÐÅË«·½½øÐвÎÊýÐÉ̵ÄÊֶΣ¬²¢ÇÒÌṩÁËÒ»×éNCPsÐÒ飬ʹµÃPPP¿ÉÒÔÖ§³Ö¶àÖÖÍøÂç²ãÐÒ飬ÈçIP,IPX,OSIµÈ¡£ÁíÍ⣬֧³ÖIPµÄNCPÌṩÁËÔÚ½¨Á¢Á´½Óʱ¶¯Ì¬·ÖÅäIPµØÖ·µÄ¹¦ÄÜ£¬½â¾öÁ˸öÈËÓû§ÉÏINTERNETÍøµÄÎÊÌâ¡£
IPÐÒé±à¼
¼´»¥ÁªÍøÐÒé(Internet Protocol)£¬Ëü½«¶à¸öÍøÂçÁ¬³ÉÒ»¸ö»¥ÁªÍø£¬¿ÉÒ԰Ѹ߲ãµÄÊý¾ÝÒÔ¶à¸öÊý¾Ý°üµÄÐÎʽͨ¹ý»¥ÁªÍø·Ö·¢³öÈ¥¡£IPµÄ»ù±¾ÈÎÎñÊÇͨ¹ý»¥ÁªÍø´«ËÍÊý¾Ý°ü£¬¸÷¸öIPÊý¾Ý°üÖ®¼äÊÇÏ໥¶ÀÁ¢µÄ¡£
ICMPÐÒé±à¼
¼´»¥ÁªÍø¿ØÖƱ¨ÎÄÐÒé¡£´ÓIP»¥ÁªÍøÐÒéµÄ¹¦ÄÜ£¬¿ÉÒÔÖªµÀIP ÌṩµÄÊÇÒ»ÖÖ²»¿É¿¿µÄÎÞÁ¬½Ó±¨ÎÄ·Ö×é´«ËÍ·þÎñ¡£
Èô·ÓÉÆ÷»òÖ÷»ú·¢Éú¹ÊÕÏÊ±ÍøÂç×èÈû£¬¾ÍÐèҪ֪ͨ·¢ËÍÖ÷»ú²ÉÈ¡ÏàÓ¦´ëÊ©¡£ÎªÁËʹ»¥ÁªÍøÄܱ¨¸æ²î´í£¬»òÌṩÓйØÒâÍâÇé¿öµÄÐÅÏ¢£¬ÔÚIP²ã¼ÓÈëÁËÒ»ÀàÌØÊâÓÃ;µÄ±¨ÎÄ»úÖÆ£¬¼´ICMP¡£
·Ö×é½ÓÊÕ·½ÀûÓÃICMPÀ´Í¨ÖªIPÄ£¿é·¢ËÍ·½£¬½øÐбØÐèµÄÐ޸ġ£ICMPͨ³£ÊÇÓÉ·¢ÏÖ±¨ÎÄÓÐÎÊÌâµÄÕ¾²úÉúµÄ£¬ÀýÈç¿ÉÓÉÄ¿µÄÖ÷»ú»òÖмÌ·ÓÉÆ÷À´·¢ÏÖÎÊÌâ²¢²úÉúµÄICMP¡£
Èç¹ûÒ»¸ö·Ö×é²»ÄÜ´«ËÍ£¬ICMP±ã¿ÉÒÔ±»ÓÃÀ´¾¯¸æ·Ö×éÔ´£¬ËµÃ÷ÓÐÍøÂ磬Ö÷»ú»ò¶Ë¿Ú²»¿É´ï¡£ICMPÒ²¿ÉÒÔÓÃÀ´±¨¸æÍøÂç×èÈû¡£
ARPÐÒé±à¼
¼´µØÖ·×ª»»ÐÒé¡£ÔÚTCP/IPÍøÂç»·¾³Ï£¬Ã¿¸öÖ÷»ú¶¼·ÖÅäÁËÒ»¸ö32λµÄIPµØÖ·£¬ÕâÖÖ»¥ÁªÍøµØÖ·ÊÇÔÚÍø¼Ê·¶Î§±êʶÖ÷»úµÄÒ»ÖÖÂß¼µØÖ·¡£ÎªÁËÈñ¨ÎÄÔÚÎïÀíÍøÉÏ´«ËÍ£¬±ØÐëÖªµÀ±Ë´ËµÄÎïÀíµØÖ·¡£
ÕâÑù¾Í´æÔÚ°Ñ»¥ÁªÍøµØÖ·±ä»»³ÉÎïÀíµØÖ·µÄת»»ÎÊÌâ¡£Õâ¾ÍÐèÒªÔÚÍøÂç²ãÓÐÒ»×é·þÎñ½« IPµØÖ·×ª»»ÎªÏàÓ¦ÎïÀíÍøÂçµØÖ·£¬Õâ×éÐÒé¼´ARP¡£
TCPÐÒé±à¼
¼´´«Êä¿ØÖÆÐÒ飬ËüÌṩµÄÊÇÒ»ÖÖ¿É¿¿µÄÊý¾ÝÁ÷·þÎñ¡£µ±´«ËÍÊܲî´í¸ÉÈŵÄÊý¾Ý£¬»ò¾Ù³öÍøÂç¹ÊÕÏ£¬»òÍøÂ縺ºÉÌ«ÖØ¶øÊ¹Íø¼Ê»ù±¾´«Êäϵͳ²»ÄÜÕý³£¹¤×÷ʱ£¬¾ÍÐèҪͨ¹ýÆäËûµÄÐÒéÀ´±£Ö¤Í¨ÐŵĿɿ¿¡£
TCP¾ÍÊÇÕâÑùµÄÐÒé¡£TCP²ÉÓá°´øÖØ´«µÄ¿Ï¶¨È·ÈÏ¡±¼¼ÊõÀ´ÊµÏÖ´«ÊäµÄ¿É¿¿ÐÔ¡£²¢Ê¹Óá°»¬¶¯´°¿Ú¡±µÄÁ÷Á¿¿ØÖÆ»úÖÆÀ´Ìá¸ßÍøÂçµÄÍÌÍÂÁ¿¡£TCPͨÐŽ¨Á¢ÊµÏÖÁËÒ»ÖÖ¡°Ðéµç·¡±µÄ¸ÅÄî¡£
Ë«·½Í¨ÐÅ֮ǰ£¬ÏȽ¨Á¢Ò»ÌõÁ´½ÓÈ»ºóË«·½¾Í¿ÉÒÔÔÚÆäÉÏ·¢ËÍÊý¾ÝÁ÷¡£ÕâÖÖÊý¾Ý½»»»·½Ê½ÄÜÌá¸ßЧÂÊ£¬µ«ÊÂÏȽ¨Á¢Á¬½ÓºÍʺó²ð³ýÁ¬½ÓÐèÒª¿ªÏú¡£
UDPÐÒé±à¼
¼´Óû§Êý¾Ý°üÐÒ飬ËüÊǶÔIPÐÒé×éµÄÀ©³ä£¬ËüÔö¼ÓÁËÒ»ÖÖ»úÖÆ£¬·¢ËÍ·½¿ÉÒÔÇø·Öһ̨¼ÆËã»úÉϵĶà¸ö½ÓÊÕÕß¡£Ã¿¸öUDP±¨ÎijýÁ˰üº¬Êý¾ÝÍ⻹Óб¨ÎĵÄÄ¿µÄ¶Ë¿ÚµÄ±àºÅºÍ±¨ÎÄÔ´¶Ë¿ÚµÄ±àºÅ£¬´Ó¶øÊ¹UDPÈí¼þ¿ÉÒ԰ѱ¨ÎĵÝË͸øÕýÈ·µÄ½ÓÊÕÕߣ¬È»ºó½ÓÊÕÕßÒª·¢³öÒ»¸öÓ¦´ð¡£
ÓÉÓÚUDPµÄÕâÖÖÀ©³ä£¬Ê¹µÃÔÚÁ½¸öÓû§½ø³ÌÖ®¼äµÝËÍÊý¾Ý°ü³ÉΪ¿ÉÄÜ¡£ÎÒÃÇÆµ·±Ê¹ÓõÄOICQÈí¼þÕýÊÇ»ùÓÚUDPÐÒéºÍÕâÖÖ»úÖÆ¡£
FTPÐÒé±à¼
¼´Îļþ´«ÊäÐÒ飬ËüÊÇÍø¼ÊÌṩµÄÓÃÓÚ·ÃÎÊÔ¶³Ì»úÆ÷µÄÐÒ飬ËüʹÓû§¿ÉÒÔÔÚ±¾µØ»úÓëÔ¶³Ì»úÖ®¼ä½øÐÐÓйØÎļþµÄ²Ù×÷¡£FTP¹¤×÷ʱ½¨Á¢Á½ÌõTCPÁ´½Ó£¬·Ö±ðÓÃÓÚ´«ËÍÎļþºÍÓÃÓÚ´«ËÍ¿ØÖÆ¡£
FTP²ÉÓÿͻ§/·þÎñÆ÷ģʽ?Ëü°üº¬¿Í»§FTPºÍ·þÎñÆ÷FTP¡£¿Í»§FTPÆô¶¯´«Ë͹ý³Ì£¬¶ø·þÎñÆ÷FTP¶ÔÆä×÷³öÓ¦´ð¡£
DNSÐÒé±à¼
¼´ÓòÃû·þÎñÐÒ飬ËüÌṩÓòÃûµ½IPµØÖ·µÄת»»£¬ÔÊÐí¶ÔÓòÃû×ÊÔ´½øÐзÖÉ¢¹ÜÀí¡£DNS×î³õÉè¼ÆµÄÄ¿µÄÊÇʹÓʼþ·¢ËÍ·½ÖªµÀÓʼþ½ÓÊÕÖ÷»ú¼°Óʼþ·¢ËÍÖ÷»úµÄIPµØÖ·£¬ºóÀ´·¢Õ¹³É¿É·þÎñÓÚÆäËûÐí¶àÄ¿±êµÄÐÒé¡£
SMTPÐÒé±à¼
¼´¼òµ¥Óʼþ´«ËÍÐÒ黥ÁªÍø±ê×¼Öеĵç×ÓÓʼþÊÇÒ»¸ö¼òµ¥µÄ»ùÓÚÎı¾µÄÐÒ飬ÓÃÓÚ¿É¿¿¡¢ÓÐЧµØÊý¾Ý´«Êä¡£SMTP×÷ΪӦÓòãµÄ·þÎñ£¬²¢²»¹ØÐÄËüÏÂÃæ²ÉÓõÄÊǺÎÖÖ´«Êä·þÎñ£¬
Ëü¿Éͨ¹ýÍøÂçÔÚTXPÁ´½ÓÉÏ´«ËÍÓʼþ£¬»òÕß¼òµ¥µØÔÚͬһ»úÆ÷µÄ½ø³ÌÖ®¼äͨ¹ý½ø³ÌͨÐŵÄͨµÀÀ´´«ËÍÓʼþ£¬ÕâÑù£¬Óʼþ´«Êä¾Í¶ÀÁ¢ÓÚ´«Êä×Óϵͳ£¬¿ÉÔÚTCP/IP»·¾³»òX.25ÐÒé»·¾³Öд«ÊäÓʼþ¡£
TCP£¨Transmission Control Protocol£¬´«Êä¿ØÖÆÐÒ飩ÊÇÃæÏòÁ¬½ÓµÄÐÒ飬Ҳ¾ÍÊÇ˵£¬ÔÚÊÕ·¢Êý¾Ýǰ£¬±ØÐëºÍ¶Ô·½½¨Á¢¿É¿¿µÄÁ¬½Ó¡£Ò»¸öTCPÁ¬½Ó±ØÐëÒª¾¹ýÈý´Î¡°¶Ô»°¡±²ÅÄܽ¨Á¢ÆðÀ´£¬ÆäÖеĹý³Ì·Ç³£¸´ÔÓ£¬Ö»¼òµ¥µÄÃèÊöÏÂÕâÈý´Î¶Ô»°µÄ¼òµ¥¹ý³Ì£º
Ö÷»úAÏòÖ÷»úB·¢³öÁ¬½ÓÇëÇóÊý¾Ý°ü£º¡°ÎÒÏë¸øÄã·¢Êý¾Ý£¬¿ÉÒÔÂ𣿡±£¬ÕâÊǵÚÒ»´Î¶Ô»°£»Ö÷»úBÏòÖ÷»úA·¢ËÍͬÒâÁ¬½ÓºÍÒªÇóͬ²½£¨Í¬²½¾ÍÊÇÁ½Ì¨Ö÷»úÒ»¸öÔÚ·¢ËÍ£¬Ò»¸öÔÚ½ÓÊÕ£¬Ðµ÷¹¤×÷£©µÄÊý¾Ý°ü£º¡°¿ÉÒÔ£¬Äãʲôʱºò·¢£¿¡±£¬ÕâÊǵڶþ´Î¶Ô»°£»
Ö÷»úAÔÙ·¢³öÒ»¸öÊý¾Ý°üÈ·ÈÏÖ÷»úBµÄÒªÇóͬ²½£º¡°ÎÒÏÖÔھͷ¢£¬Äã½Ó×Űɣ¡¡±£¬ÕâÊǵÚÈý´Î¶Ô»°¡£Èý´Î¡°¶Ô»°¡±µÄÄ¿µÄÊÇʹÊý¾Ý°üµÄ·¢ËͺͽÓÊÕͬ²½£¬¾¹ýÈý´Î¡°¶Ô»°¡±Ö®ºó£¬Ö÷»úA²ÅÏòÖ÷»úBÕýʽ·¢ËÍÊý¾Ý
UDP£¨User Data Protocol£¬Óû§Êý¾Ý±¨ÐÒ飩
£¨1£© UDPÊÇÒ»¸ö·ÇÁ¬½ÓµÄÐÒ飬´«ÊäÊý¾Ý֮ǰԴ¶ËºÍÖն˲»½¨Á¢Á¬½Ó£¬µ±ËüÏë´«ËÍʱ¾Í¼òµ¥µØÈ¥×¥È¡À´×ÔÓ¦ÓóÌÐòµÄÊý¾Ý£¬²¢¾¡¿ÉÄÜ¿ìµØ°ÑËüÈÓµ½ÍøÂçÉÏ¡£
ÔÚ·¢ËͶˣ¬UDP´«ËÍÊý¾ÝµÄËٶȽö½öÊÇÊÜÓ¦ÓóÌÐòÉú³ÉÊý¾ÝµÄËÙ¶È¡¢¼ÆËã»úµÄÄÜÁ¦ºÍ´«Êä´ø¿íµÄÏÞÖÆ£»ÔÚ½ÓÊÕ¶Ë£¬UDP°Ñÿ¸öÏûÏ¢¶Î·ÅÔÚ¶ÓÁÐÖУ¬Ó¦ÓóÌÐòÿ´Î´Ó¶ÓÁÐÖжÁÒ»¸öÏûÏ¢¶Î¡£
£¨2£© ÓÉÓÚ´«ÊäÊý¾Ý²»½¨Á¢Á¬½Ó£¬Òò´ËÒ²¾Í²»ÐèҪά»¤Á¬½Ó״̬£¬°üÀ¨ÊÕ·¢×´Ì¬µÈ£¬Òò´Ëһ̨·þÎñ»ú¿ÉͬʱÏò¶à¸ö¿Í»§»ú´«ÊäÏàͬµÄÏûÏ¢¡£
£¨3£© UDPÐÅÏ¢°üµÄ±êÌâºÜ¶Ì£¬Ö»ÓÐ8¸ö×Ö½Ú£¬Ïà¶ÔÓÚTCPµÄ20¸ö×Ö½ÚÐÅÏ¢°üµÄ¶îÍ⿪ÏúºÜС¡£
£¨4£© ÍÌÍÂÁ¿²»ÊÜÓµ¼·¿ØÖÆËã·¨µÄµ÷½Ú£¬Ö»ÊÜÓ¦ÓÃÈí¼þÉú³ÉÊý¾ÝµÄËÙÂÊ¡¢´«Êä´ø¿í¡¢Ô´¶ËºÍÖÕ¶ËÖ÷»úÐÔÄܵÄÏÞÖÆ¡£
£¨5£©UDPʹÓþ¡×î´óŬÁ¦½»¸¶£¬¼´²»±£Ö¤¿É¿¿½»¸¶£¬Òò´ËÖ÷»ú²»ÐèҪά³Ö¸´ÔÓµÄÁ´½Ó״̬±í£¨ÕâÀïÃæÓÐÐí¶à²ÎÊý£©¡£
£¨6£©UDPÊÇÃæÏò±¨Îĵġ£·¢ËÍ·½µÄUDP¶ÔÓ¦ÓóÌÐò½»ÏÂÀ´µÄ±¨ÎÄ£¬ÔÚÌí¼ÓÊײ¿ºó¾ÍÏòϽ»¸¶¸øIP²ã¡£¼È²»²ð·Ö£¬Ò²²»ºÏ²¢£¬¶øÊDZ£ÁôÕâЩ±¨Îĵı߽磬Òò´Ë£¬Ó¦ÓóÌÐòÐèҪѡÔñºÏÊʵı¨ÎÄ´óС¡£
ÎÒÃǾ³£Ê¹Óá°ping¡±ÃüÁîÀ´²âÊÔÁ½Ì¨Ö÷»úÖ®¼äTCP/IPͨÐÅÊÇ·ñÕý³££¬Æäʵ¡°ping¡±ÃüÁîµÄÔÀí¾ÍÊÇÏò¶Ô·½Ö÷»ú·¢ËÍUDPÊý¾Ý°ü£¬È»ºó¶Ô·½Ö÷»úÈ·ÈÏÊÕµ½Êý¾Ý°ü£¬Èç¹ûÊý¾Ý°üÊÇ·ñµ½´ïµÄÏûÏ¢¼°Ê±·´À¡»ØÀ´£¬ÄÇÃ´ÍøÂç¾ÍÊÇͨµÄ¡£
UDPµÄ°üÍ·½á¹¹£º
Ô´¶Ë¿Ú 16λ
Ä¿µÄ¶Ë¿Ú 16λ
³¤¶È 16λ
УÑéºÍ 16λ
С½áTCPÓëUDPµÄÇø±ð£º
1 .»ùÓÚÁ¬½ÓÓëÎÞÁ¬½Ó£»
2 .¶Ôϵͳ×ÊÔ´µÄÒªÇó£¨TCP½Ï¶à£¬UDPÉÙ£©£»
3 .UDP³ÌÐò½á¹¹½Ï¼òµ¥£»
4 .Á÷ģʽÓëÊý¾Ý±¨Ä£Ê½ £»
5 .TCP±£Ö¤Êý¾ÝÕýÈ·ÐÔ£¬UDP¿ÉÄܶª°ü£¬TCP±£Ö¤Êý¾Ý˳Ðò£¬UDP²»±£Ö¤¡£
¶Ô³Æ¼ÓÃÜÊÇ×î¿ìËÙ¡¢×î¼òµ¥µÄÒ»ÖÖ¼ÓÃÜ·½Ê½£¬¼ÓÃÜ£¨encryption£©Óë½âÃÜ£¨decryption£©ÓõÄÊÇͬÑùµÄÃÜÔ¿£¨secret key£©¡£¶Ô³Æ¼ÓÃÜÓкܶàÖÖËã·¨£¬ÓÉÓÚËüЧÂʺܸߣ¬ËùÒÔ±»¹ã·ºÊ¹ÓÃÔںܶà¼ÓÃÜÐÒéµÄºËÐĵ±ÖС£
¶Ô³Æ¼ÓÃÜͨ³£Ê¹ÓõÄÊÇÏà¶Ô½ÏСµÄÃÜÔ¿£¬Ò»°ãСÓÚ256 bit¡£ÒòΪÃÜÔ¿Ô½´ó£¬¼ÓÃÜԽǿ£¬µ«¼ÓÃÜÓë½âÃܵĹý³ÌÔ½Âý¡£Èç¹ûÄãÖ»ÓÃ1 bitÀ´×öÕâ¸öÃÜÔ¿£¬ÄǺڿÍÃÇ¿ÉÒÔÏÈÊÔ×ÅÓÃ0À´½âÃÜ£¬²»Ðеϰ¾ÍÔÙÓÃ1½â£»
µ«Èç¹ûÄãµÄÃÜÔ¿ÓÐ1 MB´ó£¬ºÚ¿ÍÃÇ¿ÉÄÜÓÀÔ¶Ò²ÎÞ·¨ÆÆ½â£¬µ«¼ÓÃܺͽâÃܵĹý³ÌÒª»¨·ÑºÜ³¤µÄʱ¼ä¡£ÃÜÔ¿µÄ´óС¼ÈÒªÕչ˵½°²È«ÐÔ£¬Ò²ÒªÕչ˵½Ð§ÂÊ£¬ÊÇÒ»¸ötrade-off
³£¼û¶Ô³Æ¼ÓÃÜËã·¨ DESËã·¨£¬3DESËã·¨£¬TDEAËã·¨£¬BlowfishËã·¨£¬RC5Ëã·¨£¬IDEAËã·¨
·Ç¶Ô³Æ¼ÓÃÜΪÊý¾ÝµÄ¼ÓÃÜÓë½âÃÜÌṩÁËÒ»¸ö·Ç³£°²È«µÄ·½·¨£¬ËüʹÓÃÁËÒ»¶ÔÃÜÔ¿£¬¹«Ô¿£¨public key£©ºÍ˽Կ£¨private key£©¡£
˽ԿֻÄÜÓÉÒ»·½°²È«±£¹Ü£¬²»ÄÜÍâй£¬¶ø¹«Ô¿Ôò¿ÉÒÔ·¢¸øÈκÎÇëÇóËüµÄÈË¡£·Ç¶Ô³Æ¼ÓÃÜʹÓÃÕâ¶ÔÃÜÔ¿ÖеÄÒ»¸ö½øÐмÓÃÜ£¬¶ø½âÃÜÔòÐèÒªÁíÒ»¸öÃÜÔ¿¡£
±ÈÈ磬ÄãÏòÒøÐÐÇëÇó¹«Ô¿£¬ÒøÐн«¹«Ô¿·¢¸øÄ㣬ÄãʹÓù«Ô¿¶ÔÏûÏ¢¼ÓÃÜ£¬ÄÇôֻÓÐ˽ԿµÄ³ÖÓÐÈË--ÒøÐвÅÄܶÔÄãµÄÏûÏ¢½âÃÜ¡£Óë¶Ô³Æ¼ÓÃܲ»Í¬µÄÊÇ£¬ÒøÐв»ÐèÒª½«Ë½Ô¿Í¨¹ýÍøÂç·¢ËͳöÈ¥£¬Òò´Ë°²È«ÐÔ´ó´óÌá¸ß¡£
Ŀǰ×î³£ÓõķǶԳƼÓÃÜËã·¨ÊÇRSAËã·¨ Elgamal¡¢±³°üËã·¨¡¢Rabin¡¢HD,ECC£¨ÍÖÔ²ÇúÏß¼ÓÃÜËã·¨£©
TCPÈý´ÎÎÕÊÖ¹ý³Ì1 Ö÷»úAͨ¹ýÏòÖ÷»úB ·¢ËÍÒ»¸öº¬ÓÐͬ²½ÐòÁкŵıê־λµÄÊý¾Ý¶Î¸øÖ÷»úB ,ÏòÖ÷»úB ÇëÇó½¨Á¢Á¬½Ó,ͨ¹ýÕâ¸öÊý¾Ý¶Î,Ö÷»úA¸æËßÖ÷»úB Á½¼þÊÂ:ÎÒÏëÒªºÍÄãͨÐÅ;Äã¿ÉÒÔÓÃÄĸöÐòÁкÅ×÷ΪÆðʼÊý¾Ý¶ÎÀ´»ØÓ¦ÎÒ.2 Ö÷»úB ÊÕµ½Ö÷»úAµÄÇëÇóºó,ÓÃÒ»¸ö´øÓÐÈ·ÈÏÓ¦´ð(ACK)ºÍͬ²½ÐòÁкÅ(SYN)±ê־λµÄÊý¾Ý¶ÎÏìÓ¦Ö÷»úA,Ò²¸æËßÖ÷»úAÁ½¼þÊÂ:ÎÒÒѾÊÕµ½ÄãµÄÇëÇóÁË,Äã¿ÉÒÔ´«ÊäÊý¾ÝÁË;ÄãÒªÓÃÄÄØûÐòÁкÅ×÷ΪÆðʼÊý¾Ý¶ÎÀ´»ØÓ¦ÎÒ3 Ö÷»úAÊÕµ½Õâ¸öÊý¾Ý¶Îºó,ÔÙ·¢ËÍÒ»¸öÈ·ÈÏÓ¦´ð,È·ÈÏÒÑÊÕµ½Ö÷»úB µÄÊý¾Ý¶Î:"ÎÒÒÑÊÕµ½»Ø¸´,ÎÒÏÖÔÚÒª¿ªÊ¼´«Êäʵ¼ÊÊý¾ÝÁËÕâÑù3´ÎÎÕÊÖ¾ÍÍê³ÉÁË,Ö÷»úAºÍÖ÷»úB ¾Í¿ÉÒÔ´«ÊäÊý¾ÝÁË.3´ÎÎÕÊÖµÄÌØµãûÓÐÓ¦ÓòãµÄÊý¾ÝSYNÕâ¸ö±ê־λֻÓÐÔÚTCP½¨²úÁ¬½Óʱ²Å»á±»ÖÃ1ÎÕÊÖÍê³ÉºóSYN±ê־λ±»ÖÃ0TCP½¨Á¢Á¬½ÓÒª½øÐÐ3´ÎÎÕÊÖ,¶ø¶Ï¿ªÁ¬½ÓÒª½øÐÐ4´Î1 µ±Ö÷»úAÍê³ÉÊý¾Ý´«Êäºó,½«¿ØÖÆÎ»FINÖÃ1,Ìá³öÍ£Ö¹TCPÁ¬½ÓµÄÇëÇó2 Ö÷»úBÊÕµ½FINºó¶ÔÆä×÷³öÏìÓ¦,È·ÈÏÕâÒ»·½ÏòÉϵÄTCPÁ¬½Ó½«¹Ø±Õ,½«ACKÖÃ13 ÓÉB ¶ËÔÙÌá³ö·´·½ÏòµÄ¹Ø±ÕÇëÇó,½«FINÖÃ14 Ö÷»úA¶ÔÖ÷»úBµÄÇëÇó½øÐÐÈ·ÈÏ,½«ACKÖÃ1,Ë«·½ÏòµÄ¹Ø±Õ½áÊø.ÓÉTCPµÄÈý´ÎÎÕÊÖºÍËĴζϿª¿ÉÒÔ¿´³ö,TCPʹÓÃÃæÏòÁ¬½ÓµÄͨÐÅ·½Ê½,´ó´óÌá¸ßÁËÊý¾ÝͨÐŵĿɿ¿ÐÔ,ʹ·¢ËÍÊý¾Ý¶ËºÍ½ÓÊÕ¶ËÔÚÊý¾ÝÕýʽ´«Êäǰ¾ÍÓÐÁ˽»»¥,ΪÊý¾ÝÕýʽ´«Êä´òÏÂÁ˿ɿ¿µÄ»ù´¡Ãû´Ê½âÊÍACK TCP±¨Í·µÄ¿ØÖÆÎ»Ö®Ò»,¶ÔÊý¾Ý½øÐÐÈ·ÈÏ.È·ÈÏÓÉÄ¿µÄ¶Ë·¢³ö,ÓÃËüÀ´¸æËß·¢ËͶËÕâ¸öÐòÁкÅ֮ǰµÄÊý¾Ý¶Î¶¼ÊÕµ½ÁË.±ÈÈç,È·ÈϺÅΪX,Ôò±íʾǰX-1¸öÊý¾Ý¶Î¶¼ÊÕµ½ÁË,Ö»Óе±ACK=1ʱ,È·ÈϺŲÅÓÐЧ,µ±ACK=0ʱ,È·ÈϺÅÎÞЧ,Õâʱ»áÒªÇóÖØ´«Êý¾Ý,±£Ö¤Êý¾ÝµÄÍêÕûÐÔ.SYN ͬ²½ÐòÁкÅ,TCP½¨Á¢Á¬½Óʱ½«Õâ¸öλÖÃ1FIN ·¢ËͶËÍê³É·¢ËÍÈÎÎñλ,µ±TCPÍê³ÉÊý¾Ý´«ÊäÐèÒª¶Ï¿ªÊ±,Ìá³ö¶Ï¿ªÁ¬½ÓµÄÒ»·½½«ÕâλÖÃ1TCPµÄ°üÍ·½á¹¹£ºÔ´¶Ë¿Ú 16λĿ±ê¶Ë¿Ú 16λÐòÁкŠ32λ»ØÓ¦ÐòºÅ 32λTCPÍ·³¤¶È 4λreserved 6λ¿ØÖÆ´úÂë 6λ´°¿Ú´óС 16Î»Æ«ÒÆÁ¿ 16λУÑéºÍ 16λѡÏî 32λ(¿ÉÑ¡)ÕâÑùÎÒÃǵóöÁËTCP°üÍ·µÄ×îС³¤¶È£¬Îª20×Ö½Ú¡£
1¡¢session±£´æÔÚ·þÎñÆ÷£¬¿Í»§¶Ë²»ÖªµÀÆäÖеÄÐÅÏ¢£»cookie±£´æÔÚ¿Í»§¶Ë£¬·þÎñÆ÷Äܹ»ÖªµÀÆäÖеÄÐÅÏ¢¡£2¡¢sessionÖб£´æµÄÊǶÔÏó£¬cookieÖб£´æµÄÊÇ×Ö·û´®¡£3¡¢session²»ÄÜÇø·Ö·¾¶£¬Í¬Ò»¸öÓû§ÔÚ·ÃÎÊÒ»¸öÍøÕ¾ÆÚ¼ä£¬ËùÓеÄsessionÔÚÈκÎÒ»¸öµØ·½¶¼¿ÉÒÔ·ÃÎʵ½¡£¶øcookieÖÐÈç¹ûÉèÖÃÁË·¾¶²ÎÊý£¬ÄÇôͬһ¸öÍøÕ¾Öв»Í¬Â·¾¶ÏµÄcookie»¥ÏàÊÇ·ÃÎʲ»µ½µÄ¡£4¡¢sessionÐèÒª½èÖúcookie²ÅÄÜÕý³£¡£Èç¹û¿Í»§¶ËÍêÈ«½ûÖ¹cookie£¬session½«Ê§Ð§¡£·Ö²¼Ê½SessionµÄ¼¸ÖÖʵÏÖ·½Ê½1 .»ùÓÚÊý¾Ý¿âµÄSession¹²Ïí2 .»ùÓÚNFS¹²ÏíÎļþϵͳ3 .»ùÓÚmemcached µÄsession£¬ÈçºÎ±£Ö¤ memcached ±¾ÉíµÄ¸ß¿ÉÓÃÐÔ£¿4 . »ùÓÚresin/tomcat webÈÝÆ÷±¾ÉíµÄsession¸´ÖÆ»úÖÆ5 . »ùÓÚTT/Redis »ò jbosscache ½øÐÐ session ¹²Ïí¡£6 . »ùÓÚcookie ½øÐÐsession¹²Ïí
GITÊÇ·Ö²¼Ê½µÄ£¬SVN²»ÊÇ£ºÕâÊÇGITºÍÆäËü·Ç·Ö²¼Ê½µÄ°æ±¾¿ØÖÆÏµÍ³£¬ÀýÈçSVN£¬CVSµÈ£¬×îºËÐĵÄÇø
GIT°ÑÄÚÈݰ´ÔªÊý¾Ý·½Ê½´æ´¢£¬¶øSVNÊǰ´Îļþ
GIT·ÖÖ§ºÍSVNµÄ·ÖÖ§²»Í¬£º
·ÖÖ§ÔÚSVNÖÐÒ»µã²»Ìر𣬾ÍÊǰ汾¿âÖеÄÁíÍâµÄÒ»¸öĿ¼¡£Èç¹ûÄãÏëÖªµÀÊÇ·ñºÏ²¢ÁËÒ»¸ö·ÖÖ§£¬ÄãÐèÒªÊÖ¹¤ÔËÐÐÏñÕâÑùµÄÃüÁîsvn propget svn:mergeinfo£¬À´È·ÈÏ´úÂëÊÇ·ñ±»ºÏ²¢¡£
È»¶ø£¬´¦ÀíGITµÄ·ÖÖ§È´ÊÇÏ൱µÄ¼òµ¥ºÍÓÐȤ¡£Äã¿ÉÒÔ´Óͬһ¸ö¹¤×÷Ŀ¼Ï¿ìËÙµÄÔÚ¼¸¸ö·ÖÖ§¼äÇл»¡£ÄãºÜÈÝÒ×·¢ÏÖδ±»ºÏ²¢µÄ·ÖÖ§£¬ÄãÄܼòµ¥¶ø¿ì½ÝµÄºÏ²¢ÕâЩÎļþ
GITûÓÐÒ»¸öÈ«¾ÖµÄ°æ±¾ºÅ£¬¶øSVNÓÐ
GITµÄÄÚÈÝÍêÕûÐÔÒªÓÅÓÚSVN
ThreadLocalÊÇ»ùÓÚÏ̶߳ÔÏóµÄ,ÀàËÆÓÚÒ»¸ömap ,keyΪµ±Ç°Ï̶߳ÔÏó,ËùÒÔËü¿ÉÒÔÔÚͬÏß³ÌÄÚ¹²ÏíÊý¾Ý
IOµÄ·½Ê½Í¨³£·ÖΪ¼¸ÖÖ£¬Í¬²½×èÈûµÄBIO¡¢Í¬²½·Ç×èÈûµÄNIO¡¢Òì²½·Ç×èÈûµÄAIO
BIO
ÔÚJDK1.4³öÀ´Ö®Ç°£¬ÎÒÃǽ¨Á¢ÍøÂçÁ¬½ÓµÄʱºò²ÉÓÃBIOģʽ£¬ÐèÒªÏÈÔÚ·þÎñ¶ËÆô¶¯Ò»¸öServerSocket£¬È»ºóÔÚ¿Í»§¶ËÆô¶¯SocketÀ´¶Ô·þÎñ¶Ë½øÐÐͨÐÅ£¬
ĬÈÏÇé¿öÏ·þÎñ¶ËÐèÒª¶Ôÿ¸öÇëÇó½¨Á¢Ò»¶ÑÏ̵߳ȴýÇëÇ󣬶ø¿Í»§¶Ë·¢ËÍÇëÇóºó£¬ÏÈ×Éѯ·þÎñ¶ËÊÇ·ñÓÐÏß³ÌÏàÓ¦£¬Èç¹ûûÓÐÔò»áÒ»Ö±µÈ´ý»òÕßÔâµ½¾Ü¾øÇëÇó£¬Èç¹ûÓеϰ£¬¿Í»§¶Ë»áÏ̻߳áµÈ´ýÇëÇó½áÊøºó²Å¼ÌÐøÖ´ÐС£
¶þ¡¢NIO
NIO±¾ÉíÊÇ»ùÓÚʼþÇý¶¯Ë¼ÏëÀ´Íê³ÉµÄ£¬ÆäÖ÷ÒªÏë½â¾öµÄÊÇBIOµÄ´ó²¢·¢ÎÊÌ⣺ ÔÚʹÓÃͬ²½I/OµÄÍøÂçÓ¦ÓÃÖУ¬Èç¹ûҪͬʱ´¦Àí¶à¸ö¿Í»§¶ËÇëÇ󣬻òÊÇÔÚ¿Í»§¶ËҪͬʱºÍ¶à¸ö·þÎñÆ÷½øÐÐͨѶ£¬¾Í±ØÐëʹÓöàÏß³ÌÀ´´¦Àí¡£
Ò²¾ÍÊÇ˵£¬½«Ã¿Ò»¸ö¿Í»§¶ËÇëÇó·ÖÅä¸øÒ»¸öÏß³ÌÀ´µ¥¶À´¦Àí¡£ÕâÑù×öËäÈ»¿ÉÒÔ´ïµ½ÎÒÃǵÄÒªÇ󣬵«Í¬Ê±ÓÖ»á´øÀ´ÁíÍâÒ»¸öÎÊÌâ¡£ÓÉÓÚÿ´´½¨Ò»¸öỊ̈߳¬¾ÍҪΪÕâ¸öÏ̷߳ÖÅäÒ»¶¨µÄÄÚ´æ¿Õ¼ä£¨Ò²½Ð¹¤×÷´æ´¢Æ÷£©£¬¶øÇÒ²Ù×÷ϵͳ±¾ÉíÒ²¶ÔÏ̵߳Ä×ÜÊýÓÐÒ»¶¨µÄÏÞÖÆ¡£
Èç¹û¿Í»§¶ËµÄÇëÇó¹ý¶à£¬·þÎñ¶Ë³ÌÐò¿ÉÄÜ»áÒòΪ²»¿°Öظº¶ø¾Ü¾ø¿Í»§¶ËµÄÇëÇó£¬ÉõÖÁ·þÎñÆ÷¿ÉÄÜ»áÒò´Ë¶øÌ±»¾¡£
NIO»ùÓÚReactor£¬µ±socketÓÐÁ÷¿É¶Á»ò¿ÉдÈësocketʱ£¬²Ù×÷ϵͳ»áÏàÓ¦µÄ֪ͨÒýÓóÌÐò½øÐд¦Àí£¬Ó¦ÓÃÔÙ½«Á÷¶ÁÈ¡µ½»º³åÇø»òдÈë²Ù×÷ϵͳ¡£
Ò²¾ÍÊÇ˵£¬Õâ¸öʱºò£¬ÒѾ²»ÊÇÒ»¸öÁ¬½Ó¾ÍÒª¶ÔÓ¦Ò»¸ö´¦ÀíÏß³ÌÁË£¬¶øÊÇÓÐЧµÄÇëÇ󣬶ÔÓ¦Ò»¸öỊ̈߳¬µ±Á¬½ÓûÓÐÊý¾Ýʱ£¬ÊÇûÓй¤×÷Ïß³ÌÀ´´¦ÀíµÄ¡£
BIOÓëNIOÒ»¸ö±È½ÏÖØÒªµÄ²»Í¬£¬ÊÇÎÒÃÇʹÓÃBIOµÄʱºòÍùÍù»áÒýÈë¶àỊ̈߳¬Ã¿¸öÁ¬½ÓÒ»¸öµ¥¶ÀµÄỊ̈߳»¶øNIOÔòÊÇʹÓõ¥Ï̻߳òÕßֻʹÓÃÉÙÁ¿µÄ¶àỊ̈߳¬Ã¿¸öÁ¬½Ó¹²ÓÃÒ»¸öÏ̡߳£
NIOµÄ×îÖØÒªµÄµØ·½Êǵ±Ò»¸öÁ¬½Ó´´½¨ºó£¬²»ÐèÒª¶ÔÓ¦Ò»¸öỊ̈߳¬Õâ¸öÁ¬½Ó»á±»×¢²áµ½¶à·¸´ÓÃÆ÷ÉÏÃæ£¬ËùÒÔËùÓеÄÁ¬½ÓÖ»ÐèÒªÒ»¸öÏ߳̾ͿÉÒԸ㶨£¬
µ±Õâ¸öÏß³ÌÖеĶà·¸´ÓÃÆ÷½øÐÐÂÖѯµÄʱºò£¬·¢ÏÖÁ¬½ÓÉÏÓÐÇëÇóµÄ»°£¬²Å¿ªÆôÒ»¸öÏ߳̽øÐд¦Àí£¬Ò²¾ÍÊÇÒ»¸öÇëÇóÒ»¸öÏß³Ìģʽ¡£
ÔÚNIOµÄ´¦Àí·½Ê½ÖУ¬µ±Ò»¸öÇëÇóÀ´µÄ»°£¬¿ªÆôÏ߳̽øÐд¦Àí£¬¿ÉÄÜ»áµÈ´ýºó¶ËÓ¦ÓõÄ×ÊÔ´(JDBCÁ¬½ÓµÈ)£¬ÆäʵÕâ¸öÏ߳̾ͱ»×èÈûÁË£¬µ±²¢·¢ÉÏÀ´µÄ»°£¬»¹ÊÇ»áÓÐBIOÒ»ÑùµÄÎÊÌâ¡£
¡¡¡¡HTTP/1.1³öÏÖºó£¬ÓÐÁËHttp³¤Á¬½Ó£¬ÕâÑù³ýÁ˳¬Ê±ºÍÖ¸Ã÷ÌØ¶¨¹Ø±ÕµÄhttp headerÍ⣬Õâ¸öÁ´½ÓÊÇÒ»Ö±´ò¿ªµÄ״̬µÄ£¬ÕâÑùÔÚNIO´¦ÀíÖпÉÒÔ½øÒ»²½µÄ½ø»¯£¬ÔÚºó¶Ë×ÊÔ´ÖпÉÒÔʵÏÖ×ÊÔ´³Ø»òÕß¶ÓÁУ¬
µ±ÇëÇóÀ´µÄ»°£¬¿ªÆôµÄḬ̈߳ÑÇëÇóºÍÇëÇóÊý¾Ý´«Ë͸øºó¶Ë×ÊÔ´³Ø»òÕß¶ÓÁÐÀïÃæ¾Í·µ»Ø£¬²¢ÇÒÔÚÈ«¾ÖµÄµØ·½±£³ÖסÕâ¸öÏÖ³¡(ÄĸöÁ¬½ÓµÄÄĸöÇëÇóµÈ)£¬ÕâÑùÇ°ÃæµÄÏ̻߳¹ÊÇ¿ÉÒÔÈ¥½ÓÊÜÆäËûµÄÇëÇó£¬
¶øºó¶ËµÄÓ¦ÓõĴ¦ÀíÖ»ÐèÒªÖ´ÐжÓÁÐÀïÃæµÄ¾Í¿ÉÒÔÁË£¬ÕâÑùÇëÇó´¦ÀíºÍºó¶ËÓ¦ÓÃÊÇÒì²½µÄ.µ±ºó¶Ë´¦ÀíÍ꣬µ½È«¾ÖµØ·½µÃµ½ÏÖ³¡£¬²úÉúÏìÓ¦£¬Õâ¸ö¾ÍʵÏÖÁËÒì²½´¦Àí¡£
Èý¡¢AIO
ÓëNIO²»Í¬£¬µ±½øÐжÁд²Ù×÷ʱ£¬Ö»ÐëÖ±½Óµ÷ÓÃAPIµÄread»òwrite·½·¨¼´¿É¡£ÕâÁ½ÖÖ·½·¨¾ùΪÒì²½µÄ£¬¶ÔÓÚ¶Á²Ù×÷¶øÑÔ£¬µ±ÓÐÁ÷¿É¶Áȡʱ£¬²Ù×÷ϵͳ»á½«¿É¶ÁµÄÁ÷´«Èëread·½·¨µÄ»º³åÇø£¬²¢Í¨ÖªÓ¦ÓóÌÐò£»
¶ÔÓÚд²Ù×÷¶øÑÔ£¬µ±²Ù×÷ϵͳ½«write·½·¨´«µÝµÄÁ÷дÈëÍê±Ïʱ£¬²Ù×÷ϵͳÖ÷¶¯Í¨ÖªÓ¦ÓóÌÐò¡£ ¼´¿ÉÒÔÀí½âΪ£¬read/write·½·¨¶¼ÊÇÒì²½µÄ£¬Íê³Éºó»áÖ÷¶¯µ÷Óûص÷º¯Êý¡£
ÔÚJDK1.7ÖУ¬Õⲿ·ÖÄÚÈݱ»³Æ×÷NIO.2£¬Ö÷ÒªÔÚJava.nio.channels°üÏÂÔö¼ÓÁËÏÂÃæËĸöÒ첽ͨµÀ£º
AsynchronousSocketChannel
AsynchronousServerSocketChannel
AsynchronousFileChannel
AsynchronousDatagramChannel
ÆäÖеÄread/write·½·¨£¬»á·µ»ØÒ»¸ö´ø»Øµ÷º¯ÊýµÄ¶ÔÏ󣬵±Ö´ÐÐÍê¶ÁÈ¡/дÈë²Ù×÷ºó£¬Ö±½Óµ÷Óûص÷º¯Êý¡£
BIOÊÇÒ»¸öÁ¬½ÓÒ»¸öÏ̡߳£
NIOÊÇÒ»¸öÇëÇóÒ»¸öÏ̡߳£
AIOÊÇÒ»¸öÓÐЧÇëÇóÒ»¸öÏ̡߳£
ÏÈÀ´¸öÀý×ÓÀí½âһϸÅÄÒÔÒøÐÐÈ¡¿îΪÀý£º
ͬ²½ £º ×Ô¼ºÇ××Ô³öÂí³ÖÒøÐп¨µ½ÒøÐÐȡǮ£¨Ê¹ÓÃͬ²½IOʱ£¬Java×Ô¼º´¦ÀíIO¶Áд£©£»
Òì²½ £º ίÍÐһСµÜÄÃÒøÐп¨µ½ÒøÐÐȡǮ£¬È»ºó¸øÄ㣨ʹÓÃÒì²½IOʱ£¬Java½«IO¶ÁдίÍиøOS´¦Àí£¬ÐèÒª½«Êý¾Ý»º³åÇøµØÖ·ºÍ´óС´«¸øOS(ÒøÐп¨ºÍÃÜÂë)£¬OSÐèÒªÖ§³ÖÒì²½IO²Ù×÷API£©£»
×èÈû £º ATMÅŶÓÈ¡¿î£¬ÄãÖ»Äܵȴý£¨Ê¹ÓÃ×èÈûIOʱ£¬Javaµ÷ÓûáÒ»Ö±×èÈûµ½¶ÁдÍê³É²Å·µ»Ø£©£»
·Ç×èÈû £º ¹ñ̨ȡ¿î£¬È¡¸öºÅ£¬È»ºó×øÔÚÒÎ×ÓÉÏ×öÆäËüÊ£¬µÈºÅ¹ã²¥»á֪ͨÄã°ìÀí£¬Ã»µ½ºÅÄã¾Í²»ÄÜÈ¥£¬Äã¿ÉÒÔ²»¶ÏÎÊ´óÌþÀíÅŵ½ÁËûÓУ¬´óÌþÀíÈç¹û˵»¹Ã»µ½Äã¾Í²»ÄÜÈ¥£¨Ê¹Ó÷Ç×èÈûIOʱ£¬Èç¹û²»ÄܶÁдJavaµ÷ÓûáÂíÉÏ·µ»Ø£¬µ±IOʼþ·Ö·¢Æ÷»á֪ͨ¿É¶ÁдʱÔÙ¼ÌÐø½øÐжÁд£¬²»¶ÏÑ»·Ö±µ½¶ÁдÍê³É£©
Java¶ÔBIO¡¢NIO¡¢AIOµÄÖ§³Ö£º
Java BIO £º ͬ²½²¢×èÈû£¬·þÎñÆ÷ʵÏÖģʽΪһ¸öÁ¬½ÓÒ»¸öỊ̈߳¬¼´¿Í»§¶ËÓÐÁ¬½ÓÇëÇóʱ·þÎñÆ÷¶Ë¾ÍÐèÒªÆô¶¯Ò»¸öÏ߳̽øÐд¦Àí£¬Èç¹ûÕâ¸öÁ¬½Ó²»×öÈκÎÊÂÇé»áÔì³É²»±ØÒªµÄÏ߳̿ªÏú£¬µ±È»¿ÉÒÔͨ¹ýÏ̳߳ػúÖÆ¸ÄÉÆ¡£
java NIO £º ͬ²½·Ç×èÈû£¬·þÎñÆ÷ʵÏÖģʽΪһ¸öÇëÇóÒ»¸öỊ̈߳¬¼´¿Í»§¶Ë·¢Ë͵ÄÁ¬½ÓÇëÇó¶¼»á×¢²áµ½¶à·¸´ÓÃÆ÷ÉÏ£¬¶à·¸´ÓÃÆ÷ÂÖѯµ½Á¬½ÓÓÐI/OÇëÇóʱ²ÅÆô¶¯Ò»¸öÏ߳̽øÐд¦Àí¡£
Java AIO(NIO.2) £º Òì²½·Ç×èÈû£¬·þÎñÆ÷ʵÏÖģʽΪһ¸öÓÐЧÇëÇóÒ»¸öỊ̈߳¬¿Í»§¶ËµÄI/OÇëÇó¶¼ÊÇÓÉOSÏÈÍê³ÉÁËÔÙ֪ͨ·þÎñÆ÷Ó¦ÓÃÈ¥Æô¶¯Ï߳̽øÐд¦Àí£¬
BIO¡¢NIO¡¢AIOÊÊÓó¡¾°·ÖÎö:
BIO·½Ê½ÊÊÓÃÓÚÁ¬½ÓÊýÄ¿±È½ÏСÇҹ̶¨µÄ¼Ü¹¹£¬ÕâÖÖ·½Ê½¶Ô·þÎñÆ÷×ÊÔ´ÒªÇó±È½Ï¸ß£¬²¢·¢¾ÖÏÞÓÚÓ¦ÓÃÖУ¬JDK1.4ÒÔǰµÄΨһѡÔñ£¬µ«³ÌÐòÖ±¹Û¼òµ¥Ò×Àí½â¡£
NIO·½Ê½ÊÊÓÃÓÚÁ¬½ÓÊýÄ¿¶àÇÒÁ¬½Ó±È½Ï¶Ì£¨Çá²Ù×÷£©µÄ¼Ü¹¹£¬±ÈÈçÁÄÌì·þÎñÆ÷£¬²¢·¢¾ÖÏÞÓÚÓ¦ÓÃÖУ¬±à³Ì±È½Ï¸´ÔÓ£¬JDK1.4¿ªÊ¼Ö§³Ö¡£
AIO·½Ê½Ê¹ÓÃÓÚÁ¬½ÓÊýÄ¿¶àÇÒÁ¬½Ó±È½Ï³¤£¨ÖزÙ×÷£©µÄ¼Ü¹¹£¬±ÈÈçÏà²á·þÎñÆ÷£¬³ä·Öµ÷ÓÃOS²ÎÓë²¢·¢²Ù×÷£¬±à³Ì±È½Ï¸´ÔÓ£¬JDK7¿ªÊ¼Ö§³Ö¡£
ÁíÍ⣬I/OÊôÓڵײã²Ù×÷£¬ÐèÒª²Ù×÷ϵͳ֧³Ö£¬²¢·¢Ò²ÐèÒª²Ù×÷ϵͳµÄÖ§³Ö£¬ËùÒÔÐÔÄÜ·½Ã治ͬ²Ù×÷ϵͳ²îÒì»á±È½ÏÃ÷ÏÔ¡£
ÔÚ¸ßÐÔÄܵÄI/OÉè¼ÆÖУ¬ÓÐÁ½¸ö±È½ÏÖøÃûµÄģʽReactorºÍProactorģʽ£¬ÆäÖÐReactorģʽÓÃÓÚͬ²½I/O£¬¶øProactorÔËÓÃÓÚÒì²½I/O²Ù×÷¡£
ÔڱȽÏÕâÁ½¸öģʽ֮ǰ£¬ÎÒÃÇÊ×ÏȵĸãÃ÷°×¼¸¸ö¸ÅÄʲôÊÇ×èÈûºÍ·Ç×èÈû£¬Ê²Ã´ÊÇͬ²½ºÍÒì²½,ͬ²½ºÍÒì²½ÊÇÕë¶ÔÓ¦ÓóÌÐòºÍÄں˵Ľ»»¥¶øÑԵģ¬
ͬ²½Ö¸µÄÊÇÓû§½ø³Ì´¥·¢IO²Ù×÷²¢µÈ´ý»òÕßÂÖѯµÄÈ¥²é¿´IO²Ù×÷ÊÇ·ñ¾ÍÐ÷£¬¶øÒì²½ÊÇÖ¸Óû§½ø³Ì´¥·¢IO²Ù×÷ÒÔºó±ã¿ªÊ¼×ö×Ô¼ºµÄÊÂÇ飬¶øµ±IO²Ù×÷ÒѾÍê³ÉµÄʱºò»áµÃµ½IOÍê³ÉµÄ֪ͨ¡£
¶ø×èÈûºÍ·Ç×èÈûÊÇÕë¶ÔÓÚ½ø³ÌÔÚ·ÃÎÊÊý¾ÝµÄʱºò£¬¸ù¾ÝIO²Ù×÷µÄ¾ÍÐ÷״̬À´²ÉÈ¡µÄ²»Í¬·½Ê½£¬Ëµ°×ÁËÊÇÒ»ÖÖ¶ÁÈ¡»òÕßдÈë²Ù×÷º¯ÊýµÄʵÏÖ·½Ê½£¬×èÈû·½Ê½Ï¶ÁÈ¡»òÕßдÈ뺯Êý½«Ò»Ö±µÈ´ý£¬¶ø·Ç×èÈû·½Ê½Ï£¬¶ÁÈ¡»òÕßдÈ뺯Êý»áÁ¢¼´·µ»ØÒ»¸ö״ֵ̬¡£
Ò»°ãÀ´ËµI/OÄ£ÐÍ¿ÉÒÔ·ÖΪ£ºÍ¬²½×èÈû£¬Í¬²½·Ç×èÈû£¬Òì²½×èÈû£¬Òì²½·Ç×èÈûIO
ͬ²½×èÈûIO£ºÔÚ´ËÖÖ·½Ê½Ï£¬Óû§½ø³ÌÔÚ·¢ÆðÒ»¸öIO²Ù×÷ÒԺ󣬱ØÐëµÈ´ýIO²Ù×÷µÄÍê³É£¬Ö»Óе±ÕæÕýÍê³ÉÁËIO²Ù×÷ÒÔºó£¬Óû§½ø³Ì²ÅÄÜÔËÐС£JAVA´«Í³µÄIOÄ£ÐÍÊôÓÚ´ËÖÖ·½Ê½£¡
ͬ²½·Ç×èÈûIO:ÔÚ´ËÖÖ·½Ê½Ï£¬Óû§½ø³Ì·¢ÆðÒ»¸öIO²Ù×÷ÒÔºó±ß¿É·µ»Ø×öÆäËüÊÂÇ飬µ«ÊÇÓû§½ø³ÌÐèҪʱ²»Ê±µÄѯÎÊIO²Ù×÷ÊÇ·ñ¾ÍÐ÷£¬Õâ¾ÍÒªÇóÓû§½ø³Ì²»Í£µÄȥѯÎÊ£¬´Ó¶øÒýÈë²»±ØÒªµÄCPU×ÊÔ´ÀË·Ñ¡£ÆäÖÐĿǰJAVAµÄNIO¾ÍÊôÓÚͬ²½·Ç×èÈûIO¡£
Òì²½×èÈûIO£º´ËÖÖ·½Ê½ÏÂÊÇÖ¸Ó¦Ó÷¢ÆðÒ»¸öIO²Ù×÷ÒԺ󣬲»µÈ´ýÄÚºËIO²Ù×÷µÄÍê³É£¬µÈÄÚºËÍê³ÉIO²Ù×÷ÒÔºó»á֪ͨӦÓóÌÐò£¬ÕâÆäʵ¾ÍÊÇͬ²½ºÍÒì²½×î¹Ø¼üµÄÇø±ð£¬Í¬²½±ØÐëµÈ´ý»òÕßÖ÷¶¯µÄȥѯÎÊIOÊÇ·ñÍê³É£¬ÄÇôΪʲô˵ÊÇ×èÈûµÄÄØ£¿ÒòΪ´ËʱÊÇͨ¹ýselectϵͳµ÷ÓÃÀ´Íê³ÉµÄ£¬¶øselectº¯Êý±¾ÉíµÄʵÏÖ·½Ê½ÊÇ×èÈûµÄ£¬¶ø²ÉÓÃselectº¯ÊýÓиöºÃ´¦¾ÍÊÇËü¿ÉÒÔͬʱ¼àÌý¶à¸öÎļþ¾ä±ú£¬´Ó¶øÌá¸ßϵͳµÄ²¢·¢ÐÔ£¡
Òì²½·Ç×èÈûIO:ÔÚ´ËÖÖģʽÏ£¬Óû§½ø³ÌÖ»ÐèÒª·¢ÆðÒ»¸öIO²Ù×÷È»ºóÁ¢¼´·µ»Ø£¬µÈIO²Ù×÷ÕæÕýµÄÍê³ÉÒÔºó£¬Ó¦ÓóÌÐò»áµÃµ½IO²Ù×÷Íê³ÉµÄ֪ͨ£¬´ËʱÓû§½ø³ÌÖ»ÐèÒª¶ÔÊý¾Ý½øÐд¦Àí¾ÍºÃÁË£¬²»ÐèÒª½øÐÐʵ¼ÊµÄIO¶Áд²Ù×÷£¬
ÒòÎªÕæÕýµÄIO¶ÁÈ¡»òÕßдÈë²Ù×÷ÒѾÓÉÄÚºËÍê³ÉÁË¡£Ä¿Ç°JavaÖл¹Ã»ÓÐÖ§³Ö´ËÖÖIOÄ£ÐÍ
clientÒ»¸öÏ̵߳÷ÓÃÔ¶³Ì½Ó¿Ú£¬Éú³ÉÒ»¸öΨһµÄID£¨±ÈÈçÒ»¶ÎËæ»ú×Ö·û´®£¬UUIDµÈ£©£¬DubboÊÇʹÓÃAtomicLong´Ó0¿ªÊ¼ÀÛ¼ÆÊý×ֵĽ«´ò°üµÄ·½·¨µ÷ÓÃÐÅÏ¢£¨Èçµ÷ÓõĽӿÚÃû³Æ£¬·½·¨Ãû³Æ£¬²ÎÊýÖµÁбíµÈ£©£¬ºÍ´¦Àí½á¹ûµÄ»Øµ÷¶ÔÏócallback£¬È«²¿·â×°ÔÚÒ»Æð£¬×é³ÉÒ»¸ö¶ÔÏóobjectÏòרÃÅ´æ·Åµ÷ÓÃÐÅÏ¢µÄÈ«¾ÖConcurrentHashMapÀïÃæput(ID, object)½«IDºÍ´ò°üµÄ·½·¨µ÷ÓÃÐÅÏ¢·â×°³ÉÒ»¶ÔÏóconnRequest£¬Ê¹ÓÃIoSession.write(connRequest)Òì²½·¢ËͳöÈ¥µ±Ç°Ïß³ÌÔÙʹÓÃcallbackµÄget()·½·¨ÊÔͼ»ñȡԶ³Ì·µ»ØµÄ½á¹û£¬ÔÚget()ÄÚ²¿£¬ÔòʹÓÃsynchronized»ñÈ¡»Øµ÷¶ÔÏócallbackµÄËø£¬ ÔÙÏȼì²âÊÇ·ñÒѾ»ñÈ¡µ½½á¹û£¬Èç¹ûûÓУ¬È»ºóµ÷ÓÃcallbackµÄwait()·½·¨£¬ÊÍ·ÅcallbackÉϵÄËø£¬Èõ±Ç°Ï̴߳¦Óڵȴý״̬¡£·þÎñ¶Ë½ÓÊÕµ½ÇëÇó²¢´¦Àíºó£¬½«½á¹û£¨´Ë½á¹ûÖаüº¬ÁËÇ°ÃæµÄID£¬¼´»Ø´«£©·¢Ë͸ø¿Í»§¶Ë£¬¿Í»§¶ËsocketÁ¬½ÓÉÏרÃżàÌýÏûÏ¢µÄÏß³ÌÊÕµ½ÏûÏ¢£¬·ÖÎö½á¹û£¬È¡µ½ID£¬ÔÙ´ÓÇ°ÃæµÄConcurrentHashMapÀïÃæget(ID)£¬´Ó¶øÕÒµ½callback£¬½«·½·¨µ÷Óýá¹ûÉèÖõ½callback¶ÔÏóÀï¡£¼àÌýÏ߳̽Ó×ÅʹÓÃsynchronized»ñÈ¡»Øµ÷¶ÔÏócallbackµÄËø£¨ÒòÎªÇ°Ãæµ÷Óùýwait()£¬ÄǸöÏß³ÌÒÑÊÍ·ÅcallbackµÄËøÁË£©£¬ÔÙnotifyAll()£¬»½ÐÑÇ°Ãæ´¦Óڵȴý״̬µÄÏ̼߳ÌÐøÖ´ÐУ¨callbackµÄget()·½·¨¼ÌÐøÖ´ÐоÍÄÜÄõ½µ÷Óýá¹ûÁË£©£¬ÖÁ´Ë£¬Õû¸ö¹ý³Ì½áÊø¡£µ±Ç°Ïß³ÌÔõôÈÃËü¡°ÔÝÍ£¡±£¬µÈ½á¹û»ØÀ´ºó£¬ÔÙÏòºóÖ´ÐУ¿ ´ð£ºÏÈÉú³ÉÒ»¸ö¶ÔÏóobj£¬ÔÚÒ»¸öÈ«¾ÖmapÀïput(ID,obj)´æ·ÅÆðÀ´£¬ÔÙÓÃsynchronized»ñÈ¡objËø£¬ÔÙµ÷ÓÃobj.wait()Èõ±Ç°Ï̴߳¦Óڵȴý״̬£¬È»ºóÁíÒ»ÏûÏ¢¼àÌýÏ̵߳ȵ½·þ Îñ¶Ë½á¹ûÀ´Á˺ó£¬ÔÙmap.get(ID)ÕÒµ½obj£¬ÔÙÓÃsynchronized»ñÈ¡objËø£¬ÔÙµ÷ÓÃobj.notifyAll()»½ÐÑÇ°Ãæ´¦Óڵȴý״̬µÄÏ̡߳£ÕýÈçÇ°ÃæËù˵£¬SocketͨÐÅÊÇÒ»¸öȫ˫¹¤µÄ·½Ê½£¬Èç¹ûÓжà¸öÏß³Ìͬʱ½øÐÐÔ¶³Ì·½·¨µ÷Óã¬Õâʱ½¨Á¢ÔÚclient serverÖ®¼äµÄsocketÁ¬½ÓÉÏ»áÓкܶàË«·½·¢Ë͵ÄÏûÏ¢´«µÝ£¬Ç°ºó˳ÐòÒ²¿ÉÄÜÊÇÂÒÆß°ËÔãµÄ£¬server´¦ÀíÍê½á¹ûºó£¬½«½á¹ûÏûÏ¢·¢Ë͸øclient£¬clientÊÕµ½ºÜ¶àÏûÏ¢£¬Ôõô֪µÀÄĸöÏûÏ¢½á¹ûÊÇÔÏÈÄĸöÏ̵߳÷Óõģ¿ ´ð£ºÊ¹ÓÃÒ»¸öID£¬ÈÃÆäΨһ£¬È»ºó´«µÝ¸ø·þÎñ¶Ë£¬ÔÙ·þÎñ¶ËÓֻش«»ØÀ´£¬ÕâÑù¾ÍÖªµÀ½á¹ûÊÇÔÏÈÄĸöÏ̵߳ÄÁË¡£
ÔÚº¯ÊýÖж¨ÒåµÄһЩ»ù±¾ÀàÐ͵ıäÁ¿ºÍ¶ÔÏóµÄÒýÓñäÁ¿¶¼ÔÚº¯ÊýµÄÕ»ÄÚ´æÖзÖÅä¡£µ±ÔÚÒ»¶Î´úÂë¿é¶¨ÒåÒ»¸ö±äÁ¿Ê±£¬Java¾ÍÔÚÕ»ÖÐΪÕâ¸ö±äÁ¿·ÖÅäÄÚ´æ¿Õ¼ä£¬µ±³¬¹ý±äÁ¿µÄ×÷ÓÃÓòºó£¬Java»á×Ô¶¯ÊͷŵôΪ¸Ã±äÁ¿Ëù·ÖÅäµÄÄÚ´æ¿Õ¼ä£¬¸ÃÄÚ´æ¿Õ¼ä¿ÉÒÔÁ¢¼´±»Áí×÷ËûÓ᣶ÑÄÚ´æÓÃÀ´´æ·ÅÓÉnew´´½¨µÄ¶ÔÏóºÍÊý×é¡£ÔÚ¶ÑÖзÖÅäµÄÄڴ棬ÓÉJavaÐéÄâ»úµÄ×Ô¶¯À¬»ø»ØÊÕÆ÷À´¹ÜÀí¡£ÔÚ¶ÑÖвúÉúÁËÒ»¸öÊý×é»ò¶ÔÏóºó£¬»¹¿ÉÒÔÔÚÕ»Öж¨ÒåÒ»¸öÌØÊâµÄ±äÁ¿£¬ÈÃÕ»ÖÐÕâ¸ö±äÁ¿µÄȡֵµÈÓÚÊý×é»ò¶ÔÏóÔÚ¶ÑÄÚ´æÖеÄÊ×µØÖ·£¬Õ»ÖеÄÕâ¸ö±äÁ¿¾Í³ÉÁËÊý×é»ò¶ÔÏóµÄÒýÓñäÁ¿¡£ÒýÓñäÁ¿¾ÍÏ൱ÓÚÊÇΪÊý×é»ò¶ÔÏóÆðµÄÒ»¸öÃû³Æ£¬ÒÔºó¾Í¿ÉÒÔÔÚ³ÌÐòÖÐʹÓÃÕ»ÖеÄÒýÓñäÁ¿À´·ÃÎʶÑÖеÄÊý×é»ò¶ÔÏó¡£
ÔÚTreeMapµÄput()µÄʵÏÖ·½·¨ÖÐÖ÷Òª·ÖΪÁ½¸ö²½Ö裬µÚÒ»£º¹¹½¨ÅÅÐò¶þ²æÊ÷£¬µÚ¶þ£ºÆ½ºâ¶þ²æÊ÷¡£¶ÔÓÚÅÅÐò¶þ²æÊ÷µÄ´´½¨£¬ÆäÌí¼Ó½ÚµãµÄ¹ý³ÌÈçÏ£º1¡¢ÒÔ¸ù½ÚµãΪ³õʼ½Úµã½øÐмìË÷¡£2¡¢Ó뵱ǰ½Úµã½øÐбȶԣ¬ÈôÐÂÔö½ÚµãÖµ½Ï´ó£¬ÔòÒÔµ±Ç°½ÚµãµÄÓÒ×Ó½Úµã×÷Ϊеĵ±Ç°½Úµã¡£·ñÔòÒÔµ±Ç°½ÚµãµÄ×ó×Ó½Úµã×÷Ϊеĵ±Ç°½Úµã¡£3¡¢Ñ»·µÝ¹é2²½ÖèÖªµÀ¼ìË÷³öºÏÊʵÄÒ¶×Ó½ÚµãΪֹ¡£4¡¢½«ÐÂÔö½ÚµãÓë3²½ÖèÖÐÕÒµ½µÄ½Úµã½øÐбȶԣ¬Èç¹ûÐÂÔö½Úµã½Ï´ó£¬ÔòÌí¼ÓΪÓÒ×ӽڵ㣻·ñÔòÌí¼ÓΪ×ó×Ó½Úµã×óÐý£ºrotateLeft() Ëùν×óÐýת£¬¾ÍÊǽ«ÐÂÔö½Úµã£¨N£©µ±×öÆä¸¸½Úµã£¨P£©£¬½«Æä¸¸½ÚµãPµ±×öÐÂÔö½Úµã£¨N£©µÄ×ó×ӽڵ㡣¼´£ºG.left ---> N ,N.left ---> P¡£ÓÒÐý£ºrotateRight()ËùνÓÒÐýת¼´£¬P.right ---> G¡¢G.parent ---> P¡£
Èç¹û¶ÓÁÐÊǿյģ¬Ïû·ÑÕß»áÒ»Ö±µÈ´ý£¬µ±Éú²úÕßÌí¼ÓÔªËØÊ±ºò£¬Ïû·ÑÕßÊÇÈçºÎÖªµÀµ±Ç°¶ÓÁÐÓÐÔªËØµÄÄØ£¿Èç¹ûÈÃÄãÀ´Éè¼Æ×èÈû¶ÓÁÐÄã»áÈçºÎÉè¼Æ£¬ÈÃÉú²úÕߺÍÏû·ÑÕßÄܹ»¸ßЧÂʵĽøÐÐÍ¨Ñ¶ÄØ£¿ÈÃÎÒÃÇÏÈÀ´¿´¿´JDKÊÇÈçºÎʵÏֵġ£Ê¹ÓÃ֪ͨģʽʵÏÖ¡£Ëùν֪ͨģʽ£¬¾ÍÊǵ±Éú²úÕßÍùÂúµÄ¶ÓÁÐÀïÌí¼ÓÔªËØÊ±»á×èÈûסÉú²úÕߣ¬µ±Ïû·ÑÕßÏû·ÑÁËÒ»¸ö¶ÓÁÐÖеÄÔªËØºó£¬»á֪ͨÉú²úÕßµ±Ç°¶ÓÁпÉÓá£Í¨¹ý²é¿´JDKÔ´Âë·¢ÏÖArrayBlockingQueueʹÓÃÁËConditionÀ´ÊµÏÖµ±ÎÒÃÇÍù¶ÓÁÐÀï²åÈëÒ»¸öÔªËØÊ±£¬Èç¹û¶ÓÁв»¿ÉÓã¬×èÈûÉú²úÕßÖ÷Ҫͨ¹ýLockSupport.park(this);À´ÊµÏÖ¼ÌÐø½øÈëÔ´Â룬·¢ÏÖµ÷ÓÃsetBlockerÏȱ£´æÏ½«Òª×èÈûµÄỊ̈߳¬È»ºóµ÷ÓÃunsafe.park×èÈûµ±Ç°Ïß³Ìunsafe.parkÊǸönative·½·¨£¬parkÕâ¸ö·½·¨»á×èÈûµ±Ç°Ị̈߳¬Ö»ÓÐÒÔÏÂËÄÖÖÇé¿öÖеÄÒ»ÖÖ·¢Éúʱ£¬¸Ã·½·¨²Å»á·µ»Ø¡£Óëpark¶ÔÓ¦µÄunparkÖ´ÐлòÒѾִÐÐʱ¡£×¢Ò⣺ÒѾִÐÐÊÇÖ¸unparkÏÈÖ´ÐУ¬È»ºóÔÙÖ´ÐеÄpark¡£Ï̱߳»ÖжÏʱ¡£Èç¹û²ÎÊýÖеÄtime²»ÊÇÁ㣬µÈ´ýÁËÖ¸¶¨µÄºÁÃëÊýʱ¡£·¢ÉúÒì³£ÏÖÏóʱ¡£ÕâЩÒì³£ÊÂÏÈÎÞ·¨È·¶¨¡£ÎÒÃǼÌÐø¿´Ò»ÏÂJVMÊÇÈçºÎʵÏÖpark·½·¨µÄ£¬parkÔÚ²»Í¬µÄ²Ù×÷ϵͳʹÓò»Í¬µÄ·½Ê½ÊµÏÖ£¬ÔÚlinuxÏÂÊÇʹÓõÄÊÇϵͳ·½·¨pthread_cond_waitʵÏÖ¡£ÊµÏÖ´úÂëÔÚJVMÔ´Âë·¾¶src/os/linux/vm/os_linux.cppÀïµÄ os::PlatformEvent::park·½·¨pthread_cond_waitÊÇÒ»¸ö¶àÏ̵߳ÄÌõ¼þ±äÁ¿º¯Êý£¬condÊÇconditionµÄËõд£¬×ÖÃæÒâ˼¿ÉÒÔÀí½âΪÏß³ÌÔڵȴýÒ»¸öÌõ¼þ·¢Éú£¬Õâ¸öÌõ¼þÊÇÒ»¸öÈ«¾Ö±äÁ¿¡£Õâ¸ö·½·¨½ÓÊÕÁ½¸ö²ÎÊý£¬Ò»¸ö¹²Ïí±äÁ¿_cond£¬Ò»¸ö»¥³âÁ¿_mutex¡£¶øunpark·½·¨ÔÚlinuxÏÂÊÇʹÓÃpthread_cond_signalʵÏֵġ£park ÔÚwindowsÏÂÔòÊÇʹÓÃWaitForSingleObjectʵÏֵġ£µ±¶ÓÁÐÂúʱ£¬Éú²úÕßÍù×èÈû¶ÓÁÐÀï²åÈëÒ»¸öÔªËØ£¬Éú²úÕßÏß³Ì»á½øÈëWAITING (parking)״̬
1 ÎÞÃû¹ÜµÀ( pipe )£º¹ÜµÀÊÇÒ»ÖÖ°ëË«¹¤µÄͨÐÅ·½Ê½£¬Êý¾ÝÖ»Äܵ¥ÏòÁ÷¶¯£¬¶øÇÒÖ»ÄÜÔÚ¾ßÓÐÇ×Ôµ¹ØÏµµÄ½ø³Ì¼äʹÓ᣽ø³ÌµÄ2Ç×Ôµ¹ØÏµÍ¨³£ÊÇÖ¸¸¸×Ó½ø³Ì¹ØÏµ¡£2 ¸ß¼¶¹ÜµÀ(popen)£º½«ÁíÒ»¸ö³ÌÐòµ±×öÒ»¸öеĽø³ÌÔÚµ±Ç°³ÌÐò½ø³ÌÖÐÆô¶¯£¬ÔòËüËãÊǵ±Ç°³ÌÐòµÄ×Ó½ø³Ì£¬ÕâÖÖ·½Ê½ÎÒÃdzÉΪ¸ß¼¶¹ÜµÀ·½Ê½¡£3 ÓÐÃû¹ÜµÀ (named pipe) £º ÓÐÃû¹ÜµÀÒ²ÊǰëË«¹¤µÄͨÐÅ·½Ê½£¬µ«ÊÇËüÔÊÐíÎÞÇ×Ôµ¹ØÏµ½ø³Ì¼äµÄͨÐÅ¡£4 ÏûÏ¢¶ÓÁÐ( message queue ) £º ÏûÏ¢¶ÓÁÐÊÇÓÉÏûÏ¢µÄÁ´±í£¬´æ·ÅÔÚÄÚºËÖв¢ÓÉÏûÏ¢¶ÓÁбêʶ·û±êʶ¡£ÏûÏ¢¶ÓÁп˷þÁËÐźŴ«µÝÐÅÏ¢ÉÙ¡¢¹ÜµÀÖ»ÄܳÐÔØÎÞ¸ñʽ×Ö½ÚÁ÷ÒÔ¼°»º³åÇø´óСÊÜÏÞµÈȱµã¡£5 ÐźÅÁ¿( semophore ) £º ÐźÅÁ¿ÊÇÒ»¸ö¼ÆÊýÆ÷£¬¿ÉÒÔÓÃÀ´¿ØÖƶà¸ö½ø³Ì¶Ô¹²Ïí×ÊÔ´µÄ·ÃÎÊ¡£Ëü³£×÷ΪһÖÖËø»úÖÆ£¬·Àֹij½ø³ÌÕýÔÚ·ÃÎʹ²Ïí×ÊԴʱ£¬ÆäËû½ø³ÌÒ²·ÃÎʸÃ×ÊÔ´¡£Òò´Ë£¬Ö÷Òª×÷Ϊ½ø³Ì¼äÒÔ¼°Í¬Ò»½ø³ÌÄÚ²»Í¬Ïß³ÌÖ®¼äµÄͬ²½ÊֶΡ£6ÐźŠ( sinal ) £º ÐźÅÊÇÒ»ÖֱȽϸ´ÔÓµÄͨÐÅ·½Ê½£¬ÓÃÓÚ֪ͨ½ÓÊÕ½ø³Ìij¸öʼþÒѾ·¢Éú¡£7¹²ÏíÄÚ´æ( shared memory ) £º¹²ÏíÄÚ´æ¾ÍÊÇÓ³ÉäÒ»¶ÎÄܱ»ÆäËû½ø³ÌËù·ÃÎʵÄÄڴ棬Õâ¶Î¹²ÏíÄÚ´æÓÉÒ»¸ö½ø³Ì´´½¨£¬µ«¶à¸ö½ø³Ì¶¼¿ÉÒÔ·ÃÎÊ¡£¹²ÏíÄÚ´æÊÇ×î¿ìµÄ IPC ·½Ê½£¬ËüÊÇÕë¶ÔÆäËû½ø³Ì¼äͨÐÅ·½Ê½ÔËÐÐЧÂʵͶø×¨ÃÅÉè¼ÆµÄ¡£ËüÍùÍùÓëÆäËûͨÐÅ»úÖÆ£¬ÈçÐźÅÁ½£¬ÅäºÏʹÓã¬À´ÊµÏÖ½ø³Ì¼äµÄͬ²½ºÍͨÐÅ¡£8Ì×½Ó×Ö( socket ) £º Ì×½â¿ÚÒ²ÊÇÒ»ÖÖ½ø³Ì¼äͨÐÅ»úÖÆ£¬ÓëÆäËûͨÐÅ»úÖÆ²»Í¬µÄÊÇ£¬Ëü¿ÉÓÃÓÚ²»Í¬»úÆ÷¼äµÄ½ø³ÌͨÐÅ
1¡¢newCachedThreadPool£ºÓÃÀ´´´½¨Ò»¸ö¿É»º´æÏ̳߳أ¬¸ÃÏ̳߳ØÃ»Ó㤶ÈÏÞÖÆ£¬¶ÔÓÚеÄÈÎÎñ£¬Èç¹ûÓпÕÏеÄỊ̈߳¬ÔòʹÓÿÕÏеÄÏß³ÌÖ´ÐУ¬Èç¹ûûÓУ¬Ôòн¨Ò»¸öÏß³ÌÀ´Ö´ÐÐÈÎÎñ¡£Èç¹ûÏ̳߳س¤¶È³¬¹ý´¦ÀíÐèÒª£¬¿ÉÁé»î»ØÊÕ¿ÕÏÐÏß³Ì2¡¢newFixedThreadPool £ºÓÃÀ´´´½¨Ò»¸ö¶¨³¤Ï̳߳أ¬¿É¿ØÖÆÏß³Ì×î´ó²¢·¢Êý£¬³¬³öµÄÏ̻߳áÔÚ¶ÓÁÐÖеȴý¡£¶¨³¤Ï̳߳صĴóСͨ³£¸ù¾Ýϵͳ×ÊÔ´½øÐÐÉèÖãºRuntime.getRuntime().availableProcessors()3¡¢newScheduledThreadPool£ºÓÃÀ´´´½¨Ò»¸ö¶¨³¤Ï̳߳أ¬²¢ÇÒÖ§³Ö¶¨Ê±ºÍÖÜÆÚÐÔµÄÖ´ÐÐÈÎÎñ4¡¢newSingleThreadExecutor£ºÓÃÀ´´´½¨Ò»¸öµ¥Ï̻߳¯µÄÏ̳߳أ¬ËüÖ»ÓÃΨһµÄ¹¤×÷Ïß³ÌÀ´Ö´ÐÐÈÎÎñ£¬Ò»´ÎÖ»Ö§³ÖÒ»¸ö£¬ËùÓÐÈÎÎñ°´ÕÕÖ¸¶¨µÄ˳ÐòÖ´ÐÐ
ÔÚJavaÖУ¬Èç¹ûÿµ±Ò»¸öÇëÇóµ½´ï¾Í´´½¨Ò»¸öÐÂỊ̈߳¬¿ªÏúÊÇÏ൱´óµÄ¡£ÔÚʵ¼ÊʹÓÃÖУ¬Ã¿¸öÇëÇó´´½¨ÐÂÏ̵߳ķþÎñÆ÷ÔÚ´´½¨ºÍÏú»ÙÏß³ÌÉÏ»¨·ÑµÄʱ¼äºÍÏûºÄµÄϵͳ×ÊÔ´£¬ÉõÖÁ¿ÉÄÜÒª±È»¨ÔÚ´¦Àíʵ¼ÊµÄÓû§ÇëÇóµÄʱ¼äºÍ×ÊÔ´Òª¶àµÃ¶à¡£³ýÁË´´½¨ºÍÏú»ÙÏ̵߳ĿªÏúÖ®Í⣬»î¶¯µÄÏß³ÌÒ²ÐèÒªÏûºÄϵͳ×ÊÔ´¡£Èç¹ûÔÚÒ»¸öJVMÀï´´½¨Ì«¶àµÄỊ̈߳¬¿ÉÄܻᵼÖÂϵͳÓÉÓÚ¹ý¶ÈÏûºÄÄÚ´æ»ò¡°Çл»¹ý¶È¡±¶øµ¼ÖÂϵͳ×ÊÔ´²»×㡣ΪÁË·ÀÖ¹×ÊÔ´²»×㣬·þÎñÆ÷Ó¦ÓóÌÐòÐèҪһЩ°ì·¨À´ÏÞÖÆÈκθø¶¨Ê±¿Ì´¦ÀíµÄÇëÇóÊýÄ¿£¬¾¡¿ÉÄܼõÉÙ´´½¨ºÍÏú»ÙÏ̵߳ĴÎÊý£¬ÌرðÊÇһЩ×ÊÔ´ºÄ·Ñ±È½Ï´óµÄÏ̵߳Ĵ´½¨ºÍÏú»Ù£¬¾¡Á¿ÀûÓÃÒÑÓжÔÏóÀ´½øÐзþÎñ£¬Õâ¾ÍÊÇ¡°³Ø»¯×ÊÔ´¡±¼¼Êõ²úÉúµÄÔÒò¡£ Ï̳߳ØÖ÷ÒªÓÃÀ´½â¾öÏß³ÌÉúÃüÖÜÆÚ¿ªÏúÎÊÌâºÍ×ÊÔ´²»×ãÎÊÌ⡣ͨ¹ý¶Ô¶à¸öÈÎÎñÖØÓÃỊ̈߳¬Ï̴߳´½¨µÄ¿ªÏú¾Í±»·Ö̯µ½Á˶à¸öÈÎÎñÉÏÁË£¬¶øÇÒÓÉÓÚÔÚÇëÇóµ½´ïʱÏß³ÌÒѾ´æÔÚ£¬ËùÒÔÏû³ýÁËÏ̴߳´½¨Ëù´øÀ´µÄÑÓ³Ù¡£ÕâÑù£¬¾Í¿ÉÒÔÁ¢¼´ÎªÇëÇó·þÎñ£¬Ê¹Ó¦ÓóÌÐòÏìÓ¦¸ü¿ì¡£ÁíÍ⣬ͨ¹ýÊʵ±µØµ÷ÕûÏ̳߳ØÖеÄÏß³ÌÊýÄ¿¿ÉÒÔ·ÀÖ¹³öÏÖ×ÊÔ´²»×ãµÄÇé¿ö
volatile¹Ø¼ü×Ö£¬×÷ÓÃÊÇÇ¿ÖÆÏß³ÌÈ¥¹«¹²¶ÑÕ»ÖзÃÎÊisContinuePrintµÄÖµ¡£ ʹÓÃvolatile¹Ø¼ü×ÖÔö¼ÓÁËʵÀý±äÁ¿ÔÚ¶à¸öÏß³ÌÖ®¼äµÄ¿É¼ûÐÔ£¬µ«volatile¹Ø¼ü×ÖÓÐÒ»¸öÖÂÃüµÄȱÏÝÊDz»Ö§³ÖÔ×ÓÐÔ synchronizedÓëvolatile¹Ø¼ü×ÖÖ®¼äµÄ±È½Ï¹Ø¼ü×ÖvolatileÊÇÏß³Ìͬ²½µÄÇáÁ¿ÊµÏÖ£¬ËùÒÔvolatile¹Ø¼ü×ÖÐÔÄܱÈsynchronizedºÃ¡£volatileÖ»ÄÜÐÞÊαäÁ¿£¬synchronized¿ÉÒÔÐÞÊη½·¨£¬´úÂë¿évolatile²»»á×èÈûỊ̈߳¬synchronized»á×èÈûÏß³ÌvolatileÄܱ£Ö¤Êý¾ÝµÄ¿É¼ûÐÔ£¬²»±£Ö¤Ô×ÓÐÔ£¬synchronized¿ÉÒÔ±£Ö¤Ô×ÓÐÔ£¬¿ÉÒÔ¼ä½Ó±£Ö¤¿É¼ûÐÔ£¬Ëü»á½«¹«¹²ÄÚ´æºÍ˽ÓÐÄÚ´æµÄÊý¾Ý×öͬ²½´¦Àí¡£volatile½â¾öµÄÊDZäÁ¿ÔÚ¶à¸öÏß³ÌÖ®¼äµÄ¿É¼ûÐÔ£¬synchronized½â¾öµÄÊǶà¸öÏß³ÌÖ®¼ä·ÃÎÊ×ÊÔ´µÄͬ²½ÐÔ Çë¼ÇסJavaµÄͬ²½»úÖÆ¶¼ÊÇÎ§ÈÆÁ½µã£ºÔ×ÓÐÔ£¬Ïß³ÌÖ®¼äµÄ¿É¼ûÐÔ.Ö»ÓÐÂú×ãÁËÕâÁ½µã²ÅÄܳƵÃÉÏÊÇͬ²½µÄ¡£JavaÖеÄsynchronizedºÍvolatileÁ½¸ö¹Ø¼ü×Ö·Ö±ðÖ´ÐеÄÊÇÔ×ÓÐÔºÍÏß³ÌÖ®¼äµÄ¿É¼ûÐÔ
Ϊ²éѯ»º´æÓÅ»¯ÄãµÄ²éѯ
EXPLAIN ÄãµÄ SELECT ²éѯ
µ±Ö»ÒªÒ»ÐÐÊý¾ÝʱʹÓà LIMIT 1
ΪËÑË÷×ֶν¨Ë÷Òý
ÔÚJoin±íµÄʱºòʹÓÃÏ൱ÀàÐ͵ÄÀý£¬²¢½«ÆäË÷Òý
ǧÍò²»Òª ORDER BY RAND()
±ÜÃâ SELECT *
ÓÀԶΪÿÕűíÉèÖÃÒ»¸öID,ʹÓÃÊý×Ö×ÔÔö
ʹÓà ENUM ¶ø²»ÊÇ VARCHAR
´Ó PROCEDURE ANALYSE() È¡µÃ½¨Òé
¾¡¿ÉÄܵÄʹÓà NOT NULL
Prepared StatementsºÜÏñ´æ´¢¹ý³Ì£¬ÊÇÒ»ÖÖÔËÐÐÔÚºǫ́µÄSQLÓï¾ä¼¯ºÏ£¬ÎÒÃÇ¿ÉÒÔ´ÓʹÓà prepared statements »ñµÃºÜ¶àºÃ´¦£¬ÎÞÂÛÊÇÐÔÄÜÎÊÌ⻹Êǰ²È«ÎÊÌâ
ÎÞ»º³åµÄ²éѯ
°ÑIPµØÖ·´æ³É UNSIGNED INT
¹Ì¶¨³¤¶ÈµÄ±í»á¸ü¿ì
´¹Ö±·Ö¸î
²ð·Ö´óµÄ DELETE »ò INSERT Óï¾ä
ԽСµÄÁлáÔ½¿ì
Ñ¡ÔñÕýÈ·µÄ´æ´¢ÒýÇæ
MyISAM ÊʺÏÓÚһЩÐèÒª´óÁ¿²éѯµÄÓ¦Ó㬵«Æä¶ÔÓÚÓдóÁ¿Ð´²Ù×÷²¢²»ÊǺܺá£ÉõÖÁÄãÖ»ÊÇÐèÒªupdateÒ»¸ö×ֶΣ¬Õû¸ö±í¶¼»á±»ËøÆðÀ´£¬¶ø±ðµÄ½ø³Ì£¬¾ÍËãÊǶÁ½ø³Ì¶¼ÎÞ·¨²Ù×÷Ö±µ½¶Á²Ù×÷Íê³É¡£ÁíÍ⣬MyISAM ¶ÔÓÚ SELECT COUNT(*) ÕâÀàµÄ¼ÆËãÊdz¬¿ìÎޱȵġ£
InnoDB µÄÇ÷ÊÆ»áÊÇÒ»¸ö·Ç³£¸´ÔӵĴ洢ÒýÇæ£¬¶ÔÓÚһЩСµÄÓ¦Óã¬Ëü»á±È MyISAM »¹Âý¡£ËûÊÇËüÖ§³Ö¡°ÐÐËø¡± £¬ÓÚÊÇÔÚд²Ù×÷±È½Ï¶àµÄʱºò£¬»á¸üÓÅÐã¡£²¢ÇÒ£¬Ëû»¹Ö§³Ö¸ü¶àµÄ¸ß¼¶Ó¦Ó㬱ÈÈ磺ÊÂÎñ
ʹÓÃÒ»¸ö¶ÔÏó¹ØÏµÓ³ÉäÆ÷£¨Object Relational Mapper£©
СÐÄ¡°ÓÀ¾ÃÁ´½Ó¡±
¡°ÓÀ¾ÃÁ´½Ó¡±µÄÄ¿µÄÊÇÓÃÀ´¼õÉÙÖØÐ´´½¨MySQLÁ´½ÓµÄ´ÎÊý¡£µ±Ò»¸öÁ´½Ó±»´´½¨ÁË£¬Ëü»áÓÀÔ¶´¦ÔÚÁ¬½ÓµÄ״̬£¬¾ÍËãÊÇÊý¾Ý¿â²Ù×÷ÒѾ½áÊøÁË¡£¶øÇÒ£¬×Ô´ÓÎÒÃǵÄApache¿ªÊ¼ÖØÓÃËüµÄ×Ó½ø³Ìºó¡ª¡ªÒ²¾ÍÊÇ˵£¬ÏÂÒ»´ÎµÄHTTPÇëÇó»áÖØÓÃApacheµÄ×Ó½ø³Ì£¬²¢ÖØÓÃÏàͬµÄ MySQL Á´½Ó
1 .¶Ô²éѯ½øÐÐÓÅ»¯£¬Ó¦¾¡Á¿±ÜÃâÈ«±íɨÃ裬Ê×ÏÈÓ¦¿¼ÂÇÔÚ where ¼° order by Éæ¼°µÄÁÐÉϽ¨Á¢Ë÷Òý¡£
2 .Ó¦¾¡Á¿±ÜÃâÔÚ where ×Ó¾äÖÐʹÓÃ!=»ò<>²Ù×÷·û£¬·ñÔò½«ÒýÇæ·ÅÆúʹÓÃË÷Òý¶ø½øÐÐÈ«±íɨÃè¡£
3 .Ó¦¾¡Á¿±ÜÃâÔÚ where ×Ó¾äÖжÔ×ֶνøÐÐ null ÖµÅжϣ¬·ñÔò½«µ¼ÖÂÒýÇæ·ÅÆúʹÓÃË÷Òý¶ø½øÐÐÈ«±íɨÃ裬È磺
select id from t where num is null
¿ÉÒÔÔÚnumÉÏÉèÖÃĬÈÏÖµ0£¬È·±£±íÖÐnumÁÐûÓÐnullÖµ£¬È»ºóÕâÑù²éѯ£º
select id from t where num=0
4 .Ó¦¾¡Á¿±ÜÃâÔÚ where ×Ó¾äÖÐʹÓà or À´Á¬½ÓÌõ¼þ£¬·ñÔò½«µ¼ÖÂÒýÇæ·ÅÆúʹÓÃË÷Òý¶ø½øÐÐÈ«±íɨÃ裬È磺
select id from t where num=10 or num=20
¿ÉÒÔÕâÑù²éѯ£º
select id from t where num=10
union all
select id from t where num=20
5 .ÏÂÃæµÄ²éѯҲ½«µ¼ÖÂÈ«±íɨÃ裺
select id from t where name like '%abc%'
ÈôÒªÌá¸ßЧÂÊ£¬¿ÉÒÔ¿¼ÂÇÈ«ÎļìË÷¡£
6 .in ºÍ not in Ò²ÒªÉ÷Ó㬷ñÔò»áµ¼ÖÂÈ«±íɨÃ裬È磺
select id from t where num in(1,2,3)
¶ÔÓÚÁ¬ÐøµÄÊýÖµ£¬ÄÜÓà between ¾Í²»ÒªÓà in ÁË£º
select id from t where num between 1 and 3
7 .Èç¹ûÔÚ where ×Ó¾äÖÐʹÓòÎÊý£¬Ò²»áµ¼ÖÂÈ«±íɨÃè¡£ÒòΪSQLÖ»ÓÐÔÚÔËÐÐʱ²Å»á½âÎö¾Ö²¿±äÁ¿£¬µ«ÓÅ»¯³ÌÐò²»Äܽ«·ÃÎʼƻ®µÄÑ¡ÔñÍÆ³Ùµ½ÔËÐÐʱ£»Ëü±ØÐëÔÚ±àÒëʱ½øÐÐÑ¡Ôñ¡£È»¶ø£¬Èç¹ûÔÚ±àÒëʱ½¨Á¢·ÃÎʼƻ®£¬±äÁ¿µÄÖµ»¹ÊÇδ֪µÄ£¬Òò¶øÎÞ·¨×÷ΪË÷ÒýÑ¡ÔñµÄÊäÈëÏî¡£ÈçÏÂÃæÓï¾ä½«½øÐÐÈ«±íɨÃ裺
select id from t where [email protected]
¿ÉÒÔ¸ÄÎªÇ¿ÖÆ²éѯʹÓÃË÷Òý£º
select id from t with(index(Ë÷ÒýÃû)) where [email protected]
8 .Ó¦¾¡Á¿±ÜÃâÔÚ where ×Ó¾äÖжÔ×ֶνøÐбí´ïʽ²Ù×÷£¬Õ⽫µ¼ÖÂÒýÇæ·ÅÆúʹÓÃË÷Òý¶ø½øÐÐÈ«±íɨÃè¡£È磺
select id from t where num/2=100
Ó¦¸ÄΪ:
select id from t where num=100*2
9 .Ó¦¾¡Á¿±ÜÃâÔÚwhere×Ó¾äÖжÔ×ֶνøÐк¯Êý²Ù×÷£¬Õ⽫µ¼ÖÂÒýÇæ·ÅÆúʹÓÃË÷Òý¶ø½øÐÐÈ«±íɨÃè¡£È磺
select id from t where substring(name,1,3)='abc'--nameÒÔabc¿ªÍ·µÄid
select id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30'Éú³ÉµÄid
Ó¦¸ÄΪ:
select id from t where name like 'abc%'
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'
10 .²»ÒªÔÚ where ×Ó¾äÖеġ°=¡±×ó±ß½øÐк¯Êý¡¢ËãÊõÔËËã»òÆäËû±í´ïʽÔËË㣬·ñÔòϵͳ½«¿ÉÄÜÎÞ·¨ÕýȷʹÓÃË÷Òý¡£
11 .ÔÚʹÓÃË÷Òý×Ö¶Î×÷ΪÌõ¼þʱ£¬Èç¹û¸ÃË÷ÒýÊǸ´ºÏË÷Òý£¬ÄÇô±ØÐëʹÓõ½¸ÃË÷ÒýÖеĵÚÒ»¸ö×Ö¶Î×÷ΪÌõ¼þʱ²ÅÄܱ£Ö¤ÏµÍ³Ê¹ÓøÃË÷Òý£¬·ñÔò¸ÃË÷Òý½«²»»á±»Ê¹Ó㬲¢ÇÒÓ¦¾¡¿ÉÄܵÄÈÃ×Ö¶Î˳ÐòÓëË÷Òý˳ÐòÏàÒ»Ö¡£
12 .²»ÒªÐ´Ò»Ð©Ã»ÓÐÒâÒåµÄ²éѯ£¬ÈçÐèÒªÉú³ÉÒ»¸ö¿Õ±í½á¹¹£º
select col1,col2 into #t from t where 1=0
ÕâÀà´úÂë²»»á·µ»ØÈκνá¹û¼¯£¬µ«ÊÇ»áÏûºÄϵͳ×ÊÔ´µÄ£¬Ó¦¸Ä³ÉÕâÑù£º
create table #t(...)
13 .ºÜ¶àʱºòÓà exists ´úÌæ in ÊÇÒ»¸öºÃµÄÑ¡Ôñ£º
select num from a where num in(select num from b)
ÓÃÏÂÃæµÄÓï¾äÌæ»»£º
select num from a where exists(select 1 from b where num=a.num)
14 .²¢²»ÊÇËùÓÐË÷Òý¶Ô²éѯ¶¼ÓÐЧ£¬SQLÊǸù¾Ý±íÖÐÊý¾ÝÀ´½øÐвéѯÓÅ»¯µÄ£¬µ±Ë÷ÒýÁÐÓдóÁ¿Êý¾ÝÖØ¸´Ê±£¬SQL²éѯ¿ÉÄܲ»»áÈ¥ÀûÓÃË÷Òý£¬ÈçÒ»±íÖÐÓÐ×Ö¶Îsex£¬male¡¢female¼¸ºõ¸÷Ò»°ë£¬ÄÇô¼´Ê¹ÔÚsexÉϽ¨ÁËË÷ÒýÒ²¶Ô²éѯЧÂÊÆð²»ÁË×÷Óá£
15 .Ë÷Òý²¢²»ÊÇÔ½¶àÔ½ºÃ£¬Ë÷Òý¹ÌÈ»¿ÉÒÔÌá¸ßÏàÓ¦µÄ select µÄЧÂÊ£¬µ«Í¬Ê±Ò²½µµÍÁË insert ¼° update µÄЧÂÊ£¬ÒòΪ insert »ò update ʱÓпÉÄÜ»áÖØ½¨Ë÷Òý£¬ËùÒÔÔõÑù½¨Ë÷ÒýÐèÒªÉ÷ÖØ¿¼ÂÇ£¬ÊÓ¾ßÌåÇé¿ö¶ø¶¨¡£Ò»¸ö±íµÄË÷ÒýÊý×îºÃ²»Òª³¬¹ý6¸ö£¬ÈôÌ«¶àÔòÓ¦¿¼ÂÇһЩ²»³£Ê¹Óõ½µÄÁÐÉϽ¨µÄË÷ÒýÊÇ·ñÓбØÒª¡£
16 .Ó¦¾¡¿ÉÄܵıÜÃâ¸üРclustered Ë÷ÒýÊý¾ÝÁУ¬ÒòΪ clustered Ë÷ÒýÊý¾ÝÁеÄ˳Ðò¾ÍÊDZí¼Ç¼µÄÎïÀí´æ´¢Ë³Ðò£¬Ò»µ©¸ÃÁÐÖµ¸Ä±ä½«µ¼ÖÂÕû¸ö±í¼Ç¼µÄ˳ÐòµÄµ÷Õû£¬»áºÄ·ÑÏ൱´óµÄ×ÊÔ´¡£ÈôÓ¦ÓÃϵͳÐèҪƵ·±¸üРclustered Ë÷ÒýÊý¾ÝÁУ¬ÄÇôÐèÒª¿¼ÂÇÊÇ·ñÓ¦½«¸ÃË÷Òý½¨Îª clustered Ë÷Òý¡£
17 .¾¡Á¿Ê¹ÓÃÊý×ÖÐÍ×ֶΣ¬ÈôÖ»º¬ÊýÖµÐÅÏ¢µÄ×ֶξ¡Á¿²»ÒªÉè¼ÆÎª×Ö·ûÐÍ£¬Õâ»á½µµÍ²éѯºÍÁ¬½ÓµÄÐÔÄÜ£¬²¢»áÔö¼Ó´æ´¢¿ªÏú¡£ÕâÊÇÒòΪÒýÇæÔÚ´¦Àí²éѯºÍÁ¬½Óʱ»áÖð¸ö±È½Ï×Ö·û´®ÖÐÿһ¸ö×Ö·û£¬¶ø¶ÔÓÚÊý×ÖÐͶøÑÔÖ»ÐèÒª±È½ÏÒ»´Î¾Í¹»ÁË¡£
18 .¾¡¿ÉÄܵÄʹÓà varchar/nvarchar ´úÌæ char/nchar £¬ÒòΪÊ×Ïȱ䳤×ֶδ洢¿Õ¼äС£¬¿ÉÒÔ½ÚÊ¡´æ´¢¿Õ¼ä£¬Æä´Î¶ÔÓÚ²éѯÀ´Ëµ£¬ÔÚÒ»¸öÏà¶Ô½ÏСµÄ×Ö¶ÎÄÚËÑË÷ЧÂÊÏÔȻҪ¸ßЩ¡£
19 .Èκεط½¶¼²»ÒªÊ¹Óà select * from t £¬ÓþßÌåµÄ×Ö¶ÎÁбí´úÌæ¡°*¡±£¬²»Òª·µ»ØÓò»µ½µÄÈκÎ×ֶΡ£
20 .¾¡Á¿Ê¹Óñí±äÁ¿À´´úÌæÁÙʱ±í¡£Èç¹û±í±äÁ¿°üº¬´óÁ¿Êý¾Ý£¬Çë×¢ÒâË÷Òý·Ç³£ÓÐÏÞ£¨Ö»ÓÐÖ÷¼üË÷Òý£©¡£
21 .±ÜÃâÆµ·±´´½¨ºÍɾ³ýÁÙʱ±í£¬ÒÔ¼õÉÙϵͳ±í×ÊÔ´µÄÏûºÄ¡£
22 .ÁÙʱ±í²¢²»ÊDz»¿ÉʹÓã¬Êʵ±µØÊ¹ÓÃËüÃÇ¿ÉÒÔʹijЩÀý³Ì¸üÓÐЧ£¬ÀýÈ磬µ±ÐèÒªÖØ¸´ÒýÓôóÐͱí»ò³£ÓñíÖеÄij¸öÊý¾Ý¼¯Ê±¡£µ«ÊÇ£¬¶ÔÓÚÒ»´ÎÐÔʼþ£¬×îºÃʹÓõ¼³ö±í¡£
23 .ÔÚн¨ÁÙʱ±íʱ£¬Èç¹ûÒ»´ÎÐÔ²åÈëÊý¾ÝÁ¿ºÜ´ó£¬ÄÇô¿ÉÒÔʹÓà select into ´úÌæ create table£¬±ÜÃâÔì³É´óÁ¿ log £¬ÒÔÌá¸ßËÙ¶È£»Èç¹ûÊý¾ÝÁ¿²»´ó£¬ÎªÁË»ººÍϵͳ±íµÄ×ÊÔ´£¬Ó¦ÏÈcreate table£¬È»ºóinsert¡£
24 .Èç¹ûʹÓõ½ÁËÁÙʱ±í£¬ÔÚ´æ´¢¹ý³ÌµÄ×îºóÎñ±Ø½«ËùÓеÄÁÙʱ±íÏÔʽɾ³ý£¬ÏÈ truncate table £¬È»ºó drop table £¬ÕâÑù¿ÉÒÔ±ÜÃâϵͳ±íµÄ½Ï³¤Ê±¼äËø¶¨¡£
25 .¾¡Á¿±ÜÃâʹÓÃÓα꣬ÒòΪÓαêµÄЧÂʽϲÈç¹ûÓαê²Ù×÷µÄÊý¾Ý³¬¹ý1ÍòÐУ¬ÄÇô¾ÍÓ¦¸Ã¿¼ÂǸÄд¡£
26 .ʹÓûùÓÚÓαêµÄ·½·¨»òÁÙʱ±í·½·¨Ö®Ç°£¬Ó¦ÏÈѰÕÒ»ùÓÚ¼¯µÄ½â¾ö·½°¸À´½â¾öÎÊÌ⣬»ùÓÚ¼¯µÄ·½·¨Í¨³£¸üÓÐЧ¡£
27 .ÓëÁÙʱ±íÒ»Ñù£¬Óα겢²»ÊDz»¿ÉʹÓ᣶ÔСÐÍÊý¾Ý¼¯Ê¹Óà FAST_FORWARD Óαêͨ³£ÒªÓÅÓÚÆäËûÖðÐд¦Àí·½·¨£¬ÓÈÆäÊÇÔÚ±ØÐëÒýÓü¸¸ö±í²ÅÄÜ»ñµÃËùÐèµÄÊý¾Ýʱ¡£ÔÚ½á¹û¼¯ÖаüÀ¨¡°ºÏ¼Æ¡±µÄÀý³Ìͨ³£Òª±ÈʹÓÃÓαêÖ´ÐеÄËٶȿ졣Èç¹û¿ª·¢Ê±¼äÔÊÐí£¬»ùÓÚÓαêµÄ·½·¨ºÍ»ùÓÚ¼¯µÄ·½·¨¶¼¿ÉÒÔ³¢ÊÔһϣ¬¿´ÄÄÒ»ÖÖ·½·¨µÄЧ¹û¸üºÃ¡£
28 .ÔÚËùÓеĴ洢¹ý³ÌºÍ´¥·¢Æ÷µÄ¿ªÊ¼´¦ÉèÖà SET NOCOUNT ON £¬ÔÚ½áÊøÊ±ÉèÖà SET NOCOUNT OFF ¡£ÎÞÐèÔÚÖ´Ðд洢¹ý³ÌºÍ´¥·¢Æ÷µÄÿ¸öÓï¾äºóÏò¿Í»§¶Ë·¢ËÍ DONE_IN_PROC ÏûÏ¢¡£
29 .¾¡Á¿±ÜÃâÏò¿Í»§¶Ë·µ»Ø´óÊý¾ÝÁ¿£¬ÈôÊý¾ÝÁ¿¹ý´ó£¬Ó¦¸Ã¿¼ÂÇÏàÓ¦ÐèÇóÊÇ·ñºÏÀí¡£
30 .¾¡Á¿±ÜÃâ´óÊÂÎñ²Ù×÷£¬Ìá¸ßϵͳ²¢·¢ÄÜÁ¦
MySQLĿǰÖ÷ÒªÓÐÒÔϼ¸ÖÖË÷ÒýÀàÐÍ£ºFULLTEXT£¬HASH£¬BTREE£¬RTREE¡£
ÄÇô£¬Õ⼸ÖÖË÷ÒýÓÐʲô¹¦ÄܺÍÐÔÄÜÉϵIJ»Í¬ÄØ£¿
FULLTEXT
¼´ÎªÈ«ÎÄË÷Òý£¬Ä¿Ç°Ö»ÓÐMyISAMÒýÇæÖ§³Ö¡£Æä¿ÉÒÔÔÚCREATE TABLE £¬ALTER TABLE £¬CREATE INDEX ʹÓ㬲»¹ýĿǰֻÓÐ CHAR¡¢VARCHAR £¬TEXT ÁÐÉÏ¿ÉÒÔ´´½¨È«ÎÄË÷Òý¡£
ÖµµÃÒ»ÌáµÄÊÇ£¬ÔÚÊý¾ÝÁ¿½Ï´óʱºò£¬ÏÖ½«Êý¾Ý·ÅÈëÒ»¸öûÓÐÈ«¾ÖË÷ÒýµÄ±íÖУ¬È»ºóÔÙÓÃCREATE INDEX´´½¨FULLTEXTË÷Òý£¬Òª±ÈÏÈΪһÕÅ±í½¨Á¢FULLTEXTÈ»ºóÔÙ½«Êý¾ÝдÈëµÄËÙ¶È¿ìºÜ¶à¡£
È«ÎÄË÷Òý²¢²»ÊǺÍMyISAMÒ»Æðµ®ÉúµÄ£¬ËüµÄ³öÏÖÊÇΪÁ˽â¾öWHERE name LIKE ¡°%word%"ÕâÀàÕë¶ÔÎı¾µÄÄ£ºý²éѯЧÂʽϵ͵ÄÎÊÌâ¡£ÔÚûÓÐÈ«ÎÄË÷Òý֮ǰ£¬ÕâÑùÒ»¸ö²éѯÓï¾äÊÇÒª½øÐбéÀúÊý¾Ý±í²Ù×÷µÄ£¬
¿É¼û£¬ÔÚÊý¾ÝÁ¿½Ï´óʱÊǼ«ÆäµÄºÄʱµÄ£¬Èç¹ûûÓÐÒì²½IO´¦Àí£¬½ø³Ì½«±»Ð®³Ö£¬ºÜÀË·Ñʱ¼ä£¬µ±È»ÕâÀï²»¶ÔÒì²½IO×÷½øÒ»²½½²½â£¬ÏëÁ˽âµÄͯЬ£¬×ÔÐйȸ硣
È«ÎÄË÷ÒýµÄʹÓ÷½·¨²¢²»¸´ÔÓ£º
´´½¨ALTER TABLE table ADD INDEX `FULLINDEX` USING FULLTEXT(`cname1`[,cname2¡]);
ʹÓÃSELECT * FROM table WHERE MATCH(cname1[,cname2¡]) AGAINST ('word' MODE );
ÆäÖУ¬ MODEΪËÑѰ·½Ê½£¨IN BOOLEAN MODE £¬IN NATURAL LANGUAGE MODE £¬IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION / WITH QUERY EXPANSION£©¡£
¹ØÓÚÕâÈýÖÖËÑѰ·½Ê½£¬ÓÞ°²ÔÚÕâÀïÒ²²»¶à×ö½»´ú£¬¼òµ¥µØËµ£¬¾ÍÊÇ£¬²¼¶ûģʽ£¬ÔÊÐíwordÀïº¬Ò»Ð©ÌØÊâ×Ö·ûÓÃÓÚ±ê¼ÇһЩ¾ßÌåµÄÒªÇó£¬Èç+±íʾһ¶¨ÒªÓУ¬-±íʾһ¶¨Ã»ÓУ¬*±íʾͨÓÃÆ¥Åä·û£¬ÊDz»ÊÇÏëÆðÁËÕýÔò£¬ÀàËÆ°É£»
×ÔÈ»ÓïÑÔģʽ£¬¾ÍÊǼòµ¥µÄµ¥´ÊÆ¥Å䣻º¬±í´ïʽµÄ×ÔÈ»ÓïÑÔģʽ£¬¾ÍÊÇÏÈÓÃ×ÔÈ»ÓïÑÔģʽ´¦Àí£¬¶Ô·µ»ØµÄ½á¹û£¬ÔÙ½øÐбí´ïʽƥÅä¡£
¶ÔËÑË÷ÒýÇæÉÔ΢ÓеãÁ˽âµÄͬѧ£¬¿Ï¶¨ÖªµÀ·Ö´ÊÕâ¸ö¸ÅÄFULLTEXTË÷ÒýÒ²Êǰ´ÕÕ·Ö´ÊÔÀí½¨Á¢Ë÷ÒýµÄ¡£Î÷ÎÄÖУ¬´ó²¿·ÖΪ×ÖĸÎÄ×Ö£¬·Ö´Ê¿ÉÒԺܷ½±ãµÄ°´ÕÕ¿Õ¸ñ½øÐзָ
µ«ºÜÃ÷ÏÔ£¬ÖÐÎIJ»Äܰ´ÕÕÕâÖÖ·½Ê½½øÐзִʡ£ÄÇÓÖÔõô°ìÄØ£¿Õâ¸öÏò´ó¼Ò½éÉÜÒ»¸ömysqlµÄÖÐÎķִʲå¼þMysqlcft£¬ÓÐÁËËü£¬¾Í¿ÉÒÔ¶ÔÖÐÎĽøÐзִʣ¬ÏëÁ˽âµÄͬѧÇëÒÆ²½Mysqlcft£¬µ±È»»¹ÓÐÆäËûµÄ·Ö´Ê²å¼þ¿ÉÒÔʹÓá£
HASH
HashÕâ¸ö´Ê£¬¿ÉÒÔ˵£¬×Ô´òÎÒÃÇ¿ªÊ¼ÂëµÄÄÇÒ»ÌìÆð£¬¾Í¿ªÊ¼²»Í£µØ¼ûµ½ºÍʹÓõ½ÁË¡£Æäʵ£¬hash¾ÍÊÇÒ»ÖÖ£¨key=>value£©ÐÎʽµÄ¼üÖµ¶Ô£¬ÈçÊýѧÖеĺ¯ÊýÓ³É䣬ÔÊÐí¶à¸ökey¶ÔÓ¦ÏàͬµÄvalue£¬µ«²»ÔÊÐíÒ»¸ökey¶ÔÓ¦¶à¸övalue¡£
ÕýÊÇÓÉÓÚÕâ¸öÌØÐÔ£¬hashºÜÊʺÏ×öË÷Òý£¬ÎªÄ³Ò»Áлò¼¸Áн¨Á¢hashË÷Òý£¬¾Í»áÀûÓÃÕâÒ»Áлò¼¸ÁеÄֵͨ¹ýÒ»¶¨µÄËã·¨¼ÆËã³öÒ»¸öhashÖµ£¬¶ÔÓ¦Ò»Ðлò¼¸ÐÐÊý¾Ý£¨ÕâÀïÔÚ¸ÅÄîÉϺͺ¯ÊýÓ³ÉäÓÐÇø±ð£¬²»Òª»ìÏý£©¡£
ÔÚJavaÓïÑÔÖУ¬Ã¿¸öÀà¶¼ÓÐ×Ô¼ºµÄhashcode()·½·¨£¬Ã»ÓÐÏÔʾ¶¨ÒåµÄ¶¼¼Ì³Ð×ÔobjectÀ࣬¸Ã·½·¨Ê¹µÃÿһ¸ö¶ÔÏó¶¼ÊÇΨһµÄ£¬ÔÚ½øÐжÔÏó¼äequal±È½Ï£¬ºÍÐòÁл¯´«ÊäÖÐÆðµ½Á˺ÜÖØÒªµÄ×÷Óá£
hashµÄÉú³É·½·¨ÓкܶàÖÖ£¬×ã¿ÉÒÔ±£Ö¤hashÂëµÄΨһÐÔ£¬ÀýÈçÔÚMongoDBÖУ¬Ã¿Ò»¸ödocument¶¼ÓÐϵͳΪÆäÉú³ÉµÄΨһµÄobjectID£¨°üº¬Ê±¼ä´Á£¬Ö÷»úÉ¢ÁÐÖµ£¬½ø³ÌPID£¬ºÍ×ÔÔöID£©Ò²ÊÇÒ»ÖÖhashµÄ±íÏÖ¡£
ÓÉÓÚhashË÷Òý¿ÉÒÔÒ»´Î¶¨Î»£¬²»ÐèÒªÏñÊ÷ÐÎË÷ÒýÄÇÑùÖð²ã²éÕÒ,Òò´Ë¾ßÓм«¸ßµÄЧÂÊ¡£ÄÇΪʲô»¹ÐèÒªÆäËûµÄÊ÷ÐÎË÷ÒýÄØ£¿
ÔÚÕâÀïÓÞ°²¾Í²»×Ô¼º×ܽáÁË¡£ÒýÓÃÏÂÔ°×ÓÀïÆäËû´óÉñµÄÎÄÕ£ºÀ´×Ô 14µÄ· µÄMySQLµÄbtreeË÷ÒýºÍhashË÷ÒýµÄÇø±ð
£¨1£©Hash Ë÷Òý½ö½öÄÜÂú×ã"=","IN"ºÍ"<=>"²éѯ£¬²»ÄÜʹÓ÷¶Î§²éѯ¡£
ÓÉÓÚ Hash Ë÷Òý±È½ÏµÄÊǽøÐÐ Hash ÔËËãÖ®ºóµÄ Hash Öµ£¬ËùÒÔËüÖ»ÄÜÓÃÓÚµÈÖµµÄ¹ýÂË£¬²»ÄÜÓÃÓÚ»ùÓÚ·¶Î§µÄ¹ýÂË£¬ÒòΪ¾¹ýÏàÓ¦µÄ Hash Ëã·¨´¦ÀíÖ®ºóµÄ Hash ÖµµÄ´óС¹ØÏµ£¬²¢²»Äܱ£Ö¤ºÍHashÔËËãǰÍêȫһÑù¡£
£¨2£©Hash Ë÷ÒýÎÞ·¨±»ÓÃÀ´±ÜÃâÊý¾ÝµÄÅÅÐò²Ù×÷¡£
ÓÉÓÚ Hash Ë÷ÒýÖдæ·ÅµÄÊǾ¹ý Hash ¼ÆËãÖ®ºóµÄ Hash Öµ£¬¶øÇÒHashÖµµÄ´óС¹ØÏµ²¢²»Ò»¶¨ºÍ Hash ÔËËãǰµÄ¼üÖµÍêȫһÑù£¬ËùÒÔÊý¾Ý¿âÎÞ·¨ÀûÓÃË÷ÒýµÄÊý¾ÝÀ´±ÜÃâÈκÎÅÅÐòÔËË㣻
£¨3£©Hash Ë÷Òý²»ÄÜÀûÓò¿·ÖË÷Òý¼ü²éѯ¡£
¶ÔÓÚ×éºÏË÷Òý£¬Hash Ë÷ÒýÔÚ¼ÆËã Hash ÖµµÄʱºòÊÇ×éºÏË÷Òý¼üºÏ²¢ºóÔÙÒ»Æð¼ÆËã Hash Öµ£¬¶ø²»Êǵ¥¶À¼ÆËã Hash Öµ£¬ËùÒÔͨ¹ý×éºÏË÷ÒýµÄÇ°ÃæÒ»¸ö»ò¼¸¸öË÷Òý¼ü½øÐвéѯµÄʱºò£¬Hash Ë÷ÒýÒ²ÎÞ·¨±»ÀûÓá£
£¨4£©Hash Ë÷ÒýÔÚÈκÎʱºò¶¼²»ÄܱÜÃâ±íɨÃè¡£
Ç°ÃæÒѾ֪µÀ£¬Hash Ë÷ÒýÊǽ«Ë÷Òý¼üͨ¹ý Hash ÔËËãÖ®ºó£¬½« HashÔËËã½á¹ûµÄ Hash ÖµºÍËù¶ÔÓ¦µÄÐÐÖ¸ÕëÐÅÏ¢´æ·ÅÓÚÒ»¸ö Hash ±íÖУ¬ÓÉÓÚ²»Í¬Ë÷Òý¼ü´æÔÚÏàͬ Hash Öµ£¬ËùÒÔ¼´Ê¹È¡Âú×ãij¸ö Hash ¼üÖµµÄÊý¾ÝµÄ¼Ç¼ÌõÊý£¬
Ò²ÎÞ·¨´Ó Hash Ë÷ÒýÖÐÖ±½ÓÍê³É²éѯ£¬»¹ÊÇҪͨ¹ý·ÃÎʱíÖеÄʵ¼ÊÊý¾Ý½øÐÐÏàÓ¦µÄ±È½Ï£¬²¢µÃµ½ÏàÓ¦µÄ½á¹û¡£
£¨5£©Hash Ë÷ÒýÓöµ½´óÁ¿HashÖµÏàµÈµÄÇé¿öºóÐÔÄܲ¢²»Ò»¶¨¾Í»á±ÈB-TreeË÷Òý¸ß¡£
¶ÔÓÚÑ¡ÔñÐԱȽϵ͵ÄË÷Òý¼ü£¬Èç¹û´´½¨ Hash Ë÷Òý£¬ÄÇô½«»á´æÔÚ´óÁ¿¼Ç¼ָÕëÐÅÏ¢´æÓÚͬһ¸ö Hash ÖµÏà¹ØÁª¡£ÕâÑùÒª¶¨Î»Ä³Ò»Ìõ¼Ç¼ʱ¾Í»á·Ç³£Âé·³£¬»áÀ˷Ѷà´Î±íÊý¾ÝµÄ·ÃÎÊ£¬¶øÔì³ÉÕûÌåÐÔÄܵÍÏ¡£
ÓÞ°²ÎÒÉÔ×÷²¹³ä£¬½²Ò»ÏÂHASHË÷ÒýµÄ¹ý³Ì£¬Ë³±ã½âÊÍÏÂÉÏÃæµÄµÚ4,5Ìõ£º
µ±ÎÒÃÇΪijһÁлòij¼¸Áн¨Á¢hashË÷Òýʱ£¨Ä¿Ç°¾ÍÖ»ÓÐMEMORYÒýÇæÏÔʽµØÖ§³ÖÕâÖÖË÷Òý£©£¬»áÔÚÓ²ÅÌÉÏÉú³ÉÀàËÆÈçϵÄÎļþ£º
hashÖµ ´æ´¢µØÖ·
1db54bc745a1 77#45b5
4bca452157d4 76#4556,77#45cc¡
¡
hashÖµ¼´ÎªÍ¨¹ýÌØ¶¨Ëã·¨ÓÉÖ¸¶¨ÁÐÊý¾Ý¼ÆËã³öÀ´£¬´ÅÅ̵ØÖ·¼´ÎªËùÔÚÊý¾ÝÐд洢ÔÚÓ²ÅÌÉϵĵØÖ·£¨Ò²ÓпÉÄÜÊÇÆäËû´æ´¢µØÖ·£¬ÆäʵMEMORY»á½«hash±íµ¼ÈëÄڴ棩¡£
ÕâÑù£¬µ±ÎÒÃǽøÐÐWHERE age = 18 ʱ£¬»á½«18ͨ¹ýÏàͬµÄËã·¨¼ÆËã³öÒ»¸öhashÖµ==>ÔÚhash±íÖÐÕÒµ½¶ÔÓ¦µÄ´¢´æµØÖ·==>¸ù¾Ý´æ´¢µØÖ·È¡µÃÊý¾Ý¡£
ËùÒÔ£¬Ã¿´Î²éѯʱ¶¼Òª±éÀúhash±í£¬Ö±µ½ÕÒµ½¶ÔÓ¦µÄhashÖµ£¬È磨4£©£¬Êý¾ÝÁ¿´óÁËÖ®ºó£¬hash±íÒ²»á±äµÃÅÓ´óÆðÀ´£¬ÐÔÄÜϽµ£¬±éÀúºÄʱÔö¼Ó£¬È磨5£©¡£
BTREE
BTREEË÷Òý¾ÍÊÇÒ»ÖÖ½«Ë÷ÒýÖµ°´Ò»¶¨µÄËã·¨£¬´æÈëÒ»¸öÊ÷ÐεÄÊý¾Ý½á¹¹ÖУ¬ÏàÐÅѧ¹ýÊý¾Ý½á¹¹µÄͯЬ¶¼¶Ôµ±³õѧϰ¶þ²æÊ÷ÕâÖÖÊý¾Ý½á¹¹µÄ¾Àú¼ÇÒäÓÌУ¬·´ÕýÓÞ°²ÎÒµ±Ê±ÎªÁËÈí¿¼¿ÉÊDZ»ÕâÍæÒâ¶ùºÃºÃµØÕÛÌÚÁËÒ»·¬£¬²»¹ýÄǴο¼ÊÔºÃÏñûÔõô¿¼Õâ¸ö¡£
Èç¶þ²æÊ÷Ò»Ñù£¬Ã¿´Î²éѯ¶¼ÊÇ´ÓÊ÷µÄÈë¿Úroot¿ªÊ¼£¬ÒÀ´Î±éÀúnode£¬»ñÈ¡leaf¡£
BTREEÔÚMyISAMÀïµÄÐÎʽºÍInnodbÉÔÓв»Í¬
ÔÚ InnodbÀÓÐÁ½ÖÖÐÎ̬£ºÒ»ÊÇprimary keyÐÎ̬£¬Æäleaf nodeÀï´æ·ÅµÄÊÇÊý¾Ý£¬¶øÇÒ²»½ö´æ·ÅÁËË÷Òý¼üµÄÊý¾Ý£¬»¹´æ·ÅÁËÆäËû×ֶεÄÊý¾Ý¡£¶þÊÇsecondary index£¬Æäleaf nodeºÍÆÕͨµÄBTREE²î²»¶à£¬Ö»ÊÇ»¹´æ·ÅÁËÖ¸ÏòÖ÷¼üµÄÐÅÏ¢.
¶øÔÚMyISAMÀÖ÷¼üºÍÆäËûµÄ²¢Ã»ÓÐÌ«´óÇø±ð¡£²»¹ýºÍInnodb²»Ì«Ò»ÑùµÄµØ·½ÊÇÔÚMyISAMÀleaf nodeÀï´æ·ÅµÄ²»ÊÇÖ÷¼üµÄÐÅÏ¢£¬¶øÊÇÖ¸ÏòÊý¾ÝÎļþÀïµÄ¶ÔÓ¦Êý¾ÝÐеÄÐÅÏ¢.
RTREE
RTREEÔÚmysqlºÜÉÙʹÓ㬽öÖ§³ÖgeometryÊý¾ÝÀàÐÍ£¬Ö§³Ö¸ÃÀàÐ͵Ĵ洢ÒýÇæÖ»ÓÐMyISAM¡¢BDb¡¢InnoDb¡¢NDb¡¢Archive¼¸ÖÖ¡£
Ïà¶ÔÓÚBTREE£¬RTREEµÄÓÅÊÆÔÚÓÚ·¶Î§²éÕÒ.
¸÷ÖÖË÷ÒýµÄʹÓÃÇé¿ö
£¨1£©¶ÔÓÚBTREEÕâÖÖMysqlĬÈϵÄË÷ÒýÀàÐÍ£¬¾ßÓÐÆÕ±éµÄÊÊÓÃÐÔ
£¨2£©ÓÉÓÚFULLTEXT¶ÔÖÐÎÄÖ§³Ö²»ÊǺܺã¬ÔÚûÓвå¼þµÄÇé¿öÏ£¬×îºÃ²»ÒªÊ¹Óá£Æäʵ£¬Ò»Ð©Ð¡µÄ²©¿ÍÓ¦Óã¬Ö»ÐèÒªÔÚÊý¾Ý²É¼¯Ê±£¬ÎªÆä½¨Á¢¹Ø¼ü×ÖÁÐ±í£¬Í¨¹ý¹Ø¼ü×ÖË÷Òý£¬Ò²ÊÇÒ»¸ö²»´íµÄ·½·¨£¬ÖÁÉÙÓÞ°²ÎÒÊǾ³£Õâô×öµÄ¡£
£¨3£©¶ÔÓÚһЩËÑË÷ÒýÇæ¼¶±ðµÄÓ¦ÓÃÀ´Ëµ£¬FULLTEXTͬÑù²»ÊÇÒ»¸öºÃµÄ´¦Àí·½·¨£¬MysqlµÄÈ«ÎÄË÷Òý½¨Á¢µÄÎļþ»¹ÊDZȽϴóµÄ£¬¶øÇÒЧÂʲ»ÊǺܸߣ¬¼´±ãÊÇʹÓÃÁËÖÐÎķִʲå¼þ£¬¶ÔÖÐÎÄ·Ö´ÊÖ§³ÖÒ²Ö»ÊÇÒ»°ã¡£ÕæÒªÅöµ½ÕâÖÖÎÊÌ⣬ApacheµÄLucene»òÐíÊÇÄãµÄÑ¡Ôñ¡£
£¨4£©ÕýÊÇÒòΪhash±íÔÚ´¦Àí½ÏСÊý¾ÝÁ¿Ê±¾ßÓÐÎ޿ɱÈÄâµÄËØµÄÓÅÊÆ£¬ËùÒÔhashË÷ÒýºÜÊʺÏ×ö»º´æ£¨ÄÚ´æÊý¾Ý¿â£©¡£ÈçmysqlÊý¾Ý¿âµÄÄÚ´æ°æ±¾Memsql£¬Ê¹ÓÃÁ¿ºÜ¹ã·ºµÄ»º´æ¹¤¾ßMencached£¬NoSqlÊý¾Ý¿âRedisµÈ£¬¶¼Ê¹ÓÃÁËhashË÷ÒýÕâÖÖÐÎʽ¡£
µ±È»£¬²»ÏëѧϰÕâЩ¶«Î÷µÄ»°MysqlµÄMEMORYÒýÇæÒ²ÊÇ¿ÉÒÔÂú×ãÕâÖÖÐèÇóµÄ¡£
£¨5£©ÖÁÓÚRTREE£¬ÓÞ°²ÎÒÖÁ½ñ»¹Ã»ÓÐʹÓùý£¬Ëü¾ßÌåÔõôÑù£¬ÎҾͲ»ÖªµÀÁË¡£ÓÐRTREEʹÓþÀúµÄͬѧ£¬µ½Ê±¿ÉÒÔ½»Á÷Ï£¡
MySQL5.5ÒÔºóĬÈÏʹÓÃInnoDB´æ´¢ÒýÇæ£¬ÆäÖÐInnoDBºÍBDBÌṩÊÂÎñ°²È«±í£¬ÆäËü´æ´¢ÒýÇæ¶¼ÊÇ·ÇÊÂÎñ°²È«±í¡£ÈôÒªÐÞ¸ÄĬÈÏÒýÇæ£¬¿ÉÒÔÐÞ¸ÄÅäÖÃÎļþÖеÄdefault-storage-engine¡£¿ÉÒÔͨ¹ý£ºshow variables like 'default_storage_engine';²é¿´µ±Ç°Êý¾Ý¿âµ½Ä¬ÈÏÒýÇæ¡£ÃüÁshow enginesºÍshow variables like 'have%'¿ÉÒÔÁгöµ±Ç°Êý¾Ý¿âËùÖ§³Öµ½ÒýÇæ¡£ÆäÖÐValueÏÔʾΪdisabledµÄ¼Ç¼±íʾÊý¾Ý¿âÖ§³Ö´ËÒýÇæ£¬¶øÔÚÊý¾Ý¿âÆô¶¯Ê±±»½ûÓá£ÔÚMySQL5.1ÒÔºó£¬INFORMATION_SCHEMAÊý¾Ý¿âÖдæÔÚÒ»¸öENGINESµÄ±í£¬ËüÌṩµÄÐÅÏ¢Óëshow engines;Óï¾äÍêȫһÑù£¬¿ÉÒÔʹÓÃÏÂÃæÓï¾äÀ´²éѯÄÄЩ´æ´¢ÒýÇæÖ§³ÖÊÂÎï´¦Àí£ºselect engine from information_chema.engines where transactions = 'yes';¿ÉÒÔͨ¹ýengine¹Ø¼ü×ÖÔÚ´´½¨»òÐÞ¸ÄÊý¾Ý¿âʱָ¶¨ËùʹÓõ½ÒýÇæ¡£Ö÷Òª´æ´¢ÒýÇæ£ºMyISAM¡¢InnoDB¡¢MEMORYºÍMERGE½éÉÜ£ºÔÚ´´½¨±íµ½Ê±ºòͨ¹ýengine=...»òtype=...À´Ö¸¶¨ËùҪʹÓõ½ÒýÇæ¡£show table status from DBnameÀ´²é¿´Ö¸¶¨±íµ½ÒýÇæ¡£(Ò»)MyISAM¡¡¡¡Ëü²»Ö§³ÖÊÂÎñ£¬Ò²²»Ö§³ÖÍâ¼ü£¬ÓÈÆäÊÇ·ÃÎÊËٶȿ죬¶ÔÊÂÎñÍêÕûÐÔûÓÐÒªÇó»òÕßÒÔSELECT¡¢INSERTΪÖ÷µÄÓ¦Óûù±¾¶¼¿ÉÒÔʹÓÃÕâ¸öÒýÇæÀ´´´½¨±í¡£Ã¿¸öMyISAMÔÚ´ÅÅÌÉÏ´æ´¢³É3¸öÎļþ£¬ÆäÖÐÎļþÃûºÍ±íÃû¶¼Ïàͬ£¬µ«ÊÇÀ©Õ¹Ãû·Ö±ðΪ£º.frm(´æ´¢±í¶¨Òå)MYD(MYData£¬´æ´¢Êý¾Ý)MYI(MYIndex£¬´æ´¢Ë÷Òý)¡¡¡¡Êý¾ÝÎļþºÍË÷ÒýÎļþ¿ÉÒÔ·ÅÖÃÔÚ²»Í¬µÄĿ¼£¬Æ½¾ù·ÖÅäIO£¬»ñÈ¡¸ü¿ìµÄËÙ¶È¡£ÒªÖ¸¶¨Êý¾ÝÎļþºÍË÷ÒýÎļþµÄ·¾¶£¬ÐèÒªÔÚ´´½¨±íµÄʱºòͨ¹ýDATA DIRECTORYºÍINDEX DIRECTORYÓï¾äÖ¸¶¨£¬Îļþ·¾¶ÐèҪʹÓþø¶Ô·¾¶¡£¡¡¡¡Ã¿¸öMyISAM±í¶¼ÓÐÒ»¸ö±êÖ¾£¬·þÎñÆ÷»òmyisamchk³ÌÐòÔÚ¼ì²éMyISAMÊý¾Ý±íʱ»á¶ÔÕâ¸ö±êÖ¾½øÐÐÉèÖá£MyISAM±í»¹ÓÐÒ»¸ö±êÖ¾ÓÃÀ´±íÃ÷¸ÃÊý¾Ý±íÔÚÉÏ´ÎʹÓúóÊDz»ÊDZ»Õý³£µÄ¹Ø±ÕÁË¡£ Èç¹û·þÎñÆ÷ÒÔΪµ±»ú»ò±ÀÀ££¬Õâ¸ö±êÖ¾¿ÉÒÔÓÃÀ´ÅжÏÊý¾Ý±íÊÇ·ñÐèÒª¼ì²éºÍÐÞ¸´¡£Èç¹ûÏëÈÃÕâÖÖ¼ì²é×Ô¶¯½øÐУ¬¿ÉÒÔÔÚÆô¶¯·þÎñÆ÷ʱʹÓÃ--myisam-recoverÏÖÏó¡£Õâ»áÈ÷þÎñÆ÷ÔÚÿ´Î´ò¿ªÒ»¸öMyISAMÊý¾Ý±íÊÇ×Ô¶¯¼ì²éÊý¾Ý±íµÄ±êÖ¾²¢½øÐбØÒªµÄÐÞ¸´´¦Àí¡£ MyISAMÀàÐ͵ıí¿ÉÄÜ»áË𻵣¬¿ÉÒÔʹÓÃCHECK TABLEÓï¾äÀ´¼ì²éMyISAM±íµÄ½¡¿µ£¬²¢ÓÃREPAIR TABLEÓï¾äÐÞ¸´Ò»¸öË𻵵½MyISAM±í¡£¡¡¡¡MyISAMµÄ±í»¹Ö§³Ö3ÖÖ²»Í¬µÄ´æ´¢¸ñʽ£º¾²Ì¬(¹Ì¶¨³¤¶È)±í¶¯Ì¬±íѹËõ±í¡¡¡¡ÆäÖо²Ì¬±íÊÇĬÈϵĴ洢¸ñʽ¡£¾²Ì¬±íÖеÄ×ֶζ¼ÊǷDZ䳤×ֶΣ¬ÕâÑùÿ¸ö¼Ç¼¶¼Êǹ̶¨³¤¶ÈµÄ£¬ÕâÖÖ´æ´¢·½Ê½µÄÓŵãÊÇ´æ´¢·Ç³£Ñ¸ËÙ£¬ÈÝÒ×»º´æ£¬³öÏÖ¹ÊÕÏÈÝÒ×»Ö¸´£» ȱµãÊÇÕ¼ÓõĿռäͨ³£±È¶¯Ì¬±í¶à¡£¾²Ì¬±íÔÚÊý¾Ý´æ´¢Ê±»á¸ù¾ÝÁж¨ÒåµÄ¿í¶È¶¨Òå²¹×ã¿Õ¸ñ£¬µ«ÊÇÔÚ·ÃÎʵÄʱºò²¢²»»áµÃµ½ÕâЩ¿Õ¸ñ£¬ÕâЩ¿Õ¸ñÔÚ·µ»Ø¸øÓ¦ÓÃ֮ǰÒѾȥµô¡£ ͬʱÐèҪעÒ⣺ÔÚijЩÇé¿öÏ¿ÉÄÜÐèÒª·µ»Ø×ֶκóµÄ¿Õ¸ñ£¬¶øÊ¹ÓÃÕâÖÖ¸ñʽʱºóÃæµ½¿Õ¸ñ»á±»×Ô¶¯´¦Àíµô¡£¡¡¡¡¶¯Ì¬±í°üº¬±ä³¤×ֶΣ¬¼Ç¼²»Êǹ̶¨³¤¶ÈµÄ£¬ÕâÑù´æ´¢µÄÓŵãÊÇÕ¼Óÿռä½ÏÉÙ£¬µ«ÊÇÆµ·±µ½¸üÐÂɾ³ý¼Ç¼»á²úÉúË鯬£¬ÐèÒª¶¨ÆÚÖ´ÐÐOPTIMIZE TABLEÓï¾ä»òmyisamchk -rÃüÁîÀ´¸ÄÉÆÐÔÄÜ£¬²¢ÇÒ³öÏÖ¹ÊÕϵÄʱºò»Ö¸´Ïà¶Ô±È½ÏÀ§ÄÑ¡£¡¡¡¡Ñ¹Ëõ±íÓÉmyisamchk¹¤¾ß´´½¨£¬Õ¼¾Ý·Ç³£Ð¡µÄ¿Õ¼ä£¬ÒòΪÿÌõ¼Ç¼¶¼ÊDZ»µ¥¶ÀѹËõµÄ£¬ËùÒÔÖ»Óзdz£Ð¡µÄ·ÃÎÊ¿ªÖ§¡£ (¶þ)InnoDB¡¡¡¡InnoDB´æ´¢ÒýÇæÌṩÁ˾ßÓÐÌá½»¡¢»Ø¹öºÍ±ÀÀ£»Ö¸´ÄÜÁ¦µÄÊÂÎñ°²È«¡£µ«ÊǶԱÈMyISAMµÄ´æ´¢ÒýÇæ£¬InnoDBдµÄ´¦ÀíЧÂʲîһЩ²¢ÇÒ»áÕ¼Óøü¶àµÄ´ÅÅ̿ռäÒÔ±£ÁôÊý¾ÝºÍË÷Òý¡£1)×Ô¶¯Ôö³¤ÁУº¡¡¡¡InnoDB±íµÄ×Ô¶¯Ôö³¤ÁпÉÒÔÊÖ¹¤²åÈ룬µ«ÊDzåÈëµÄÈç¹ûÊǿջò0£¬Ôòʵ¼Ê²åÈëµ½ÔòÊÇ×Ô¶¯Ôö³¤ºóµ½Öµ¡£¿ÉÒÔͨ¹ý"ALTER TABLE...AUTO_INCREMENT=n;"Óï¾äÇ¿ÖÆÉèÖÃ×Ô¶¯Ôö³¤ÖµµÄÆðʼֵ£¬Ä¬ÈÏΪ1£¬µ«ÊǸÃÇ¿ÖÆµ½Ä¬ÈÏÖµÊDZ£´æÔÚÄÚ´æÖУ¬Êý¾Ý¿âÖØÆôºó¸ÃÖµ½«»á¶ªÊ§¡£ ¿ÉÒÔʹÓÃLAST_INSERT_ID()²éѯµ±Ç°Ïß³Ì×îºó²åÈë¼Ç¼ʹÓõÄÖµ¡£Èç¹ûÒ»´Î²åÈë¶àÌõ¼Ç¼£¬ÄÇô·µ»ØµÄÊǵÚÒ»Ìõ¼Ç¼ʹÓõÄ×Ô¶¯Ôö³¤Öµ¡£¶ÔÓÚInnoDB±í£¬×Ô¶¯Ôö³¤ÁбØÐëÊÇË÷Òý¡£Èç¹ûÊÇ×éºÏË÷Òý£¬Ò²±ØÐëÊÇ×éºÏË÷ÒýµÄµÚÒ»ÁУ¬µ«ÊǶÔÓÚMyISAM±í£¬×Ô¶¯Ôö³¤ÁпÉÒÔÊÇ×éºÏË÷ÒýµÄÆäËûÁУ¬ÕâÑù²åÈë¼Ç¼ºó£¬×Ô¶¯Ôö³¤ÁÐÊǰ´ÕÕ×éºÏË÷Òýµ½Ç°Ã漸ÁÐÅÅÐòºóµÝÔöµÄ¡£2)Íâ¼üÔ¼Êø£º¡¡¡¡MySQLÖ§³ÖÍâ¼üµÄ´æ´¢ÒýÇæÖ»ÓÐInnoDB£¬ÔÚ´´½¨Íâ¼üµÄʱºò£¬¸¸±í±ØÐëÓжÔÓ¦µÄË÷Òý£¬×Ó±íÔÚ´´½¨Íâ¼üµÄʱºòÒ²»á×Ô¶¯´´½¨¶ÔÓ¦µÄË÷Òý¡£ ÔÚ´´½¨Ë÷ÒýµÄʱºò£¬¿ÉÒÔÖ¸¶¨ÔÚɾ³ý¡¢¸üи¸±íʱ£¬¶Ô×Ó±í½øÐеÄÏàÓ¦²Ù×÷£¬°üÀ¨restrict¡¢cascade¡¢set nullºÍno action¡£ÆäÖÐrestrictºÍno actionÏàͬ£¬ÊÇÖ¸ÏÞÖÆÔÚ×Ó±íÓйØÁªµÄÇé¿öÏ£¬¸¸±í²»ÄܸüУ» casecade±íʾ¸¸±íÔÚ¸üлòɾ³ýʱ£¬¸üлòÕßɾ³ý×Ó±í¶ÔÓ¦µÄ¼Ç¼£»set null Ôò±íʾ¸¸±íÔÚ¸üлòÕßɾ³ýµÄʱºò£¬×Ó±í¶ÔÓ¦µÄ×ֶα»set null¡£¡¡¡¡µ±Ä³¸ö±í±»ÆäËü±í´´½¨ÁËÍâ¼ü²ÎÕÕ£¬ÄÇô¸Ã±í¶ÔÓ¦µÄË÷Òý»òÖ÷¼ü±»½ûֹɾ³ý¡£¡¡¡¡¿ÉÒÔʹÓÃset foreign_key_checks=0;ÁÙʱ¹Ø±ÕÍâ¼üÔ¼Êø£¬set foreign_key_checks=1;´ò¿ªÔ¼Êø¡£(Èý)MEMORY¡¡¡¡memoryʹÓôæÔÚÄÚ´æÖеÄÄÚÈÝÀ´´´½¨±í¡£Ã¿¸öMEMORY±íʵ¼Ê¶ÔÓ¦Ò»¸ö´ÅÅÌÎļþ£¬¸ñʽÊÇ.frm¡£MEMORYÀàÐ͵ıí·ÃÎʷdz£¿ì£¬ÒòΪËüµ½Êý¾ÝÊÇ·ÅÔÚÄÚ´æÖе쬲¢ÇÒĬÈÏʹÓÃHASHË÷Òý£¬µ«ÊÇÒ»µ©·þÎñÆ÷¹Ø±Õ£¬±íÖеÄÊý¾Ý¾Í»á¶ªÊ§£¬µ«±í»¹»á¼ÌÐø´æÔÚ¡£ ĬÈÏÇé¿öÏ£¬memoryÊý¾Ý±íʹÓÃÉ¢ÁÐË÷Òý£¬ÀûÓÃÕâÖÖË÷Òý½øÐС°ÏàµÈ±È½Ï¡±·Ç³£¿ì£¬µ«ÊǶԡ°·¶Î§±È½Ï¡±µÄËٶȾÍÂý¶àÁË¡£ Òò´Ë£¬É¢ÁÐË÷ÒýÖµÊʺÏʹÓÃÔÚ"="ºÍ"<=>"µÄ²Ù×÷·ûÖУ¬²»ÊʺÏʹÓÃÔÚ"<"»ò">"²Ù×÷·ûÖУ¬Ò²Í¬Ñù²»ÊʺÏÓÃÔÚorder by×Ö¾äÀï¡£Èç¹ûȷʵҪʹÓÃ"<"»ò">"»òbetwen²Ù×÷·û£¬¿ÉÒÔʹÓÃbtreeË÷ÒýÀ´¼Ó¿ìËÙ¶È¡£¡¡¡¡´æ´¢ÔÚMEMORYÊý¾Ý±íÀïµÄÊý¾ÝÐÐʹÓõÄÊdz¤¶È²»±äµÄ¸ñʽ£¬Òò´Ë¼Ó¿ì´¦ÀíËÙ¶È£¬ÕâÒâζ×Ų»ÄÜʹÓÃBLOBºÍTEXTÕâÑùµÄ³¤¶È¿É±äµÄÊý¾ÝÀàÐÍ¡£VARCHARÊÇÒ»ÖÖ³¤¶È¿É±äµÄÀàÐÍ£¬µ«ÒòΪËüÔÚMySQLÄÚ²¿µ±×÷³¤¶È¹Ì¶¨²»±äµÄCHARÀàÐÍ£¬ËùÒÔ¿ÉÒÔʹÓá£create table tab_memory engine=memory select id,name,age,addr from man order by id;¡¡¡¡Ê¹ÓÃUSING HASH/BTREEÀ´Ö¸¶¨Ìض¨µ½Ë÷Òý¡£create index mem_hash using hash on tab_memory(city_id);¡¡¡¡ÔÚÆô¶¯MySQL·þÎñµÄʱºòʹÓÃ--init-fileÑ¡Ï°Ñinsert into...select»òload data infile ÕâÑùµÄÓï¾ä·ÅÈëµ½Õâ¸öÎļþÖУ¬¾Í¿ÉÒÔÔÚ·þÎñÆô¶¯Ê±´Ó³Ö¾ÃÎȹ̵ÄÊý¾ÝÔ´ÖÐ×°ÔØ±í¡£¡¡¡¡·þÎñÆ÷ÐèÒª×ã¹»µÄÄÚ´æÀ´Î¬³ÖËùÔÚµÄÔÚͬһʱ¼äʹÓõÄMEMORY±í£¬µ±²»ÔÙʹÓÃMEMORY±íʱ£¬ÒªÊÍ·ÅMEMORY±íËùÕ¼ÓõÄÄڴ棬Ӧ¸ÃÖ´ÐÐDELETE FROM»òtruncate table»òÕßɾ³ýÕû¸ö±í¡£¡¡¡¡Ã¿¸öMEMORY±íÖзÅÖõ½Êý¾ÝÁ¿µÄ´óС£¬Êܵ½max_heap_table_sizeϵͳ±äÁ¿µÄÔ¼Êø£¬Õâ¸öϵͳ±äÁ¿µÄ³õʼֵÊÇ16M£¬Í¬Ê±ÔÚ´´½¨MEMORY±íʱ¿ÉÒÔʹÓÃMAX_ROWS×Ó¾äÀ´Ö¸¶¨±íÖеÄ×î´óÐÐÊý¡£(ËÄ)MERGE¡¡¡¡merge´æ´¢ÒýÇæÊÇÒ»×éMyISAM±íµÄ×éºÏ£¬ÕâЩMyISAM±í½á¹¹±ØÐëÍêÈ«Ïàͬ£¬MERGE±íÖв¢Ã»ÓÐÊý¾Ý£¬¶ÔMERGEÀàÐ͵ıí¿ÉÒÔ½øÐвéѯ¡¢¸üС¢É¾³ýµÄ²Ù×÷£¬ÕâЩ²Ù×÷ʵ¼ÊÉÏÊǶÔÄÚ²¿µÄMyISAM±í½øÐвÙ×÷¡£ ¶ÔÓÚ¶ÔMERGE±í½øÐеIJåÈë²Ù×÷£¬ÊǸù¾ÝINSERT_METHOD×Ӿ䶨ÒåµÄ²åÈëµÄ±í£¬¿ÉÒÔÓÐ3¸ö²»Í¬µÄÖµ£¬firstºÍlastֵʹµÃ²åÈë²Ù×÷±»ÏàÓ¦µÄ×÷ÓÃÔÚµÚÒ»¸ö»ò×îºóÒ»¸ö±íÉÏ£¬²»¶¨ÒåÕâ¸ö×Ó¾ä»òÕßΪNO£¬±íʾ²»ÄܶÔÕâ¸öMERGE±í½øÐвåÈë²Ù×÷¡£¿ÉÒÔ¶ÔMERGE±í½øÐÐdrop²Ù×÷£¬ Õâ¸ö²Ù×÷Ö»ÊÇɾ³ýMERGE±íµÄ¶¨Ò壬¶ÔÄÚ²¿µÄ±íûÓÐÈκÎÓ°Ïì¡£MERGEÔÚ´ÅÅÌÉϱ£Áô2¸öÒÔMERGE±íÃû¿ªÍ·Îļþ£º.frmÎļþ´æ´¢±íµÄ¶¨Ò壻.MRGÎļþ°üº¬×éºÏ±íµÄÐÅÏ¢£¬°üÀ¨MERGE±íÓÉÄÄЩ±í×é³É£¬²åÈëÊý¾ÝʱµÄÒÀ¾Ý¡£ ¿ÉÒÔͨ¹ýÐÞ¸Ä.MRGÎļþÀ´ÐÞ¸ÄMERGE±í£¬µ«ÊÇÐ޸ĺóҪͨ¹ýflush tableˢС£create table man_all(id int,name varchar(20))engine=merge union=(man1,man2) insert_methos=last;
MySQLÊý¾Ý¿âΪÎÒÃÇÌṩµÄËÄÖÖ¸ôÀë¼¶±ð£º¡¡¡¡¢Ù Serializable (´®Ðл¯)£º¿É±ÜÃâÔà¶Á¡¢²»¿ÉÖØ¸´¶Á¡¢»Ã¶ÁµÄ·¢Éú¡£¡¡¡¡¢Ú Repeatable read (¿ÉÖØ¸´¶Á)£º¿É±ÜÃâÔà¶Á¡¢²»¿ÉÖØ¸´¶ÁµÄ·¢Éú¡£¡¡¡¡¢Û Read committed (¶ÁÒÑÌá½»)£º¿É±ÜÃâÔà¶ÁµÄ·¢Éú¡£¡¡¡¡¢Ü Read uncommitted (¶ÁδÌá½»)£º×îµÍ¼¶±ð£¬ÈκÎÇé¿ö¶¼ÎÞ·¨±£Ö¤¡£¡¡¡¡ÒÔÉÏËÄÖÖ¸ôÀë¼¶±ð×î¸ßµÄÊÇSerializable¼¶±ð£¬×îµÍµÄÊÇRead uncommitted¼¶±ð£¬µ±È»¼¶±ðÔ½¸ß£¬Ö´ÐÐЧÂʾÍÔ½µÍ¡£ÏñSerializableÕâÑùµÄ¼¶±ð£¬¾ÍÊÇÒÔËø±íµÄ·½Ê½(ÀàËÆÓÚJava¶àÏß³ÌÖеÄËø)ʹµÃÆäËûµÄÏß³ÌÖ»ÄÜÔÚËøÍâµÈ´ý£¬ËùÒÔÆ½Ê±Ñ¡ÓúÎÖÖ¸ôÀë¼¶±ðÓ¦¸Ã¸ù¾Ýʵ¼ÊÇé¿ö¡£ ÔÚMySQLÊý¾Ý¿âÖÐĬÈϵĸôÀë¼¶±ðΪRepeatable read (¿ÉÖØ¸´¶Á)¡£¡¡¡¡ÔÚMySQLÊý¾Ý¿âÖУ¬Ö§³ÖÉÏÃæËÄÖÖ¸ôÀë¼¶±ð£¬Ä¬ÈϵÄΪRepeatable read (¿ÉÖØ¸´¶Á)£»¶øÔÚOracleÊý¾Ý¿âÖУ¬Ö»Ö§³ÖSerializable (´®Ðл¯)¼¶±ðºÍRead committed (¶ÁÒÑÌá½»)ÕâÁ½ÖÖ¼¶±ð£¬ÆäÖÐĬÈϵÄΪRead committed¼¶±ð¡£
ÔÚÊý¾Ý¿âÖУ¬±¯¹ÛËøµÄÁ÷³ÌÈçÏ£º
ÔÚ¶ÔÈÎÒâ¼Ç¼½øÐÐÐÞ¸Äǰ£¬Ïȳ¢ÊÔΪ¸Ã¼Ç¼¼ÓÉÏÅÅËûËø£¨exclusive locking£©¡£
Èç¹û¼ÓËøÊ§°Ü£¬ËµÃ÷¸Ã¼Ç¼ÕýÔÚ±»Ð޸ģ¬ÄÇôµ±Ç°²éѯ¿ÉÄÜÒªµÈ´ý»òÕßÅ׳öÒì³£¡£ ¾ßÌåÏìÓ¦·½Ê½ÓÉ¿ª·¢Õ߸ù¾Ýʵ¼ÊÐèÒª¾ö¶¨¡£
Èç¹û³É¹¦¼ÓËø£¬ÄÇô¾Í¿ÉÒԶԼǼ×öÐ޸ģ¬ÊÂÎñÍê³Éºó¾Í»á½âËøÁË¡£
Æä¼äÈç¹ûÓÐÆäËû¶Ô¸Ã¼Ç¼×öÐ޸Ļò¼ÓÅÅËûËøµÄ²Ù×÷£¬¶¼»áµÈ´ýÎÒÃǽâËø»òÖ±½ÓÅ׳öÒì³£¡£
MySQL InnoDBÖÐʹÓñ¯¹ÛËø
ҪʹÓñ¯¹ÛËø£¬ÎÒÃDZØÐë¹Ø±ÕmysqlÊý¾Ý¿âµÄ×Ô¶¯Ìá½»ÊôÐÔ£¬ÒòΪMySQLĬÈÏʹÓÃautocommitģʽ£¬Ò²¾ÍÊÇ˵£¬µ±ÄãÖ´ÐÐÒ»¸ö¸üвÙ×÷ºó£¬MySQL»áÁ¢¿Ì½«½á¹û½øÐÐÌá½»¡£ set autocommit=0;
//0.¿ªÊ¼ÊÂÎñ
begin;/begin work;/start transaction; (ÈýÕßѡһ¾Í¿ÉÒÔ)
//1.²éѯ³öÉÌÆ·ÐÅÏ¢
select status from t_goods where id=1 for update;
//2.¸ù¾ÝÉÌÆ·ÐÅÏ¢Éú³É¶©µ¥
insert into t_orders (id,goods_id) values (null,1);
//3.ÐÞ¸ÄÉÌÆ·statusΪ2
update t_goods set status=2;
//4.Ìá½»ÊÂÎñ
commit;/commit work;
ÉÏÃæµÄ²éѯÓï¾äÖУ¬ÎÒÃÇʹÓÃÁË select¡for update µÄ·½Ê½£¬ÕâÑù¾Íͨ¹ý¿ªÆôÅÅËûËøµÄ·½Ê½ÊµÏÖÁ˱¯¹ÛËø¡£´ËʱÔÚt_goods±íÖУ¬idΪ1µÄ ÄÇÌõÊý¾Ý¾Í±»ÎÒÃÇËø¶¨ÁË£¬ÆäËüµÄÊÂÎñ±ØÐëµÈ±¾´ÎÊÂÎñÌá½»Ö®ºó²ÅÄÜÖ´ÐС£ÕâÑùÎÒÃÇ¿ÉÒÔ±£Ö¤µ±Ç°µÄÊý¾Ý²»»á±»ÆäËüÊÂÎñÐ޸ġ£
ÉÏÃæÎÒÃÇÌáµ½£¬Ê¹Óà select¡for update »á°ÑÊý¾Ý¸øËø×¡£¬²»¹ýÎÒÃÇÐèҪעÒâÒ»Ð©ËøµÄ¼¶±ð£¬MySQL InnoDBĬÈÏÐм¶Ëø¡£Ðм¶Ëø¶¼ÊÇ»ùÓÚË÷ÒýµÄ£¬Èç¹ûÒ»ÌõSQLÓï¾äÓò»µ½Ë÷ÒýÊDz»»áʹÓÃÐм¶ËøµÄ£¬»áʹÓÃ±í¼¶Ëø°ÑÕûÕűíËø×¡£¬ÕâµãÐèҪעÒâ¡£
ÓŵãÓë²»×ã
±¯¹Û²¢·¢¿ØÖÆÊµ¼ÊÉÏÊÇ¡°ÏÈÈ¡ËøÔÙ·ÃÎÊ¡±µÄ±£ÊزßÂÔ£¬ÎªÊý¾Ý´¦ÀíµÄ°²È«ÌṩÁ˱£Ö¤¡£µ«ÊÇÔÚЧÂÊ·½Ã棬´¦Àí¼ÓËøµÄ»úÖÆ»áÈÃÊý¾Ý¿â²úÉú¶îÍâµÄ¿ªÏú£¬»¹ÓÐÔö¼Ó²úÉúËÀËøµÄ»ú»á£»
ÁíÍ⣬ÔÚÖ»¶ÁÐÍÊÂÎñ´¦ÀíÖÐÓÉÓÚ²»»á²úÉú³åÍ»£¬Ò²Ã»±ØÒªÊ¹ÓÃËø£¬ÕâÑù×öÖ»ÄÜÔö¼Óϵͳ¸ºÔØ£»»¹ÓлήµÍÁ˲¢ÐÐÐÔ£¬Ò»¸öÊÂÎñÈç¹ûËø¶¨ÁËijÐÐÊý¾Ý£¬ÆäËûÊÂÎñ¾Í±ØÐëµÈ´ý¸ÃÊÂÎñ´¦ÀíÍê²Å¿ÉÒÔ´¦ÀíÄÇÐÐÊý
ÀÖ¹ÛËø
ÔÚ¹ØÏµÊý¾Ý¿â¹ÜÀíϵͳÀÀÖ¹Û²¢·¢¿ØÖÆ£¨ÓÖÃû¡°ÀÖ¹ÛËø¡±£¬Optimistic Concurrency Control£¬Ëõд¡°OCC¡±£©ÊÇÒ»ÖÖ²¢·¢¿ØÖƵķ½·¨¡£
Ëü¼ÙÉè¶àÓû§²¢·¢µÄÊÂÎñÔÚ´¦Àíʱ²»»á±Ë´Ë»¥ÏàÓ°Ï죬¸÷ÊÂÎñÄܹ»ÔÚ²»²úÉúËøµÄÇé¿öÏ´¦Àí¸÷×ÔÓ°ÏìµÄÄDz¿·ÖÊý¾Ý¡£ÔÚÌá½»Êý¾Ý¸üÐÂ֮ǰ£¬Ã¿¸öÊÂÎñ»áÏȼì²éÔÚ¸ÃÊÂÎñ¶ÁÈ¡Êý¾Ýºó£¬ÓÐûÓÐÆäËûÊÂÎñÓÖÐÞ¸ÄÁ˸ÃÊý¾Ý¡£
Èç¹ûÆäËûÊÂÎñÓиüÐµĻ°£¬ÕýÔÚÌá½»µÄÊÂÎñ»á½øÐлعö¡£ÀÖ¹ÛÊÂÎñ¿ØÖÆ×îÔçÊÇÓÉ¿×ÏéÖØ£¨H.T.Kung£©½ÌÊÚÌá³ö¡£
ÀÖ¹ÛËø£¨ Optimistic Locking £© Ïà¶Ô±¯¹ÛËø¶øÑÔ£¬ÀÖ¹ÛËø¼ÙÉèÈÏΪÊý¾ÝÒ»°ãÇé¿öϲ»»áÔì³É³åÍ»£¬ËùÒÔÔÚÊý¾Ý½øÐÐÌá½»¸üеÄʱºò£¬²Å»áÕýʽ¶ÔÊý¾ÝµÄ³åÍ»Óë·ñ½øÐмì²â£¬Èç¹û·¢ÏÖ³åÍ»ÁË£¬ÔòÈ÷µ»ØÓû§´íÎóµÄÐÅÏ¢£¬ÈÃÓû§¾ö¶¨ÈçºÎÈ¥×ö¡£
Ïà¶ÔÓÚ±¯¹ÛËø£¬ÔÚ¶ÔÊý¾Ý¿â½øÐд¦ÀíµÄʱºò£¬ÀÖ¹ÛËø²¢²»»áʹÓÃÊý¾Ý¿âÌṩµÄËø»úÖÆ¡£Ò»°ãµÄʵÏÖÀÖ¹ÛËøµÄ·½Ê½¾ÍÊǼǼÊý¾Ý°æ±¾¡£
Êý¾Ý°æ±¾,ΪÊý¾ÝÔö¼ÓµÄÒ»¸ö°æ±¾±êʶ¡£µ±¶ÁÈ¡Êý¾Ýʱ£¬½«°æ±¾±êʶµÄֵһͬ¶Á³ö£¬Êý¾Ýÿ¸üÐÂÒ»´Î£¬Í¬Ê±¶Ô°æ±¾±êʶ½øÐиüС£
µ±ÎÒÃÇÌá½»¸üеÄʱºò£¬ÅжÏÊý¾Ý¿â±í¶ÔÓ¦¼Ç¼µÄµ±Ç°°æ±¾ÐÅÏ¢ÓëµÚÒ»´ÎÈ¡³öÀ´µÄ°æ±¾±êʶ½øÐбȶԣ¬Èç¹ûÊý¾Ý¿â±íµ±Ç°°æ±¾ºÅÓëµÚÒ»´ÎÈ¡³öÀ´µÄ°æ±¾±êʶֵÏàµÈ£¬ÔòÓèÒÔ¸üУ¬·ñÔòÈÏΪÊǹýÆÚÊý¾Ý¡£
ʵÏÖÊý¾Ý°æ±¾ÓÐÁ½ÖÖ·½Ê½£¬µÚÒ»ÖÖÊÇʹÓð汾ºÅ£¬µÚ¶þÖÖÊÇʹÓÃʱ¼ä´Á¡£
ʹÓð汾ºÅʵÏÖÀÖ¹ÛËø
ʹÓð汾ºÅʱ£¬¿ÉÒÔÔÚÊý¾Ý³õʼ»¯Ê±Ö¸¶¨Ò»¸ö°æ±¾ºÅ£¬Ã¿´Î¶ÔÊý¾ÝµÄ¸üвÙ×÷¶¼¶Ô°æ±¾ºÅÖ´ÐÐ+1²Ù×÷¡£²¢Åжϵ±Ç°°æ±¾ºÅÊDz»ÊǸÃÊý¾ÝµÄ×îеİ汾ºÅ¡£
1 .²éѯ³öÉÌÆ·ÐÅÏ¢
select (status,status,version) from t_goods where id=#{id}
2 .¸ù¾ÝÉÌÆ·ÐÅÏ¢Éú³É¶©µ¥
3 .ÐÞ¸ÄÉÌÆ·statusΪ2
update t_goods
set status=2,version=version+1
where id=#{id} and version=#{version};
ÓŵãÓë²»×ã
ÀÖ¹Û²¢·¢¿ØÖÆÏàÐÅÊÂÎñÖ®¼äµÄÊý¾Ý¾ºÕù(data race)µÄ¸ÅÂÊÊDZȽÏСµÄ£¬Òò´Ë¾¡¿ÉÄÜÖ±½Ó×öÏÂÈ¥£¬Ö±µ½Ìá½»µÄʱºò²ÅÈ¥Ëø¶¨£¬ËùÒÔ²»»á²úÉúÈκÎËøºÍËÀËø¡£µ«Èç¹ûÖ±½Ó¼òµ¥Õâô×ö£¬»¹ÊÇÓпÉÄÜ»áÓöµ½²»¿ÉÔ¤ÆÚµÄ½á¹û£¬ÀýÈçÁ½¸öÊÂÎñ¶¼¶ÁÈ¡ÁËÊý¾Ý¿âµÄijһÐУ¬¾¹ýÐÞ¸ÄÒÔºóд»ØÊý¾Ý¿â£¬Õâʱ¾ÍÓöµ½ÁËÎÊÌâ
ÏûÏ¢¶ÓÁм¼ÊõÊÇ·Ö²¼Ê½Ó¦Óü佻»»ÐÅÏ¢µÄÒ»ÖÖ¼¼Êõ¡£ÏûÏ¢¶ÓÁпÉפÁôÔÚÄÚ´æ»ò´ÅÅÌÉÏ,¶ÓÁд洢ÏûÏ¢Ö±µ½ËüÃDZ»Ó¦ÓóÌÐò¶Á×ß¡£Í¨¹ýÏûÏ¢¶ÓÁУ¬Ó¦ÓóÌÐò¿É¶ÀÁ¢µØÖ´ÐÐ--ËüÃDz»ÐèÒªÖªµÀ±Ë´ËµÄλÖᢻòÔÚ¼ÌÐøÖ´ÐÐǰ²»ÐèÒªµÈ´ý½ÓÊÕ³ÌÐò½ÓÊÕ´ËÏûÏ¢¡£
ÔÚ·Ö²¼Ê½¼ÆËã»·¾³ÖУ¬ÎªÁ˼¯³É·Ö²¼Ê½Ó¦Ó㬿ª·¢ÕßÐèÒª¶ÔÒì¹¹ÍøÂç»·¾³Ïµķֲ¼Ê½Ó¦ÓÃÌṩÓÐЧµÄͨÐÅÊֶΡ£ÎªÁ˹ÜÀíÐèÒª¹²ÏíµÄÐÅÏ¢£¬¶ÔÓ¦ÓÃÌṩ¹«¹²µÄÐÅÏ¢½»»»»úÖÆÊÇÖØÒªµÄ¡£
ÏûÏ¢¶ÓÁÐΪ¹¹ÔìÒÔͬ²½»òÒì²½·½Ê½ÊµÏֵķֲ¼Ê½Ó¦ÓÃÌṩÁËËÉñîºÏ·½·¨¡£ÏûÏ¢¶ÓÁеÄAPIµ÷Óñ»Ç¶È뵽еĻòÏÖ´æµÄÓ¦ÓÃÖУ¬Í¨¹ýÏûÏ¢·¢Ë͵½ÄÚ´æ»ò»ùÓÚ´ÅÅ̵ĶÓÁлò´ÓËü¶Á³ö¶øÌṩÐÅÏ¢½»»»¡£ÏûÏ¢¶ÓÁпÉÓÃÔÚÓ¦ÓÃÖÐÒÔÖ´ÐжàÖÖ¹¦ÄÜ£¬±ÈÈçÒªÇó·þÎñ¡¢½»»»ÐÅÏ¢»òÒì²½´¦ÀíµÈ¡£
Öмä¼þÊÇÒ»ÖÖ¶ÀÁ¢µÄϵͳÈí¼þ»ò·þÎñ³ÌÐò£¬·Ö²¼Ê½Ó¦ÓÃϵͳ½èÖúÕâÖÖÈí¼þÔÚ²»Í¬µÄ¼¼ÊõÖ®¼ä¹²Ïí×ÊÔ´£¬¹ÜÀí¼ÆËã×ÊÔ´ºÍÍøÂçͨѶ¡£ËüÔÚ¼ÆËã»úϵͳÖÐÊÇÒ»¸ö¹Ø¼üÈí¼þ£¬ËüÄÜʵÏÖÓ¦ÓõĻ¥Á¬ºÍ»¥²Ù×÷ÐÔ£¬Äܱ£Ö¤ÏµÍ³µÄ°²È«¡¢¿É¿¿¡¢¸ßЧµÄÔËÐС£
Öмä¼þλÓÚÓû§Ó¦ÓúͲÙ×÷ϵͳ¼°ÍøÂçÈí¼þÖ®¼ä£¬ËüΪӦÓÃÌṩÁ˹«ÓõÄͨÐÅÊֶΣ¬²¢ÇÒ¶ÀÁ¢ÓÚÍøÂçºÍ²Ù×÷ϵͳ¡£
Öмä¼þΪ¿ª·¢ÕßÌṩÁ˹«ÓÃÓÚËùÓл·¾³µÄÓ¦ÓóÌÐò½Ó¿Ú£¬µ±Ó¦ÓóÌÐòÖÐǶÈëÆäº¯Êýµ÷Óã¬Ëü±ã¿ÉÀûÓÃÆäÔËÐеÄÌØ¶¨²Ù×÷ϵͳºÍÍøÂç»·¾³µÄ¹¦ÄÜ£¬ÎªÓ¦ÓÃÖ´ÐÐͨÐŹ¦ÄÜ¡£
Èç¹ûûÓÐÏûÏ¢Öмä¼þÍê³ÉÐÅÏ¢½»»»£¬Ó¦Óÿª·¢ÕßΪÁË´«ÊäÊý¾Ý£¬±ØÐëҪѧ»áÈçºÎÓÃÍøÂçºÍ²Ù×÷ϵͳÈí¼þµÄ¹¦ÄÜ£¬±àдÏàÓ¦µÄÓ¦ÓóÌÐòÀ´·¢ËͺͽÓÊÕÐÅÏ¢£¬ÇÒ½»»»ÐÅϢûÓбê×¼·½·¨£¬Ã¿¸öÓ¦ÓñØÐë½øÐÐÌØ¶¨µÄ±à³Ì´Ó¶øºÍ¶àƽ̨¡¢²»Í¬»·¾³ÏµÄÒ»¸ö»ò¶à¸öÓ¦ÓÃͨÐÅ¡£
ÀýÈ磬ΪÁËʵÏÖÍøÂçÉϲ»Í¬Ö÷»úϵͳ¼äµÄͨÐÅ£¬½«ÒªÇó¾ß±¸ÔÚÍøÂçÉÏÈçºÎ½»»»ÐÅÏ¢µÄ֪ʶ£¨±ÈÈçÓÃTCP/IPµÄsocket³ÌÐòÉè¼Æ£©£»ÎªÁËʵÏÖͬһÖ÷»úÄÚ²»Í¬½ø³ÌÖ®¼äµÄͨѶ£¬½«ÒªÇó¾ß±¸²Ù×÷ϵͳµÄÏûÏ¢¶ÓÁлòÃüÃû¹ÜµÀ(Pipes)µÈ֪ʶ¡£
MQµÄͨѶģʽ
1) µã¶ÔµãͨѶ£ºµã¶Ôµã·½Ê½ÊÇ×îΪ´«Í³ºÍ³£¼ûµÄͨѶ·½Ê½£¬ËüÖ§³ÖÒ»¶ÔÒ»¡¢Ò»¶Ô¶à¡¢¶à¶Ô¶à¡¢¶à¶ÔÒ»µÈ¶àÖÖÅäÖ÷½Ê½£¬Ö§³ÖÊ÷×´¡¢Íø×´µÈ¶àÖÖÍØÆË½á¹¹¡£
2) ¶àµã¹ã²¥£ºMQÊÊÓÃÓÚ²»Í¬ÀàÐ͵ÄÓ¦Óá£ÆäÖÐÖØÒªµÄ£¬Ò²ÊÇÕýÔÚ·¢Õ¹ÖеÄÊÇ"¶àµã¹ã²¥"Ó¦Ó㬼´Äܹ»½«ÏûÏ¢·¢Ë͵½¶à¸öÄ¿±êÕ¾µã(Destination List)¡£
¿ÉÒÔʹÓÃÒ»ÌõMQÖ¸Áµ¥Ò»ÏûÏ¢·¢Ë͵½¶à¸öÄ¿±êÕ¾µã£¬²¢È·±£ÎªÃ¿Ò»Õ¾µã¿É¿¿µØÌṩÐÅÏ¢¡£MQ²»½öÌṩÁ˶àµã¹ã²¥µÄ¹¦ÄÜ£¬¶øÇÒ»¹ÓµÓÐÖÇÄÜÏûÏ¢·Ö·¢¹¦ÄÜ£¬ÔÚ½«Ò»ÌõÏûÏ¢·¢Ë͵½Í¬Ò»ÏµÍ³ÉϵĶà¸öÓû§Ê±£¬MQ½«ÏûÏ¢µÄÒ»¸ö¸´Öư汾ºÍ¸ÃϵͳÉϽÓÊÕÕßµÄÃûµ¥·¢Ë͵½Ä¿±êMQϵͳ¡£
Ä¿±êMQϵͳÔÚ±¾µØ¸´ÖÆÕâЩÏûÏ¢£¬²¢½«ËüÃÇ·¢Ë͵½Ãûµ¥ÉϵĶÓÁУ¬´Ó¶ø¾¡¿ÉÄܼõÉÙÍøÂçµÄ´«ÊäÁ¿¡£
3) ·¢²¼/¶©ÔÄ(Publish/Subscribe)ģʽ£º·¢²¼/¶©ÔŦÄÜʹÏûÏ¢µÄ·Ö·¢¿ÉÒÔÍ»ÆÆÄ¿µÄ¶ÓÁеØÀíÖ¸ÏòµÄÏÞÖÆ£¬Ê¹ÏûÏ¢°´ÕÕÌØ¶¨µÄÖ÷ÌâÉõÖÁÄÚÈݽøÐзַ¢£¬Óû§»òÓ¦ÓóÌÐò¿ÉÒÔ¸ù¾ÝÖ÷Ìâ»òÄÚÈݽÓÊÕµ½ËùÐèÒªµÄÏûÏ¢¡£
·¢²¼/¶©ÔŦÄÜʹµÃ·¢ËÍÕߺͽÓÊÕÕßÖ®¼äµÄñîºÏ¹ØÏµ±äµÃ¸üΪËÉÉ¢£¬·¢ËÍÕß²»±Ø¹ØÐĽÓÊÕÕßµÄÄ¿µÄµØÖ·£¬¶ø½ÓÊÕÕßÒ²²»±Ø¹ØÐÄÏûÏ¢µÄ·¢Ë͵ØÖ·£¬¶øÖ»ÊǸù¾ÝÏûÏ¢µÄÖ÷Ìâ½øÐÐÏûÏ¢µÄÊÕ·¢¡£
ÔÚMQ¼Ò×å²úÆ·ÖУ¬MQ Event BrokerÊÇרÃÅÓÃÓÚʹÓ÷¢²¼/¶©Ôļ¼Êõ½øÐÐÊý¾ÝͨѶµÄ²úÆ·£¬ËüÖ§³Ö»ùÓÚ¶ÓÁкÍÖ±½Ó»ùÓÚTCP/IPÁ½ÖÖ·½Ê½µÄ·¢²¼ºÍ¶©ÔÄ¡£
4) Ⱥ¼¯(Cluster)£ºÎªÁ˼ò»¯µã¶ÔµãͨѶģʽÖеÄϵͳÅäÖã¬MQÌṩCluster(Ⱥ¼¯)µÄ½â¾ö·½°¸¡£Èº¼¯ÀàËÆÓÚÒ»¸öÓò(Domain)£¬Èº¼¯ÄÚ²¿µÄ¶ÓÁйÜÀíÆ÷Ö®¼äͨѶʱ£¬²»ÐèÒªÁ½Á½Ö®¼ä½¨Á¢ÏûϢͨµÀ£¬¶øÊDzÉÓÃȺ¼¯(Cluster)ͨµÀÓëÆäËü³ÉԱͨѶ£¬´Ó¶ø´ó´ó¼ò»¯ÁËϵͳÅäÖá£
´ËÍ⣬Ⱥ¼¯ÖеĶÓÁйÜÀíÆ÷Ö®¼äÄܹ»×Ô¶¯½øÐиºÔؾùºâ£¬µ±Ä³Ò»¶ÓÁйÜÀíÆ÷³öÏÖ¹ÊÕÏʱ£¬ÆäËü¶ÓÁйÜÀíÆ÷¿ÉÒÔ½Ó¹ÜËüµÄ¹¤×÷£¬´Ó¶ø´ó´óÌá¸ßϵͳµÄ¸ß¿É¿¿ÐÔ
ÒÔActiveMqΪÀý
ActiveMQÏûÏ¢³Ö¾Ã»¯·½Ê½£¬·Ö±ðÊÇ£ºÎļþ¡¢mysqlÊý¾Ý¿â¡¢oracleÊý¾Ý¿â
a.Îļþ³Ö¾Ã»¯£º
¡¡¡¡ActiveMQĬÈϵÄÏûÏ¢±£´æ·½Ê½£¬Ò»°ãÈç¹ûûÓÐÐ޸ĹýÆäËû³Ö¾Ã»¯·½Ê½µÄ»°¿ÉÒÔ²»ÓÃÐÞ¸ÄÅäÖÃÎļþ¡£
¡¡¡¡Èç¹ûÊÇÐ޸ĹýµÄ£¬´ò¿ªÅÌ·û£º\apache-activemq-°æ±¾ºÅ\conf\activemq.xml£¬È»ºóÕÒµ½<persistenceAdapter>½Úµã£¬½«ÆäÌæ»»³ÉÒÔÏ´úÂë¶Î
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/kahadb"/>
</persistenceAdapter>
¡¡¡¡È»ºóÐÞ¸ÄÅäÖÃÎļþ£¨´Ë´¦ÑÝʾΪspring+ActiveMQ£©£¬ÕÒµ½ÏûÏ¢·¢ËÍÕßËù¶ÔÓ¦µÄJmsTemplateÅäÖôúÂë¿é£¬Ôö¼ÓÒÔÏÂÅäÖÃ
<!-- ÊÇ·ñ³Ö¾Ã»¯ DeliveryMode.NON_PERSISTENT=1:·Ç³Ö¾Ã ; DeliveryMode.PERSISTENT=2:³Ö¾Ã -->
<property name="deliveryMode" value="2" />
¡¡¡¡ÒÔÏÂÊÇJmsTemplateÅäÖÃÍêÕû°æ
<!-- SpringÌṩµÄJMS¹¤¾ßÀ࣬Ëü¿ÉÒÔ½øÐÐÏûÏ¢·¢ËÍ¡¢½ÓÊÕµÈ -->
<bean id="jmsTemplateOne" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<!-- ÉèÖÃĬÈϵÄÏûϢĿµÄµØ-->
<property name="defaultDestination" ref="queueDestination"/>
<property name="receiveTimeout" value="10000" />
<!-- ÊÇ·ñ³Ö¾Ã»¯ DeliveryMode.NON_PERSISTENT=1:·Ç³Ö¾Ã ; DeliveryMode.PERSISTENT=2:³Ö¾Ã -->
<property name="deliveryMode" value="2" />
</bean>
¡¡¡¡ÕâÑù¾ÍËãÅäÖÃÍê³ÉÁËÎļþ³Ö¾Ã»¯·½Ê½ÁË£¬ÖØÆôÏîÄ¿ºÍActiveMQ£¬·¢ËÍÒ»¶¨ÏûÏ¢¶ÓÁÐÖ®ºó¹Ø±ÕActiveMQ·þÎñ£¬ÔÙÆô¶¯£¬Äã¿ÉÒÔ¿´µ½Ö®Ç°·¢Ë͵ÄÏûϢδÏû·ÑµÄÒÀÈ»±£³ÖÔÚÎļþÀïÃæ£¬¼ÌÐøÈüàÌýÕßÏû·Ñ¡£
b.MySQL³Ö¾Ã»¯
¡¡¡¡Ê×ÏÈÐèÒª°ÑMySqlµÄÇý¶¯·Åµ½ActiveMQµÄLibĿ¼Ï£¬ÎÒÓõÄÎļþÃû×ÖÊÇ£ºmysql-connector-java-5.1.27.jar
¡¡¡¡È»ºó´ò¿ªÅÌ·û£º\apache-activemq-°æ±¾ºÅ\conf\activemq.xml£¬È»ºóÕÒµ½<persistenceAdapter>½Úµã£¬½«ÆäÌæ»»³ÉÒÔÏ´úÂë¶Î
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#derby-ds"/>
</persistenceAdapter>
ÔÚÅäÖÃÎļþÖеÄbroker½ÚµãÍâÔö¼ÓÒÔÏ´úÂë
<bean id="derby-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
¡¡¡¡ÕâÑù¾ÍËãÍê³ÉÁËmysql³Ö¾Ã»¯ÅäÖÃÁË£¬ÑéÖ¤·½Ê½Í¬a£¬´ò¿ªmysqlÊý¾Ý¿âÄãÄÜ¿´µ½ÈýÕÅ±í£¬·Ö±ðÊÇ£ºactivemq_acks£¬activemq_lock£¬activemq_msgs¡£
c.Oracle³Ö¾Ã»¯
oracleµÄÅäÖúÍmysqlÒ»Ñù£¬ÔÚLibĿ¼Ï£¬·ÅÈëoracleµÄÇý¶¯°ü£¬È»ºóÅäÖÃÒ»ÏÂÅäÖÃÎļþ¼´¿É¡£
<bean id="derby-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhsot:1521:orcl"/>
<property name="username" value="activemq"/>
<property name="password" value="amqadmin"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
1 . RedisÖУ¬²¢²»ÊÇËùÓеÄÊý¾Ý¶¼Ò»Ö±´æ´¢ÔÚÄÚ´æÖеģ¬ÕâÊǺÍMemcachedÏà±ÈÒ»¸ö×î´óµÄÇø±ð¡£
2 . redis²»½ö½öÖ§³Ö¼òµ¥µÄk/vÀàÐ͵ÄÊý¾Ý£¬Í¬Ê±»¹Ìṩlist£¬set£¬hashµÈÊý¾Ý½á¹¹µÄ´æ´¢¡£
3 . RedisÖ§³ÖÊý¾ÝµÄ±¸·Ý£¬¼´master-slaveģʽµÄÊý¾Ý±¸·Ý¡£
4 . RedisÖ§³ÖÊý¾ÝµÄ³Ö¾Ã»¯£¬¿ÉÒÔ½«ÄÚ´æÖеÄÊý¾Ý±£³ÖÔÚ´ÅÅÌÖУ¬ÖØÆôµÄʱºò¿ÉÒÔÔٴμÓÔØ½øÐÐʹÓá£
RedisÔÚºÜ¶à·½Ãæ¾ß±¸Êý¾Ý¿âµÄÌØÕ÷£¬»òÕß˵¾ÍÊÇÒ»¸öÊý¾Ý¿âϵͳ£¬¶øMemcachedÖ»ÊǼòµ¥µÄK/V»º´æ
»º´æ,×ökey-valueÐÍÊý¾Ý¿â
RDB³Ö¾Ã»¯ÅäÖÃ
Redis»á½«Êý¾Ý¼¯µÄ¿ìÕÕdumpµ½dump.rdbÎļþÖС£´ËÍ⣬ÎÒÃÇÒ²¿ÉÒÔͨ¹ýÅäÖÃÎļþÀ´ÐÞ¸ÄRedis·þÎñÆ÷dump¿ìÕյįµÂÊ£¬ÔÚ´ò¿ª6379.confÎļþÖ®ºó£¬ÎÒÃÇËÑË÷save£¬¿ÉÒÔ¿´µ½ÏÂÃæµÄÅäÖÃÐÅÏ¢£º
save 900 1 #ÔÚ900Ãë(15·ÖÖÓ)Ö®ºó£¬Èç¹ûÖÁÉÙÓÐ1¸ökey·¢Éú±ä»¯£¬ÔòdumpÄÚ´æ¿ìÕÕ¡£
save 300 10 #ÔÚ300Ãë(5·ÖÖÓ)Ö®ºó£¬Èç¹ûÖÁÉÙÓÐ10¸ökey·¢Éú±ä»¯£¬ÔòdumpÄÚ´æ¿ìÕÕ¡£
save 60 10000 #ÔÚ60Ãë(1·ÖÖÓ)Ö®ºó£¬Èç¹ûÖÁÉÙÓÐ10000¸ökey·¢Éú±ä»¯£¬ÔòdumpÄÚ´æ¿ìÕÕ¡£
AOF³Ö¾Ã»¯ÅäÖÃ
ÔÚRedisµÄÅäÖÃÎļþÖдæÔÚÈýÖÖͬ²½·½Ê½£¬ËüÃÇ·Ö±ðÊÇ£º
appendfsync always #ÿ´ÎÓÐÊý¾ÝÐ޸ķ¢Éúʱ¶¼»áдÈëAOFÎļþ¡£
appendfsync everysec #ÿÃëÖÓͬ²½Ò»´Î£¬¸Ã²ßÂÔΪAOFµÄȱʡ²ßÂÔ¡£
appendfsync no #´Ó²»Í¬²½¡£¸ßЧµ«ÊÇÊý¾Ý²»»á±»³Ö¾Ã»¯¡£
ÅäÖÃÖ÷´Ó·þÎñÆ÷RedisÖ÷´Ó·þÎñÆ÷µÄ´î½¨ºÜ¼òµ¥£¬Ö»ÒªÉÙÐíÅäÖü´¿É£¬ÎªÁËÑÝʾµÄ·½±ã£¬ÎÒÃǾÍÔÚһ̨·þÎñÆ÷ÉÏÅäÖãºÇ°ÌáÊÇÄãÒѾÓÐÁËһ̨redis·þÎñÆ÷£¬Èç¹ûûÓпÉÒԲο¼ÎÒÒÔǰµÄÎÄÕ°²×°¡£ÏÂÃæ¿´¿´ÈçºÎÅäÖôӷþÎñÆ÷£º¼ÙÉèÖ÷·þÎñÆ÷µÄÅäÖÃÎļþÊÇ£º/etc/redis.conf£¬ÎÒÃǸ´ÖÆÒ»·Ý×÷Ϊ´Ó·þÎñÆ÷µÄÅäÖÃÎļþ£ºcp /etc/redis.conf /etc/redis_slave.conf²¢×÷Ð޸ģº# vi /etc/redis_slave.confport 6380dbfilename dump_slave.rdbslaveof 127.0.0.1 6379Ö÷·þÎñÆ÷µÄ¶Ë¿ÚʹÓõÄÊÇȱʡµÄ6379£¬´Ó·þÎñÆ÷µÄ¶Ë¿ÚÎÒÃÇÉèÖóÉ6380¡£È»ºó²åÈëһЩ²âÊÔÊý¾Ý£ºredis-benchmarkÓÉÓÚÎÒÃÇûÓÐÉ趨ÈκβÎÊý£¬ËùÒÔʹÓõÄÊÇȱʡ¶Ë¿Ú£¨6379£©£¬ÔÚ±¾ÀýÖоÍÊÇÖ÷·þÎñÆ÷¡£È»ºóÆô¶¯´Ó·þÎñÆ÷£ºredis-server /etc/redis_slave.confÈ·ÈÏÒ»ÏÂÊÇ·ñ¶¼Õý³£Æô¶¯ÁË£ºps -ef | grep redis½øÈëÊý¾ÝĿ¼£¬²éÒ»ÏÂÊý¾ÝÎļþµÄÉ¢ÁУºmd5sum *.rdbÄã»á·¢ÏÖÊý¾ÝÎļþÉ¢Áж¼Ò»Ñù£¬×Ô¶¯Í¬²½ÁË¡£È»ºóÎÒÃǹرÕһϴӷþÎñÆ÷£¨²»¹ØÒ²ÐУ¬ÎÒ¾ÍÊÇΪÁ˸æËßÄãÈçºÎÕýÈ·¹Ø±Õredis·þÎñÆ÷£©£ºredis-cli -p 6380 shutdown½Ó×ÅÔÙÍùÖ÷·þÎñÆ÷ÉÏдÈë²âÊÔÊý¾Ý£ºredis-benchmark -lÕâ»áÑ»·²åÈë²âÊÔÊý¾Ý£¬Êý¾ÝÁ¿µÄ´óСȡ¾öÓÚʱ¼äµÄ³¤¶Ì£¬Äã¿ÉÒÔÔÚÊʵ±µÄʱºò°´ctrl+cÍ£Ö¹¡£Èç¹û´Ó·þÎñÆ÷ûÓÐÆô¶¯µÄ»°£¬½Ó×ÅÔÙÖØÐÂÆô¶¯´Ó·þÎñÆ÷£ºredis-server /etc/redis_slave.confͨ¹ý¹Û²ìÎļþ´óСÄã»á·¢ÏÖÊý¾Ý»á×Ô¶¯Í¬²½£¬Èç¹ûûÓÐÖØÆô¶¯´Ó·þÎñÆ÷£¬ÄÇôÊý¾ÝÎļþµÄmd5sumÉ¢ÁÐÖµ¿ÉÄܲ»Í¬£¬ÕâÊÇÕý³£µÄ£¬²»Òª½ô¡£ÔÚ²Ù×÷¹ý³ÌÖУ¬ÓÐʱºòÄã»á·¢ÏÖÖ÷´Ó·þÎñÆ÷µÄÊý¾ÝÎļþ´óС²»Ò»Ñù£¬Ò»°ãÀ´ËµÒ²²»ÊÇÎÊÌ⣬ÒòΪredisÊÇÒ첽дÈë´ÅÅ̵쬴Ëʱ¿ÉÄÜÓв¿·ÖÊý¾Ý»¹ÔÚÄÚ´æÖУ¬Ã»ÓÐͬ²½µ½´ÅÅÌ£¬ËùÒÔÎļþ´óСÂÔÏÔ²»Í¬£¬¿ÉÒÔ·Ö±ðÔÚÖ÷´Ó·þÎñÆ÷ÉÏÖ´ÐУºredis-cli save£¨redis-cli -p 6380 save£©ÕâÌõÃüÁîÇ¿ÖÆÍ¬²½µ½´ÅÅÌ£¬ÔÙ¿´´óС¾ÍÓ¦¸ÃÒ»ÑùÁË¡£ÅäÖÃÎļþredis.confÀïÓÐÒ»²¿·ÖºÍsaveÏà¹ØµÄ²ÎÊý£¬È±Ê¡ÈçÏ£º# Save the DB on disk:## save <seconds> <changes>## Will save the DB if both the given number of seconds and the given# number of write operations against the DB occurred.## In the example below the behaviour will be to save:# after 900 sec (15 min) if at least 1 key changed# after 300 sec (5 min) if at least 10 keys changed# after 60 sec if at least 10000 keys changedsave 900 1save 300 10save 60 10000ÔÚÖ÷·þÎñÆ÷ÉÏ£¬ÎÒÃÇ¿ÉÒÔÈ¥µôÉÏÃæµÄÉèÖ㬸ijÉÀàËÆÏÂÃæµÄÉèÖã¨Ö»Òª²ÎÊýÖµ¹»´ó¼´¿É£©£ºsave 10000000000 10000000000Èç´ËÒ»À´Ö÷·þÎñÆ÷±ä³ÉÒ»¸öÍêÈ«µÄÄÚ´æ·þÎñÆ÷£¬ËùÓеIJÙ×÷¶¼ÔÚÄÚ´æÀïÍê³É£¬¡°ÓÀÔ¶¡±²»»áÔÙÍù´ÅÅÌÉϳ־û¯±£´æÊý¾Ý£¬Òì²½µÄҲûÓС£³Ö¾Ã»¯Ôòͨ¹ý´Ó·þÎñÆ÷À´Íê ³É£¬ÕâÑùÔÚ²Ù×÷Ö÷·þÎñÆ÷µÄʱºòЧÂÊ»á¸ü¸ß¡£²»¹ýҪעÒâµÄÒ»µãÊÇ´Ë·½·¨²»Êʺϱ£´æ¹Ø¼üÊý¾Ý£¬·ñÔòÒ»µ©Ö÷·þÎñÆ÷¹Òµô£¬Èç¹ûÄãÍ·ÄÔÒ»Èȼòµ¥µÄÖØÆô·þÎñ£¬ÄÇô´Ó·þ ÎñÆ÷µÄÊý¾ÝÒ²»á¸ú×ÅÏûʧ£¬´Ëʱ£¬±ØÐ뿽±´Ò»·Ý±¸·ÝÊý¾Ýµ½Ö÷·þÎñÆ÷£¬È»ºóÔÙÖØÆô·þÎñ²Å¿ÉÒÔ£¬Êý¾ÝµÄ»Ö¸´ÉÔÏÔÂé·³¡£´Ó·þÎñÆ÷Ò²¿ÉÒÔͨ¹ýÉèÖÃÕâ¸ö²ÎÊýÀ´µ÷Õû´ÓÄÚ´æÍ¬²½µ½´ÅÅÌµÄÆµÂÊ¡£ÀûÓÃÖ÷´Ó·þÎñÆ÷±¸·Ý¿ÉÒÔÀûÓÃÖ÷´Ó·þÎñÆ÷µÄ·½±ãÐÔÀ´±¸·Ý£¬×¨ÃÅ×öһ̨´Ó·þÎñÆ÷ÓÃÓÚ±¸·Ý¹¦ÄÜ£¬µ±ÐèÒª±¸·ÝµÄʱºò£¬ÔÚ´Ó·þÎñÆ÷ÉÏÖ´ÐÐÏÂÁÐÃüÁredis-cli saveredis-cli shutdownÈ»ºó¿½±´Êý¾ÝĿ¼ÏµÄrdbÎļþ¼´¿É
Redis ¼¯ÈºÖÐÄÚÖÃÁË 16384 ¸ö¹þÏ£²Û£¬µ±ÐèÒªÔÚ redis ¼¯ÈºÖзÅÖÃÒ»¸ö key-valueʱ£¬redis ÏÈ¶Ô key ʹÓà crc16 Ëã·¨Ëã³öÒ»¸ö½á¹û£¬È»ºó°Ñ½á¹û¶Ô 16384 ÇóÓàÊý£¬ÕâÑùÿ¸ö key ¶¼»á¶ÔÓ¦Ò»¸ö±àºÅÔÚ 0-16383 Ö®¼äµÄ¹þÏ£²Û£¬redis »á¸ù¾Ý½ÚµãÊýÁ¿´óÖ¾ùµÈµÄ½«¹þÏ£²ÛÓ³Éäµ½²»Í¬µÄ½Úµã
RedisÄÚ´æÌÔÌÖ¸µÄÊÇÓû§´æ´¢µÄһЩ¼ü±»¿ÉÒÔ±»RedisÖ÷¶¯µØ´ÓʵÀýÖÐɾ³ý£¬´Ó¶ø²úÉú¶ÁmissµÄÇé¿ö£¬ÄÇôRedisΪʲôҪÓÐÕâÖÖ¹¦ÄÜ£¿Õâ¾ÍÊÇÎÒÃÇÐèҪ̽¾¿µÄÉè¼Æ³õÖÔ¡£Redis×î³£¼ûµÄÁ½ÖÖÓ¦Ó󡾰Ϊ»º´æºÍ³Ö¾Ã´æ´¢£¬Ê×ÏÈÒªÃ÷È·µÄÒ»¸öÎÊÌâÊÇÄÚ´æÌÔ̲ßÂÔ¸üÊʺÏÓÚÄÇÖÖ³¡¾°£¿Êdz־ô洢»¹ÊÇ»º´æ£¿ÄÚ´æµÄÌÔÌ»úÖÆµÄ³õÖÔÊÇΪÁ˸üºÃµØÊ¹ÓÃÄڴ棬ÓÃÒ»¶¨µÄ»º´æmissÀ´»»È¡ÄÚ´æµÄʹÓÃЧÂÊ¡£×÷ΪRedisÓû§£¬ÎÒÈçºÎʹÓÃRedisÌṩµÄÕâ¸öÌØÐÔÄØ£¿¿´¿´ÏÂÃæÅäÖÃ# maxmemory <bytes>ÎÒÃÇ¿ÉÒÔͨ¹ýÅäÖÃredis.confÖеÄmaxmemoryÕâ¸öÖµÀ´¿ªÆôÄÚ´æÌÔ̹¦ÄÜ£¬ÖÁÓÚÕâ¸öÖµÓÐʲôÒâÒ壬ÎÒÃÇ¿ÉÒÔͨ¹ýÁ˽âÄÚ´æÌÔ̵Ĺý³ÌÀ´Àí½âËüµÄÒâÒ壺1 . ¿Í»§¶Ë·¢ÆðÁËÐèÒªÉêÇë¸ü¶àÄÚ´æµÄÃüÁÈçset£©¡£2 .Redis¼ì²éÄÚ´æÊ¹ÓÃÇé¿ö£¬Èç¹ûÒÑʹÓõÄÄÚ´æ´óÓÚmaxmemoryÔò¿ªÊ¼¸ù¾ÝÓû§ÅäÖõIJ»Í¬ÌÔ̲ßÂÔÀ´ÌÔÌÄڴ棨key£©£¬´Ó¶ø»»È¡Ò»¶¨µÄÄÚ´æ¡£3 .Èç¹ûÉÏÃæ¶¼Ã»ÎÊÌ⣬ÔòÕâ¸öÃüÁîÖ´Ðгɹ¦¡£maxmemoryΪ0µÄʱºò±íʾÎÒÃǶÔRedisµÄÄÚ´æÊ¹ÓÃûÓÐÏÞÖÆ¡£RedisÌṩÁËÏÂÃæ¼¸ÖÖÌÔ̲ßÂÔ¹©Óû§Ñ¡Ôñ£¬ÆäÖÐĬÈϵIJßÂÔΪnoeviction²ßÂÔ£º¡¤ noeviction£ºµ±ÄÚ´æÊ¹ÓôﵽãÐÖµµÄʱºò£¬ËùÓÐÒýÆðÉêÇëÄÚ´æµÄÃüÁî»á±¨´í¡£¡¤ allkeys-lru£ºÔÚÖ÷¼ü¿Õ¼äÖУ¬ÓÅÏÈÒÆ³ý×î½üδʹÓõÄkey¡£¡¤ volatile-lru£ºÔÚÉèÖÃÁ˹ýÆÚʱ¼äµÄ¼ü¿Õ¼äÖУ¬ÓÅÏÈÒÆ³ý×î½üδʹÓõÄkey¡£¡¤ allkeys-random£ºÔÚÖ÷¼ü¿Õ¼äÖУ¬Ëæ»úÒÆ³ýij¸ökey¡£¡¤ volatile-random£ºÔÚÉèÖÃÁ˹ýÆÚʱ¼äµÄ¼ü¿Õ¼äÖУ¬Ëæ»úÒÆ³ýij¸ökey¡£¡¤ volatile-ttl£ºÔÚÉèÖÃÁ˹ýÆÚʱ¼äµÄ¼ü¿Õ¼äÖУ¬¾ßÓиüÔç¹ýÆÚʱ¼äµÄkeyÓÅÏÈÒÆ³ý¡£ÕâÀï²¹³äÒ»ÏÂÖ÷¼ü¿Õ¼äºÍÉèÖÃÁ˹ýÆÚʱ¼äµÄ¼ü¿Õ¼ä£¬¾Ù¸öÀý×Ó£¬¼ÙÉèÎÒÃÇÓÐÒ»Åú¼ü´æ´¢ÔÚRedisÖУ¬ÔòÓÐÄÇôһ¸ö¹þÏ£±íÓÃÓÚ´æ´¢ÕâÅú¼ü¼°ÆäÖµ£¬Èç¹ûÕâÅú¼üÖÐÓÐÒ»²¿·ÖÉèÖÃÁ˹ýÆÚʱ¼ä£¬ÄÇôÕâÅú¼ü»¹»á±»´æ´¢µ½ÁíÍâÒ»¸ö¹þÏ£±íÖУ¬Õâ¸ö¹þÏ£±íÖеÄÖµ¶ÔÓ¦µÄÊǼü±»ÉèÖõĹýÆÚʱ¼ä¡£ÉèÖÃÁ˹ýÆÚʱ¼äµÄ¼ü¿Õ¼äΪÖ÷¼ü¿Õ¼äµÄ×Ó¼¯¡£ÎÒÃÇÁ˽âÁËRedis´ó¸ÅÌṩÁËÕâô¼¸ÖÖÌÔ̲ßÂÔ£¬ÄÇôÈçºÎÑ¡ÔñÄØ£¿ÌÔ̲ßÂÔµÄÑ¡Ôñ¿ÉÒÔͨ¹ýÏÂÃæµÄÅäÖÃÖ¸¶¨£º# maxmemory-policy noevictionµ«ÊÇÕâ¸öÖµÌîÊ²Ã´ÄØ£¿Îª½â¾öÕâ¸öÎÊÌ⣬ÎÒÃÇÐèÒªÁ˽âÎÒÃǵÄÓ¦ÓÃÇëÇó¶ÔÓÚRedisÖд洢µÄÊý¾Ý¼¯µÄ·ÃÎÊ·½Ê½ÒÔ¼°ÎÒÃǵÄËßÇóÊÇʲô¡£Í¬Ê±RedisÒ²Ö§³ÖRuntimeÐÞ¸ÄÌÔ̲ßÂÔ£¬ÕâʹµÃÎÒÃDz»ÐèÒªÖØÆôRedisʵÀý¶øÊµÊ±µÄµ÷ÕûÄÚ´æÌÔ̲ßÂÔ¡£ÏÂÃæ¿´¿´¼¸ÖÖ²ßÂÔµÄÊÊÓó¡¾°£º¡¤ allkeys-lru£ºÈç¹ûÎÒÃǵÄÓ¦ÓöԻº´æµÄ·ÃÎÊ·ûºÏÃÝÂÉ·Ö²¼£¨Ò²¾ÍÊÇ´æÔÚÏà¶ÔÈȵãÊý¾Ý£©£¬»òÕßÎÒÃDz»Ì«Çå³þÎÒÃÇÓ¦ÓõĻº´æ·ÃÎÊ·Ö²¼×´¿ö£¬ÎÒÃÇ¿ÉÒÔÑ¡Ôñallkeys-lru²ßÂÔ¡£¡¤ allkeys-random£ºÈç¹ûÎÒÃǵÄÓ¦ÓöÔÓÚ»º´ækeyµÄ·ÃÎʸÅÂÊÏàµÈ£¬Ôò¿ÉÒÔʹÓÃÕâ¸ö²ßÂÔ¡£¡¤ volatile-ttl£ºÕâÖÖ²ßÂÔʹµÃÎÒÃÇ¿ÉÒÔÏòRedisÌáʾÄÄЩkey¸üÊʺϱ»eviction¡£ÁíÍ⣬volatile-lru²ßÂÔºÍvolatile-random²ßÂÔÊʺÏÎÒÃǽ«Ò»¸öRedisʵÀý¼ÈÓ¦ÓÃÓÚ»º´æºÍÓÖÓ¦ÓÃÓڳ־û¯´æ´¢µÄʱºò£¬È»¶øÎÒÃÇÒ²¿ÉÒÔͨ¹ýʹÓÃÁ½¸öRedisʵÀýÀ´´ïµ½ÏàͬµÄЧ¹û£¬ÖµµÃÒ»ÌáµÄÊǽ«keyÉèÖùýÆÚʱ¼äʵ¼ÊÉÏ»áÏûºÄ¸ü¶àµÄÄڴ棬Òò´ËÎÒÃǽ¨ÒéʹÓÃallkeys-lru²ßÂÔ´Ó¶ø¸üÓÐЧÂʵÄʹÓÃÄÚ´æ¡£
String¡ª¡ª×Ö·û´®Hash¡ª¡ª×ÖµäList¡ª¡ªÁбíSet¡ª¡ª¼¯ºÏSorted Set¡ª¡ªÓÐÐò¼¯ºÏ
ZooKeeper ¹ËÃû˼Òå ¶¯ÎïÔ°¹ÜÀíÔ±£¬ËûÊÇÄÃÀ´¹Ü´óÏó(Hadoop) ¡¢ ÃÛ·ä(Hive) ¡¢ СÖí(Pig) µÄ¹ÜÀíÔ±£¬ Apache HbaseºÍ Apache Solr ÒÔ¼°LinkedIn sensei µÈÏîÄ¿Öж¼²ÉÓõ½ÁË Zookeeper¡£ZooKeeperÊÇÒ»¸ö·Ö²¼Ê½µÄ£¬¿ª·ÅÔ´ÂëµÄ·Ö²¼Ê½Ó¦ÓóÌÐòе÷·þÎñ£¬ZooKeeperÊÇÒÔFast PaxosË㷨Ϊ»ù´¡£¬ÊµÏÖͬ²½·þÎñ£¬ÅäÖÃά»¤ºÍÃüÃû·þÎñµÈ·Ö²¼Ê½Ó¦ÓÃ
ZookeeperÊÇÕë¶Ô´óÐÍ·Ö²¼Ê½ÏµÍ³µÄ¸ß¿É¿¿µÄе÷ϵͳ¡£ÓÉÕâ¸ö¶¨ÒåÎÒÃÇÖªµÀzookeeperÊǸöе÷ϵͳ£¬×÷ÓõĶÔÏóÊÇ·Ö²¼Ê½ÏµÍ³¡£ÎªÊ²Ã´·Ö²¼Ê½ÏµÍ³ÐèÒªÒ»¸öе÷ϵͳÁË£¿ÀíÓÉÈçÏ£º¡¡¡¡¿ª·¢·Ö²¼Ê½ÏµÍ³ÊǼþºÜÀ§ÄѵÄÊÂÇ飬ÆäÖеÄÀ§ÄÑÖ÷ÒªÌåÏÖÔÚ·Ö²¼Ê½ÏµÍ³µÄ¡°²¿·Öʧ°Ü¡±¡£¡°²¿·Öʧ°Ü¡±ÊÇÖ¸ÐÅÏ¢ÔÚÍøÂçµÄÁ½¸ö½ÚµãÖ®¼ä´«ËÍʱºò£¬Èç¹ûÍøÂç³öÁ˹ÊÕÏ£¬·¢ËÍÕßÎÞ·¨ÖªµÀ½ÓÊÕÕßÊÇ·ñÊÕµ½ÁËÕâ¸öÐÅÏ¢£¬¶øÇÒÕâÖÖ¹ÊÕϵÄÔÒòºÜ¸´ÔÓ£¬½ÓÊÕÕß¿ÉÄÜÔÚ³öÏÖÍøÂç´íÎó֮ǰÒѾÊÕµ½ÁËÐÅÏ¢£¬Ò²¿ÉÄÜûÓÐÊÕµ½£¬ÓÖ»ò½ÓÊÕÕߵĽø³ÌËÀµôÁË¡£ ·¢ËÍÕßÄܹ»»ñµÃÕæÊµÇé¿öµÄΨһ°ì·¨¾ÍÊÇÖØÐÂÁ¬½Óµ½½ÓÊÕÕߣ¬Ñ¯ÎʽÓÊÕÕß´íÎóµÄÔÒò£¬Õâ¾ÍÊÇ·Ö²¼Ê½ÏµÍ³¿ª·¢ÀïµÄ¡°²¿·Öʧ°Ü¡±ÎÊÌâ¡£¡¡¡¡Zookeeper¾ÍÊǽâ¾ö·Ö²¼Ê½ÏµÍ³¡°²¿·Öʧ°Ü¡±µÄ¿ò¼Ü¡£Zookeeper²»ÊÇÈ÷ֲ¼Ê½ÏµÍ³±ÜÃâ¡°²¿·Öʧ°Ü¡±ÎÊÌ⣬¶øÊÇÈ÷ֲ¼Ê½ÏµÍ³µ±Åöµ½²¿·Öʧ°Üʱºò£¬¿ÉÒÔÕýÈ·µÄ´¦Àí´ËÀàµÄÎÊÌ⣬È÷ֲ¼Ê½ÏµÍ³ÄÜÕý³£µÄÔËÐС£¡¡¡¡ÏÂÃæÎÒÒª½²½²zookeeperµÄʵ¼ÊÔËÓó¡¾°£º¡¡¡¡³¡¾°Ò»£ºÓÐÒ»×é·þÎñÆ÷Ïò¿Í»§¶ËÌṩijÖÖ·þÎñ£¨ÀýÈ磺ÎÒÇ°Ãæ×öµÄ·Ö²¼Ê½ÍøÕ¾µÄ·þÎñ¶Ë£¬¾ÍÊÇÓÉËĄ̈·þÎñÆ÷×é³ÉµÄ¼¯Èº£¬Ïòǰ¶Ë¼¯ÈºÌṩ·þÎñ£©£¬ÎÒÃÇÏ£Íû¿Í»§¶Ëÿ´ÎÇëÇó·þÎñ¶Ë¶¼¿ÉÒÔÕÒµ½·þÎñ¶Ë¼¯ÈºÖÐijһ̨·þÎñÆ÷£¬ÕâÑù·þÎñ¶Ë¾Í¿ÉÒÔÏò¿Í»§¶ËÌṩ¿Í»§¶ËËùÐèµÄ·þÎñ¡£ ¶ÔÓÚÕâÖÖ³¡¾°£¬ÎÒÃǵijÌÐòÖÐÒ»¶¨ÓÐÒ»·ÝÕâ×é·þÎñÆ÷µÄÁÐ±í£¬Ã¿´Î¿Í»§¶ËÇëÇóʱºò£¬¶¼ÊÇ´ÓÕâ·ÝÁбíÀï¶ÁÈ¡Õâ·Ý·þÎñÆ÷ÁÐ±í¡£ÄÇôÕâ·ÖÁбíÏÔÈ»²»ÄÜ´æ´¢ÔÚһ̨µ¥½ÚµãµÄ·þÎñÆ÷ÉÏ£¬·ñÔòÕâ¸ö½Úµã¹ÒµôÁË£¬Õû¸ö¼¯Èº¶¼»á·¢Éú¹ÊÕÏ£¬ÎÒÃÇÏ£ÍûÕâ·ÝÁбíʱ¸ß¿ÉÓõġ£ ¸ß¿ÉÓõĽâ¾ö·½°¸ÊÇ£ºÕâ·ÝÁбíÊÇ·Ö²¼Ê½´æ´¢µÄ£¬ËüÊÇÓÉ´æ´¢Õâ·ÝÁбíµÄ·þÎñÆ÷¹²Í¬¹ÜÀíµÄ£¬Èç¹û´æ´¢ÁбíÀïµÄij̨·þÎñÆ÷»µµôÁË£¬ÆäËû·þÎñÆ÷ÂíÉÏ¿ÉÒÔÌæ´ú»µµôµÄ·þÎñÆ÷£¬²¢ÇÒ¿ÉÒÔ°Ñ»µµôµÄ·þÎñÆ÷´ÓÁбíÀïɾ³ýµô£¬ÈùÊÕÏ·þÎñÆ÷Í˳öÕû¸ö¼¯ÈºµÄÔËÐУ¬¶øÕâÒ»ÇеIJÙ×÷ÓÖ²»»áÓɹÊÕϵķþÎñÆ÷À´²Ù×÷£¬¶øÊǼ¯ÈºÀïÕý³£µÄ·þÎñÆ÷À´Íê³É¡£ ÕâÊÇÒ»ÖÖÖ÷¶¯µÄ·Ö²¼Ê½Êý¾Ý½á¹¹£¬Äܹ»ÔÚÍⲿÇé¿ö·¢Éú±ä»¯Ê±ºòÖ÷¶¯ÐÞ¸ÄÊý¾ÝÏî״̬µÄÊý¾Ý»ú¹¹¡£Zookeeper¿ò¼ÜÌṩÁËÕâÖÖ·þÎñ¡£ÕâÖÖ·þÎñÃû×Ö¾ÍÊÇ£ºÍ³Ò»ÃüÃû·þÎñ£¬ËüºÍjavaEEÀïµÄJNDI·þÎñºÜÏñ¡£¡¡¡¡³¡¾°¶þ£º·Ö²¼Ê½Ëø·þÎñ¡£µ±·Ö²¼Ê½ÏµÍ³²Ù×÷Êý¾Ý£¬ÀýÈ磺¶ÁÈ¡Êý¾Ý¡¢·ÖÎöÊý¾Ý¡¢×îºóÐÞ¸ÄÊý¾Ý¡£ÔÚ·Ö²¼Ê½ÏµÍ³ÀïÕâЩ²Ù×÷¿ÉÄÜ»á·ÖÉ¢µ½¼¯ÈºÀﲻͬµÄ½ÚµãÉÏ£¬ÄÇôÕâʱºò¾Í´æÔÚÊý¾Ý²Ù×÷¹ý³ÌÖÐÒ»ÖÂÐÔµÄÎÊÌ⣬Èç¹û²»Ò»Ö£¬ÎÒÃǽ«»áµÃµ½Ò»¸ö´íÎóµÄÔËËã½á¹û£¬ÔÚµ¥Ò»½ø³ÌµÄ³ÌÐòÀһÖÂÐÔµÄÎÊÌâºÜºÃ½â¾ö£¬µ«Êǵ½ÁË·Ö²¼Ê½ÏµÍ³¾Í±È½ÏÀ§ÄÑ£¬ ÒòΪ·Ö²¼Ê½ÏµÍ³Àﲻͬ·þÎñÆ÷µÄÔËËã¶¼ÊÇÔÚ¶ÀÁ¢µÄ½ø³ÌÀÔËËãµÄÖмä½á¹ûºÍ¹ý³Ì»¹ÒªÍ¨¹ýÍøÂç½øÐд«µÝ£¬ÄÇôÏë×öµ½Êý¾Ý²Ù×÷Ò»ÖÂÐÔÒªÀ§ÄѵĶࡣZookeeperÌṩÁËÒ»¸öËø·þÎñ½â¾öÁËÕâÑùµÄÎÊÌ⣬ÄÜÈÃÎÒÃÇÔÚ×ö·Ö²¼Ê½Êý¾ÝÔËËãʱºò£¬±£Ö¤Êý¾Ý²Ù×÷µÄÒ»ÖÂÐÔ¡£¡¡¡¡³¡¾°Èý£ºÅäÖùÜÀí¡£ÔÚ·Ö²¼Ê½ÏµÍ³ÀÎÒÃÇ»á°ÑÒ»¸ö·þÎñÓ¦Ó÷ֱð²¿Êðµ½n̨·þÎñÆ÷ÉÏ£¬ÕâЩ·þÎñÆ÷µÄÅäÖÃÎļþÊÇÏàͬµÄ£¨ÀýÈ磺ÎÒÉè¼ÆµÄ·Ö²¼Ê½ÍøÕ¾¿ò¼ÜÀ·þÎñ¶Ë¾ÍÓÐ4̨·þÎñÆ÷£¬4̨·þÎñÆ÷ÉϵijÌÐò¶¼ÊÇÒ»Ñù£¬ÅäÖÃÎļþ¶¼ÊÇÒ»Ñù£©£¬ Èç¹ûÅäÖÃÎļþµÄÅäÖÃÑ¡Ïî·¢Éú±ä»¯£¬ÄÇôÎÒÃǾ͵ÃÒ»¸ö¸öÈ¥¸ÄÕâЩÅäÖÃÎļþ£¬Èç¹ûÎÒÃÇÐèÒª¸ÄµÄ·þÎñÆ÷±È½ÏÉÙ£¬ÕâЩ²Ù×÷»¹²»ÊÇÌ«Âé·³£¬Èç¹ûÎÒÃÇ·Ö²¼Ê½µÄ·þÎñÆ÷ÌØ±ð¶à£¬±ÈÈçijЩ´óÐÍ»¥ÁªÍø¹«Ë¾µÄhadoop¼¯ÈºÓÐÊýǧ̨·þÎñÆ÷£¬ÄÇô¸ü¸ÄÅäÖÃÑ¡Ïî¾ÍÊÇÒ»¼þÂé·³¶øÇÒΣÏÕµÄÊÂÇé¡£ Õâʱºòzookeeper¾Í¿ÉÒÔÅÉÉÏÓó¡ÁË£¬ÎÒÃÇ¿ÉÒÔ°Ñzookeeperµ±³ÉÒ»¸ö¸ß¿ÉÓõÄÅäÖô洢Æ÷£¬°ÑÕâÑùµÄÊÂÇé½»¸øzookeeper½øÐйÜÀí£¬ÎÒÃǽ«¼¯ÈºµÄÅäÖÃÎļþ¿½±´µ½zookeeperµÄÎļþϵͳµÄij¸ö½ÚµãÉÏ£¬È»ºóÓÃzookeeper¼à¿ØËùÓзֲ¼Ê½ÏµÍ³ÀïÅäÖÃÎļþµÄ״̬£¬ Ò»µ©·¢ÏÖÓÐÅäÖÃÎļþ·¢ÉúÁ˱仯£¬Ã¿Ì¨·þÎñÆ÷¶¼»áÊÕµ½zookeeperµÄ֪ͨ£¬ÈÃÿ̨·þÎñÆ÷ͬ²½zookeeperÀïµÄÅäÖÃÎļþ£¬zookeeper·þÎñÒ²»á±£Ö¤Í¬²½²Ù×÷Ô×ÓÐÔ£¬È·±£Ã¿¸ö·þÎñÆ÷µÄÅäÖÃÎļþ¶¼Äܱ»ÕýÈ·µÄ¸üС£¡¡¡¡³¡¾°ËÄ£ºÎª·Ö²¼Ê½ÏµÍ³Ìṩ¹ÊÕÏÐÞ¸´µÄ¹¦ÄÜ¡£¼¯Èº¹ÜÀíÊǺÜÀ§Äѵģ¬ÔÚ·Ö²¼Ê½ÏµÍ³Àï¼ÓÈëÁËzookeeper·þÎñ£¬ÄÜÈÃÎÒÃǺÜÈÝÒ׵ĶԼ¯Èº½øÐйÜÀí¡£ ¼¯Èº¹ÜÀí×îÂé·³µÄÊÂÇé¾ÍÊǽڵã¹ÊÕϹÜÀí£¬zookeeper¿ÉÒÔÈü¯ÈºÑ¡³öÒ»¸ö½¡¿µµÄ½Úµã×÷Ϊmaster£¬master½Úµã»áÖªµÀµ±Ç°¼¯ÈºµÄÿ̨·þÎñÆ÷µÄÔËÐÐ×´¿ö£¬Ò»µ©Ä³¸ö½Úµã·¢Éú¹ÊÕÏ£¬master»á°ÑÕâ¸öÇé¿ö֪ͨ¸ø¼¯ÈºÆäËû·þÎñÆ÷£¬´Ó¶øÖØÐ·ÖÅ䲻ͬ½ÚµãµÄ¼ÆËãÈÎÎñ¡£ Zookeeper²»½ö¿ÉÒÔ·¢ÏÖ¹ÊÕÏ£¬Ò²»á¶ÔÓйÊÕϵķþÎñÆ÷½øÐÐÕç±ð£¬¿´¹ÊÕÏ·þÎñÆ÷ÊÇʲôÑùµÄ¹ÊÕÏ£¬Èç¹û¸Ã¹ÊÕÏ¿ÉÒÔÐÞ¸´£¬zookeeper¿ÉÒÔ×Ô¶¯ÐÞ¸´»òÕ߸æËßϵͳ¹ÜÀíÔ±´íÎóµÄÔÒòÈùÜÀíԱѸËÙ¶¨Î»ÎÊÌ⣬ÐÞ¸´½ÚµãµÄ¹ÊÕÏ¡£ ´ó¼ÒÒ²Ðí»¹»áÓиöÒÉÎÊ£¬master¹ÊÕÏÁË£¬ÄÇÔõô°ìÁË£¿zookeeperÒ²¿¼Âǵ½ÁËÕâµã£¬zookeeperÄÚ²¿ÓÐÒ»¸ö¡°Ñ¡¾ÙÁìµ¼ÕßµÄËã·¨¡±£¬master¿ÉÒÔ¶¯Ì¬Ñ¡Ôñ£¬µ±master¹ÊÕÏʱºò£¬zookeeperÄÜÂíÉÏÑ¡³öеÄmaster¶Ô¼¯Èº½øÐйÜÀí¡£¡¡¡¡ÏÂÃæÎÒÒª½²½²zookeeperµÄÌØµã£ºzookeeperÊÇÒ»¸ö¾«¼òµÄÎļþϵͳ¡£ÕâµãËüºÍhadoopÓеãÏñ£¬µ«ÊÇzookeeperÕâ¸öÎļþϵͳÊǹÜÀíСÎļþµÄ£¬¶øhadoopÊǹÜÀí³¬´óÎļþµÄ¡£zookeeperÌṩÁ˷ḻµÄ¡°¹¹¼þ¡±£¬ÕâЩ¹¹¼þ¿ÉÒÔʵÏֺܶàе÷Êý¾Ý½á¹¹ºÍÐÒéµÄ²Ù×÷¡£ÀýÈ磺·Ö²¼Ê½¶ÓÁС¢·Ö²¼Ê½ËøÒÔ¼°Ò»×éͬ¼¶½ÚµãµÄ¡°Áìµ¼ÕßÑ¡¾Ù¡±Ëã·¨¡£zookeeperÊǸ߿ÉÓõģ¬Ëü±¾ÉíµÄÎȶ¨ÐÔÊÇÏ൱֮ºÃ£¬·Ö²¼Ê½¼¯ÈºÍêÈ«¿ÉÒÔÒÀÀµzookeeper¼¯ÈºµÄ¹ÜÀí£¬ÀûÓÃzookeeper±ÜÃâ·Ö²¼Ê½ÏµÍ³µÄµ¥µã¹ÊÕϵÄÎÊÌâ¡£zookeeper²ÉÓÃÁËËÉñîºÏµÄ½»»¥Ä£Ê½¡£ÕâµãÔÚzookeeperÌṩ·Ö²¼Ê½ËøÉϱíÏÖ×îΪÃ÷ÏÔ£¬zookeeper¿ÉÒÔ±»ÓÃ×÷Ò»¸öÔ¼»á»úÖÆ£¬ÈòÎÈëµÄ½ø³Ì²»ÔÚÁ˽âÆäËû½ø³ÌµÄ£¨»òÍøÂ磩µÄÇé¿öÏÂÄܹ»±Ë´Ë·¢ÏÖ²¢½øÐн»»¥£¬²ÎÈëµÄ¸÷·½ÉõÖÁ²»±ØÍ¬Ê±´æÔÚ£¬Ö»ÒªÔÚzookeeperÁôÏÂÒ»ÌõÏûÏ¢£¬Ôڸýø³Ì½áÊøºó£¬ÁíÍâÒ»¸ö½ø³Ì»¹¿ÉÒÔ¶ÁÈ¡ÕâÌõÐÅÏ¢£¬´Ó¶ø½âñîÁ˸÷¸ö½ÚµãÖ®¼äµÄ¹ØÏµ¡£zookeeperΪ¼¯ÈºÌṩÁËÒ»¸ö¹²Ïí´æ´¢¿â£¬¼¯Èº¿ÉÒÔ´ÓÕâÀOÖжÁд¹²ÏíµÄÐÅÏ¢£¬±ÜÃâÁËÿ¸ö½ÚµãµÄ¹²Ïí²Ù×÷±à³Ì£¬¼õÇáÁË·Ö²¼Ê½ÏµÍ³µÄ¿ª·¢ÄѶȡ£zookeeperµÄÉè¼Æ²ÉÓõÄÊǹ۲ìÕßµÄÉè¼ÆÄ£Ê½£¬zookeeperÖ÷ÒªÊǸºÔð´æ´¢ºÍ¹ÜÀí´ó¼Ò¹ØÐĵÄÊý¾Ý£¬È»ºó½ÓÊܹ۲ìÕßµÄ×¢²á£¬Ò»µ©ÕâЩÊý¾ÝµÄ״̬·¢Éú±ä»¯£¬Zookeeper ¾Í½«¸ºÔð֪ͨÒѾÔÚ Zookeeper ÉÏ×¢²áµÄÄÇЩ¹Û²ìÕß×ö³öÏàÓ¦µÄ·´Ó¦£¬´Ó¶øÊµÏÖ¼¯ÈºÖÐÀàËÆ Master/Slave ¹ÜÀíģʽ
1 . ½ÓÊÕͶƱÏûÏ¢¡£Í¶Æ±ÏûÏ¢»á°üÀ¨id,zxid,epoch,state£¬ÕâËÄÖÖÐÅÏ¢£¬·Ö±ð´ú±íId: Ψһ±êʶһ̨»úÆ÷£¬´æ´¢ÔÚmyidÎļþÖÐZxid: ±êʶÁ˱¾»úÏëҪѡ¾ÙËΪleader£¬ÊDZ¾»úĿǰËù¼ûµ½µÄ×î´óµÄidÖµEpoch: Â߼ʱÖÓ¡£ÓÃÓÚÅжÏÑ¡¾ÙÊÇ·ñ¹ýÆÚState: ±¾»úµÄ״̬ÐÅÏ¢(°üÀ¨looking£¬leading£¬following£¬observing)2 .ÅжÏPeerState״̬£¬Èç¹ûÊÇlooking״̬£¬Ôò¼ÌÐø.Èç¹ûÊÇleading,foolowing,observingÔò×ß±ðµÄÁ÷³Ì3 .ÊÕµ½Æ±ºó£¬»áÅжϷ¢Ë͹ýÀ´µÄÂ߼ʱÖÓÊÇ·ñ´óÓÚĿǰµÄÂ߼ʱÖÓ,Èç¹ûÊÇ˵Ã÷¼¯ÈºÒѾ½øÈëÁËÐÂÒ»ÂÖµÄͶƱÁË¡£4 .Çå¿ÕͶƱÏä¡£ÒòΪÕâ¸ö֮ǰµÄͶƱ¶¼ÊÇÉÏÒ»´ÎͶƱÆÚ¼äά»¤µÄ¡£5 . Èç¹ûµÈÓÚĿǰµÄÂ߼ʱÖÓ£¬ËµÃ÷Êǵ±Ç°µÄ£¬Ôò¸üÐÂ×î´óµÄleader idºÍÌá°¸idÅжÏÊÇ·ñÐèÒª¸üе±Ç°×Ô¼ºµÄÑ¡¾ÙÇé¿ö.ÔÚÕâÀïÊǸù¾ÝÑ¡¾Ùleader id,±£´æµÄ×î´óÊý¾ÝidÀ´½øÐÐÅжϵÄ,ÕâÁ½ÖÖÊý¾ÝÖ®¼ä¶ÔÕâ¸öÑ¡¾Ù½á¹ûµÄÓ°ÏìµÄÈ¨ÖØ¹ØÏµÊÇ:Ê×ÏÈ¿´Êý¾Ýid,Êý¾Ýid´óÕßʤ³ö;Æä´ÎÔÙÅжÏleader id,leader id´óÕßʤ³öÅжÁͶƱ½á¹û´úÂë6 . ·¢ËÍ֪ͨ£¬Í¨ÖªÆäËûµÄQuorumPeer¸üÐÂleaderÐÅÏ¢.ͬʱ½«¸üкóµÄleaderÐÅÏ¢·ÅÈëͶƱÏä¼ì²éÊÇ·ñÒѾ½ÓÊÕµ½ÁËËùÓзþÎñÆ÷µÄͶƱ´úÂë²Î¿¼¡£Èç¹ûÊǵģ¬ÔòÉèÖÃ×Ô¼ºµÄÑ¡Ôñ½á¹ûÈç¹ûûÓнÓÊÕµ½ËùÓзþÎñÆ÷µÄͶƱ£¬ÄÇÅжÁÕâ¸öleadIdÊÇ·ñµÃµ½ÁËÒ»°ëÒÔºóµÄ·þÎñÆ÷µÄͶƱ´úÂë²Î¿¼£¬Èç¹ûÊÇÔò·µ»ØÒÔÉÏÁ÷³ÌÃèÊöµÄÊÇÔÚzookeeperÖУ¬²Î¿¼Ê¹ÓõÄËã·¨ÊÇFastLeaderElectionÔÚzookeeperµÄµÄÑ¡Ö÷µÄÁ÷³Ì£¬ÁíÍ⻹ÌṩÁËLeaderElectionºÍAuthFastLeaderElectionµÄʵÏÖLeaderElectionµÄʵÏֱȽϼòµ¥¡£ÒÔ(id,zxid)×öΪͶƱµÄÒÀ¾Ý.²¢ÇÒËüµÄʵÏÖÊÇͬ²½µÄ£¬ÐèÒªµÈ´ýËùÓзþÎñÆ÷·µ»ØºóÔÙͳ¼Æ½á¹û¡£¶øÏà±ÈFastLeaderElectionÊÇÿ´ÎÊÕµ½»Ø¸´¶¼»á¼ÆËãͶƱ½á¹û£¬Ð§ÂÊÉÏ»á±ÈLeaderElection¸üºÃһЩ
ZookeeperµÄͨÐżܹ¹ÔÚZookeeperÕû¸öϵͳÖУ¬ÓÐ3ÖнÇÉ«µÄ·þÎñ£¬client¡¢Follower¡¢leader¡£ÆäÖÐclient¸ºÔð·¢ÆðÓ¦ÓõÄÇëÇó£¬Follower½ÓÊÜclient·¢ÆðµÄÇëÇ󣬲ÎÓëÊÂÎñµÄÈ·ÈϹý³Ì£¬ÔÚleader crashºóµÄleaderÑ¡Ôñ¡£¶øleaderÖ÷Òª³Ðµ£ÊÂÎñµÄе÷£¬µ±È»leaderÒ²¿ÉÒԳе£½ÓÊÕ¿Í»§ÇëÇóµÄ¹¦ÄÜ£¬ÎªÁË·½±ãÃèÊö£¬ºóÃæµÄÃèÊö¶¼ÊÇclientÓëFollowerÖ®¼äµÄͨÐÅ£¬Èç¹ûZookeeperµÄÅäÖÃÖ§³Öleader½ÓÊÕclientµÄÇëÇó£¬clientÓëleaderµÄͨПúclientÓëFollowerµÄͨÐÅģʽÍêȫһÑù¡£FollowerÓëleaderÖ®¼äµÄ½ÇÉ«¿ÉÄÜÔÚijһʱ¿Ì½øÐÐת»»¡£Ò»¸öFollowerÔÚleader crashµôÒÔºó¿ÉÄܱ»¼¯Èº£¨Quorum£©µÄFollowerÑ¡¾ÙΪleader¡£¶øÒ»¸öleaderÔÚcrashºó£¬ÔٴμÓÈ뼯Ⱥ£¨Quorum£©½«×÷ΪFollower½ÇÉ«´æÔÚ¡£ÔÚÒ»¸ö¼¯Èº£¨Quorum£©ÖÐ,³ýÁËÔÚÑ¡¾ÙleaderµÄ¹ý³ÌÖÐûÓÐFollowerºÍleaderµÄÇø·ÖÍ⣬ÆäËûÈκÎʱ¿Ì¶¼Ö»ÓÐ1¸öleaderºÍ¶à¸öFollower¡£Client¡¢FollowerºÍleaderÖ®¼äµÄͨÐżܹ¹ÈçÏ£ºClientÓëFollowerÖ®¼äΪÁËʹ¿Í»§¶Ë¾ßÓнϸߵÄÍÌÍÂÁ¿£¬ClientÓëFollowerÖ®¼ä²ÉÓÃNIOµÄͨÐÅ·½Ê½¡£µ±clientÐèÒªÓëZookeeper service´ò½»µÀʱ£¬Ê×ÏȶÁÈ¡ÅäÖÃÎļþÈ·¶¨¼¯ÈºÄÚµÄËùÓÐserverÁÐ±í£¬°´ÕÕÒ»¶¨µÄload balanceË㷨ѡȡһ¸öFollower×÷Ϊһ¸öͨÐÅÄ¿±ê¡£ÕâÑùclientºÍFollowerÖ®¼ä¾ÍÓÐÁËÒ»ÌõÓÉNIOģʽ¹¹³ÉµÄͨÐÅͨµÀ¡£ÕâÌõͨµÀ»áÒ»Ö±±£³Öµ½client¹Ø±Õsession»òÕßÒòΪclient»òFollowerÈÎÒ»·½ÒòijÖÖÔÒòÒì³£ÖжÏͨÐÅÁ¬½Ó¡£Õý³£Çé¿öÏÂ, clientÓëFollowerÔÚûÓÐÇëÇ󷢯ðµÄʱºò¶¼ÓÐÐÄÌø¼ì²âFollowerÓëleaderÖ®¼äFollowerÓëleaderÖ®¼äµÄͨÐÅÖ÷ÒªÊÇÒòΪFollower½ÓÊÕµ½Ïñ£¨create, delete, setData, setACL, createSession, closeSession, sync£©ÕâÑùһЩÐèÒªÈÃleaderÀ´Ðµ÷×îÖÕ½á¹ûµÄÃüÁ½«»áµ¼ÖÂFollowerÓëleaderÖ®¼ä²úÉúͨÐÅ¡£ÓÉÓÚleaderÓëFollowerÖ®¼äµÄ¹ØÏµÊ½Ò»¶Ô¶àµÄ¹ØÏµ£¬·Ç³£ÊʺÏclient/serverģʽ£¬Òò´ËËûÃÇÖ®¼äÊDzÉÓÃc/sģʽ£¬ÓÉleader´´½¨Ò»¸ösocket server£¬¼àÌý¸÷FollowerµÄе÷ÇëÇó¡£ ¼¯ÈºÔÚÑ¡Ôñleader¹ý³ÌÖÐÓÉÓÚÔÚÑ¡Ôñleader¹ý³ÌÖÐûÓÐleader£¬ÔÚ¼¯ÈºÖеÄÈκÎÒ»¸ö³ÉÔ±¶¼ÐèÒªÓëÆäËûËùÓгÉÔ±½øÐÐͨÐÅ£¬µ±¼¯ÈºµÄ³ÉÔ±±äµÃºÜ´óʱ£¬Õâ¸öͨÐÅÁ¿ÊǺܴóµÄ¡£Ñ¡ÔñleaderµÄ¹ý³Ì·¢ÉúÔÚZookeeperϵͳ¸Õ¸ÕÆô¶¯»òÕßÊÇleaderʧȥÁªÏµºó£¬Ñ¡Ôñleader¹ý³ÌÖн«²»ÄÜ´¦ÀíÓû§µÄÇëÇó£¬ÎªÁËÌá¸ßϵͳµÄ¿ÉÓÃÐÔ£¬Ò»¶¨Òª¾¡Á¿¼õÉÙÕâ¸ö¹ý³ÌµÄʱ¼ä¡£Ñ¡ÔñÄÄÖÖ·½Ê½ÈÃËûÃÇ¿ÉÓÿìËٵõ½Ñ¡Ôñ½á¹ûÄØ£¿ZookeeperÔÚÕâ¸ö¹ý³ÌÖвÉÓÃÁ˲ßÂÔģʽ£¬¿ÉÓö¯Ì¬²åÈëÑ¡ÔñleaderµÄËã·¨¡£ÏµÍ³Ä¬ÈÏÌṩÁË3ÖÖÑ¡ÔñËã·¨£¬AuthFastLeaderElection£¬FastLeaderElection£¬LeaderElection¡£ÆäÖÐAuthFastLeaderElectionºÍLeaderElection²ÉÓÃUDPģʽ½øÐÐͨÐÅ£¬¶øFastLeaderElectionÈÔÈ»²ÉÓÃtcp/ipģʽ¡£ÔÚZookeeperеİ汾ÖУ¬ÐÂÔöÁËÒ»¸ölearner½ÇÉ«£¬¼õÉÙÑ¡ÔñleaderµÄ²ÎÓëÈËÊý¡£Ê¹µÃÑ¡Ôñ¹ý³Ì¸ü¿ì¡£ Ò»°ã˵À´Zookeeper leaderµÄÑ¡Ôñ¹ý³Ì¶¼·Ç³£¿ì£¬Í¨³£<200ms¡£ZookeeperµÄͨÐÅÁ÷³ÌÒªÏêϸÁ˽âZookeeperµÄͨÐÅÁ÷³Ì£¬ÎÒÃÇÊ×ÏȵÃÁ˽âZookeeperÌṩÄÄЩ¿Í»§¶ËµÄ½Ó¿Ú£¬ÎÒÃǰ´ÕÕ¾ßÓÐÏàͬµÄͨÐÅÁ÷³ÌµÄ½Ó¿Ú½øÐзÖ×飺Zookeeperϵͳ¹ÜÀíÃüÁîZookeeperµÄϵͳ¹ÜÀí½Ó¿ÚÊÇÖ¸ÓÃÀ´²é¿´ZookeeperÔËÐÐ״̬µÄһЩÃüÁËûÃǶ¼ÊǾßÓÐ4×Öĸ¹¹³ÉµÄÃüÁî¸ñʽ¡£Ö÷Òª°üÀ¨£ºruok:·¢ËÍ´ËÃüÁî¿ÉÒÔ²âÊÔzookeeperÊÇ·ñÔËÐÐÕý³£¡£dump£ºdump server¶ËËùÓдæ»îsessionµÄEphemeral£¨ÁÙʱ£©nodeÐÅÏ¢¡£stat£º»ñÈ¡Á¬½ÓserverµÄ·þÎñÆ÷¶ËµÄ״̬¼°Á¬½Ó¸ÃserverµÄËùÓпͷþ¶ËµÄ״̬ÐÅÏ¢¡£reqs: »ñÈ¡µ±Ç°¿Í»§¶ËÒѾÌá½»µ«»¹Î´·µ»ØµÄÇëÇó¡£stmk£º¿ªÆô»ò¹Ø±ÕZookeeperµÄtrace level.gtmk£º»ñÈ¡µ±Ç°ZookeeperµÄtrace levelÊÇ·ñ¿ªÆô¡£envi: »ñÈ¡ZookeeperµÄjavaÏà¹ØµÄ»·¾³±äÁ¿¡£srst£ºÖØÖÃserver¶ËµÄͳ¼Æ×´Ì¬µ±Óû§·¢ËÍÕâЩÃüÁîµÄµ½serverʱ£¬ÓÉÓÚÕâЩÇëÇóÖ»ÓëÁ¬½ÓµÄserverÏà¹Ø£¬Ã»ÓÐÒµÎñ´¦ÀíÂß¼£¬·Ç³£¼òµ¥¡£Zookeeper¶ÔÕâЩÃüÁî²ÉÓÃ×î¿ìµÄЧÂʽøÐд¦Àí¡£ÕâЩÃüÁî·¢Ë͵½server¶ËÖ»Õ¼ÓÃÒ»¸ö4×Ö½ÚµÄintÀàÐÍÀ´±íʾ²»Í¬ÃüÁûÓвÉÓÃ×Ö·û´®´¦Àí¡£µ±·þÎñÆ÷¶Ë½ÓÊÕµ½ÕâЩÃüÁÁ¢¿Ì·µ»Ø½á¹û¡£Session´´½¨Èκοͻ§¶ËµÄÒµÎñÇëÇó¶¼ÊÇ»ùÓÚsession´æÔÚµÄǰÌáÏ¡£SessionÊÇά³ÖclientÓëFollowerÖ®¼äµÄÒ»ÌõͨÐÅͨµÀ£¬²¢Î¬³ÖËûÃÇÖ®¼ä´Ó´´½¨¿ªÊ¼ºóµÄËùÓÐ״̬¡£µ±Æô¶¯Ò»¸öZookeeper clientµÄʱºò£¬Ê×ÏȰ´ÕÕÒ»¶¨µÄËã·¨²éÕÒ³öfollower, È»ºóÓëFollower½¨Á¢ÆðNIOÁ¬½Ó¡£µ±Á¬½Ó½¨Á¢ºÃºó£¬·¢ËÍcreate sessionµÄÃüÁÈÃserver¶ËΪ¸ÃÁ¬½Ó´´½¨Ò»¸öά»¤¸ÃÁ¬½Ó״̬µÄ¶ÔÏósession¡£µ±serverÊÕµ½create sessionÃüÁÏÈ´Ó±¾µØµÄsessionÁбíÖвéÕÒ¿´ÊÇ·ñÒѾ´æÔÚÓÐÏàͬsessionId£¬Ôò¹Ø±ÕÔsessionÖØÐ´´½¨ÐµÄsession¡£´´½¨sessionµÄ¹ý³Ì½«ÐèÒª·¢Ë͵½Leader£¬ÔÙÓÉleader֪ͨÆäËûfollower£¬´ó²¿·ÖFollower¶¼½«´Ë²Ù×÷¼Ç¼µ½±¾µØÈÕÖ¾ÔÙ֪ͨleaderºó£¬leader·¢ËÍcommitÃüÁî¸øËùÓÐFollower£¬Á¬½Ó¿Í»§¶ËµÄFollower·µ»Ø´´½¨³É¹¦µÄsessionÏìÓ¦¡£LeaderÓëFollowerÖ®¼äµÄе÷¹ý³Ì½«ÔÚºóÃæµÄ×öÏêϸ½²½â¡£µ±¿Í»§¶Ë³É¹¦´´½¨ºÃsessionºó£¬ÆäËûµÄÒµÎñÃüÁî¾Í¿ÉÒÔÕý³£´¦ÀíÁË¡£Zookeeper²éѯÃüÁîZookeeper²éѯÃüÁîÖ÷ÒªÓÃÀ´²éѯ·þÎñÆ÷¶ËµÄÊý¾Ý£¬²»»á¸ü¸Ä·þÎñÆ÷¶ËµÄÊý¾Ý¡£ËùÓеIJéѯÃüÁî¶¼¿ÉÒÔ¼´¿Ì´ÓclientÁ¬½ÓµÄserverÁ¢¼´·µ»Ø£¬²»ÐèÒªleader½øÐÐе÷£¬Òò´Ë²éѯÃüÁîµÃµ½µÄÊý¾ÝÓпÉÄÜÊǹýÆÚÊý¾Ý¡£µ«ÓÉÓÚÈκÎÊý¾ÝµÄÐ޸ģ¬leader¶¼»á½«¸ü¸ÄµÄ½á¹û·¢²¼¸øËùÓеÄFollower£¬Òò´ËÒ»°ã˵À´£¬FollowerµÄÊý¾ÝÊÇ¿ÉÒԵõ½¼°Ê±µÄ¸üС£ÕâЩ²éѯÃüÁî°üÀ¨ÒÔÏÂÕâЩÃüÁexists:ÅжÏÖ¸¶¨pathµÄnodeÊÇ·ñ´æÔÚ£¬Èç¹û´æÔÚÔò·µ»Øtrue£¬·ñÔò·µ»Øfalse.getData:´ÓÖ¸¶¨path»ñÈ¡¸ÃnodeµÄÊý¾ÝgetACL:»ñȡָ¶¨pathµÄACL¡£getChildren:»ñȡָ¶¨pathµÄnodeµÄËùÓк¢×Ó½áµã¡£ËùÓеIJéѯÃüÁî¶¼¿ÉÒÔÖ¸¶¨watcher£¬Í¨¹ýËüÀ´¸ú×ÙÖ¸¶¨pathµÄÊý¾Ý±ä»¯¡£Ò»µ©Ö¸¶¨µÄÊý¾Ý·¢Éú±ä»¯£¨create,delete,modified,children_changed£©£¬·þÎñÆ÷½«»á·¢ËÍÃüÁîÀ´»Øµ÷×¢²áµÄwatcher. WatcherÏêϸµÄ½²½â½«ÔÚZookeeperµÄWatcherÖе¥¶À½²½â¡£ZookeeperÐÞ¸ÄÃüÁîZookeeperÐÞ¸ÄÃüÁîÖ÷ÒªÊÇÓÃÀ´Ð޸ĽڵãÊý¾Ý»ò½á¹¹£¬»òÕßȨÏÞÐÅÏ¢¡£ÈκÎÐÞ¸ÄÃüÁî¶¼ÐèÒªÌá½»µ½leader½øÐÐе÷£¬Ðµ÷Íê³Éºó²Å·µ»Ø¡£ÐÞ¸ÄÃüÁîÖ÷Òª°üÀ¨£º1 . createSession£ºÇëÇóserver´´½¨Ò»¸ösession2 . create£º´´½¨Ò»¸ö½Úµã3 . delete£ºÉ¾³ýÒ»¸ö½Úµã4 . setData£ºÐÞ¸ÄÒ»¸ö½ÚµãµÄÊý¾Ý5 . setACL£ºÐÞ¸ÄÒ»¸ö½ÚµãµÄACL6 . closeSession£ºÇëÇóserver¹Ø±ÕsessionÎÒÃǸù¾ÝÇ°ÃæµÄͨÐÅͼ֪µÀ£¬ÈκÎÐÞ¸ÄÃüÁî¶¼ÐèÒªleaderе÷¡£ ÔÚleaderµÄе÷¹ý³ÌÖУ¬ÐèÒª3´ÎleaderÓëFollowerÖ®¼äµÄÀ´»ØÇëÇóÏìÓ¦¡£²¢ÇÒÔڴ˹ý³ÌÖл¹»áÉæ¼°ÊÂÎñÈÕÖ¾µÄ¼Ç¼£¬¸üÔã¸âµÄÇé¿öÊÇ»¹ÓÐtake snapshotµÄ²Ù×÷¡£Òò´Ë´Ë¹ý³Ì¿ÉÄܱȽϺÄʱ¡£µ«ZookeeperµÄͨÐÅÖÐ×î´óÌØµãÊÇÒì²½µÄ£¬Èç¹ûÇëÇóÊÇÁ¬Ðø²»¶ÏµÄ£¬ZookeeperµÄ´¦ÀíÊǼ¯Öд¦ÀíÂß¼£¬È»ºóÅúÁ¿·¢ËÍ£¬ÅúÁ¿µÄ´óСҲÊÇÓпØÖƵġ£Èç¹ûÇëÇóÁ¿²»´ó£¬Ôò¼´¿Ì·¢ËÍ¡£ÕâÑùµ±¸ºÔغܴóʱҲÄܱ£Ö¤ºÜ´óµÄÍÌÍÂÁ¿£¬Ê±Ð§ÐÔÒ²ÔÚÒ»¶¨³Ì¶ÈÉϽøÐÐÁ˱£Ö¤¡£zookeeper server¶ËµÄÒµÎñ´¦Àí-processorÁ´<!--EndFragment-->Zookeeperͨ¹ýÁ´Ê½µÄprocessorÀ´´¦ÀíÒµÎñÇëÇó£¬Ã¿¸öprocessor¸ºÔð´¦ÀíÌØ¶¨µÄ¹¦ÄÜ¡£²»Í¬µÄZookeeper½ÇÉ«µÄ·þÎñÆ÷processorÁ´ÊDz»Ò»ÑùµÄ£¬ÒÔÏ·ֱð½éÉÜstandalone Zookeeper server, leaderºÍFollower²»Í¬µÄprocessorÁ´¡£ZookeeperÖеÄprocessorAckRequestProcessor:µ±leader´ÓÏòFollower·¢ËÍproposalºó£¬Follower½«·¢ËÍÒ»¸öAckÏìÓ¦£¬leaderÊÕµ½AckÏìÓ¦ºó£¬½«»áµ÷ÓÃÕâ¸öProcessor½øÐд¦Àí¡£ËüÖ÷Òª¸ºÔð¼ì²éÇëÇóÊÇ·ñÒѾ´ïµ½Á˶àÊýFollowerµÄÈ·ÈÏ£¬Èç¹ûÂú×ãÌõ¼þ£¬ÔòÌá½»commitProcessor½øÐÐcommit´¦ÀíCommitProcessor£º´Ócommited¶ÓÁÐÖд¦ÀíÒѾÓÉleaderе÷ºÃ²¢commitµÄÇëÇó»òÕß´ÓÇëÇó¶ÓÁÐÖÐÈ¡³öÄÇЩÎÞÐèleaderе÷µÄÇëÇó½øÐÐÏÂÒ»²½´¦Àí¡£FinalRequestProcessor£ºÈκÎÇëÇóµÄ´¦Àí¶¼ÐèÒª¾¹ýÕâ¸öprocessor£¬ÕâÊÇÇëÇó´¦ÀíµÄ×îºóÒ»¸öProcessor£¬Ö÷Òª¸ºÔð¸ù¾Ý²»Í¬µÄÇëÇó°ü×°²»Í¬µÄÀàÐ͵ÄÏìÓ¦°ü¡£µ±È»FollowerÓëleaderÖ®¼äе÷ºóµÄÇëÇóÓÉÓÚûÓÐclientÁ¬½Ó£¬½«²»ÐèÒª·¢ËÍÏìÓ¦£¨´úÂëÌåÏÖÔÚif (request.cnxn == null) {return;}£©¡£FollowerRequestProcessor£ºFollower processorÁ´ÉϵĵÚÒ»¸ö£¬Ö÷Òª¸ºÔð½«ÐÞ¸ÄÇëÇóºÍͬ²½ÇëÇó·¢Íùleader½øÐÐе÷¡£PrepRequestProcessor£ºÔÚleaderºÍstandalone serverÉÏ×÷ΪµÚÒ»Processor£¬Ö÷Òª×÷ÓöÔÓÚËùÓеÄÐÞ¸ÄÃüÁîÉú³Échangelog¡£ProposalRequestProcessor£ºleaderÓÃÀ´½«ÇëÇó°üװΪproposalÏòFollowerÇëÇóÈ·ÈÏ¡£SendAckRequestProcessor£ºFollowerÓÃÀ´Ïòleader·¢ËÍAckÏìÓ¦µÄ´¦Àí¡£SyncRequestProcessor£º¸ºÔð½«ÒѾcommitµÄÊÂÎñдµ½ÊÂÎñÈÕÖ¾ÒÔ¼°take snapshot.ToBeAppliedRequestProcessor:¸ºÔð½«tobeApplied¶ÓÁеÄÖÐrequest×ªÒÆµ½ÏÂÒ»¸öÇëÇó½øÐд¦Àí¡£
ZKµÄ½ÚµãÓÐ5ÖÖ²Ù×÷ȨÏÞ£ºCREATE¡¢READ¡¢WRITE¡¢DELETE¡¢ADMIN Ò²¾ÍÊÇ Ôö¡¢É¾¡¢¸Ä¡¢²é¡¢¹ÜÀíȨÏÞ£¬Õâ5ÖÖȨÏÞ¼òдΪcrwda(¼´£ºÃ¿¸öµ¥´ÊµÄÊ××Ö·ûËõд)×¢£ºÕâ5ÖÖȨÏÞÖУ¬deleteÊÇÖ¸¶Ô×Ó½ÚµãµÄɾ³ýȨÏÞ£¬ÆäËü4ÖÖȨÏÞÖ¸¶Ô×ÔÉí½ÚµãµÄ²Ù×÷ȨÏÞÉí·ÝµÄÈÏÖ¤ÓÐ4ÖÖ·½Ê½£ºworld£ºÄ¬ÈÏ·½Ê½£¬Ï൱ÓÚÈ«ÊÀ½ç¶¼ÄÜ·ÃÎÊauth£º´ú±íÒѾÈÏ֤ͨ¹ýµÄÓû§(cliÖпÉÒÔͨ¹ýaddauth digest user:pwd À´Ìí¼Óµ±Ç°ÉÏÏÂÎÄÖеÄÊÚȨÓû§)digest£º¼´Óû§Ãû:ÃÜÂëÕâÖÖ·½Ê½ÈÏÖ¤£¬ÕâÒ²ÊÇÒµÎñϵͳÖÐ×î³£ÓõÄip£ºÊ¹ÓÃIpµØÖ·ÈÏÖ¤ÉèÖ÷ÃÎÊ¿ØÖÆ£º·½Ê½Ò»£º£¨ÍƼö£©1£©Ôö¼ÓÒ»¸öÈÏÖ¤Óû§addauth digest Óû§Ãû:ÃÜÂëÃ÷ÎÄeg. addauth digest user1:password12£©ÉèÖÃȨÏÞsetAcl /path auth:Óû§Ãû:ÃÜÂëÃ÷ÎÄ:ȨÏÞeg. setAcl /test auth:user1:password1:cdrwa3£©²é¿´AclÉèÖÃgetAcl /path·½Ê½¶þ£ºsetAcl /path digest:Óû§Ãû:ÃÜÂëÃÜÎÄ:ȨÏÞ×¢£ºÕâÀïµÄ¼ÓÃܹæÔòÊÇSHA1¼ÓÃÜ£¬È»ºóbase64±àÂë¡£
µ±ºÜ¶à½ø³ÌÐèÒª·ÃÎʹ²Ïí×ÊԴʱ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýzkÀ´ÊµÏÖ·Ö²¼Ê½Ëø¡£Ö÷Òª²½ÖèÊÇ£º 1 .½¨Á¢Ò»¸ö½Úµã£¬¼ÙÈçÃûΪ£ºlock ¡£½ÚµãÀàÐÍΪ³Ö¾Ã½Úµã£¨PERSISTENT£© 2 .ÿµ±½ø³ÌÐèÒª·ÃÎʹ²Ïí×ÊԴʱ£¬»áµ÷Ó÷ֲ¼Ê½ËøµÄlock()»òtryLock()·½·¨»ñµÃËø£¬Õâ¸öʱºò»áÔÚµÚÒ»²½´´½¨µÄlock½ÚµãϽ¨Á¢ÏàÓ¦µÄ˳Ðò×ӽڵ㣬½ÚµãÀàÐÍΪÁÙʱ˳Ðò½Úµã£¨EPHEMERAL_SEQUENTIAL£©£¬Í¨¹ý×é³ÉÌØ¶¨µÄÃû×Öname+lock+˳ÐòºÅ¡£ 3 .ÔÚ½¨Á¢×Ó½Úµãºó£¬¶ÔlockÏÂÃæµÄËùÓÐÒÔname¿ªÍ·µÄ×Ó½Úµã½øÐÐÅÅÐò£¬Åжϸոս¨Á¢µÄ×Ó½Úµã˳ÐòºÅÊÇ·ñÊÇ×îСµÄ½Úµã£¬¼ÙÈçÊÇ×îС½Úµã£¬Ôò»ñµÃ¸ÃËø¶Ô×ÊÔ´½øÐзÃÎÊ¡£ 4 .¼ÙÈç²»ÊǸýڵ㣬¾Í»ñµÃ¸Ã½ÚµãµÄÉÏһ˳Ðò½Úµã£¬²¢¸ø¸Ã½ÚµãÊÇ·ñ´æÔÚ×¢²á¼àÌýʼþ¡£Í¬Ê±ÔÚÕâÀï×èÈû¡£µÈ´ý¼àÌýʼþµÄ·¢Éú£¬»ñµÃËø¿ØÖÆÈ¨¡£ 5 .µ±µ÷ÓÃÍê¹²Ïí×ÊÔ´ºó£¬µ÷ÓÃunlock£¨£©·½·¨£¬¹Ø±Õzk£¬½ø¶ø¿ÉÒÔÒý·¢¼àÌýʼþ£¬ÊͷŸÃËø¡£ ʵÏֵķֲ¼Ê½ËøÊÇÑϸñµÄ°´ÕÕ˳Ðò·ÃÎʵIJ¢·¢Ëø
pgrep -l java
netstat/lsof netstatÃüÁîÓÃÓÚÏÔʾÓëIP¡¢TCP¡¢UDPºÍICMPÐÒéÏà¹ØµÄͳ¼ÆÊý¾Ý£¬Ò»°ãÓÃÓÚ¼ìÑé±¾»ú¸÷¶Ë¿ÚµÄÍøÂçÁ¬½ÓÇé¿ö -a ÏÔʾһ¸öËùÓеÄÓÐЧÁ¬½ÓÐÅÏ¢Áбí(°üÀ¨Òѽ¨Á¢µÄÁ¬½Ó£¬Ò²°üÀ¨¼àÌýÁ¬½ÓÇëÇóµÄÄÇЩÁ¬½Ó) -n ÏÔʾËùÓÐÒѽ¨Á¢µÄÓÐЧÁ¬½Ó -t tcpÐÒé -u udpÐÒé -l ²éѯÕýÔÚ¼àÌýµÄ³ÌÐò -p ÏÔʾÕýÔÚʹÓÃsocketµÄ³ÌÐòʶ±ðÂëºÍ³ÌÐòÃû³Æ ÀýÈç:netstat -ntupl|grep processname ÈçºÎÖ»²éѯtomcatµÄÁ¬½Ó£¿ netstat -na|grep ESTAB |grep 80 |wc-l netstat -na|grep ESTAB |grep 8080 |wc-l ³£Óö˿ڽéÉÜ: ¶Ë¿Ú£º21 ·þÎñ:FTP·þÎñÆ÷Ëù¿ª·ÅµÄ¶Ë¿Ú£¬ÓÃÓÚÉÏ´«¡¢ÏÂÔØ¡£ ¶Ë¿Ú: 22 ·þÎñ:ssh ¶Ë¿Ú: 80 ·þÎñ:HTTP ÓÃÓÚÍøÒ³ä¯ÀÀ ¶Ë¿Ú£º389 ·þÎñ£ºLDAP ILS ÇáÐÍĿ¼·ÃÎÊÐÒéºÍNetMeetingInternet Locator Server ¶Ë¿Ú£º443 ·þÎñ£ºÍøÒ³ä¯ÀÀ¶Ë¿Ú ÄÜÌṩ¼ÓÃܺÍͨ¹ý°²È«¶Ë¿Ú´«ÊäµÄÁíÒ»ÖÖHTTP ¶Ë¿Ú£º8080 ·þÎñ£º´úÀí¶Ë¿Ú ´ò¿ªÖÕ¶Ë£¬Ö´ÐÐÈçÏÂÃüÁ²é¿´¸÷½ø³ÌÕ¼Óö˿ÚÇé¿ö£º # ps -ef|wc -l //²é¿´ºǫ́ÔËÐеĽø³Ì×ÜÊý # ps -fu csvn //²é¿´csvn½ø³Ì # netstat -lntp //²é¿´¿ªÆôÁËÄÄЩ¶Ë¿Ú # netstat -r //±¾Ñ¡Ïî¿ÉÒÔÏÔʾ¹ØÓÚ·ÓɱíµÄÐÅÏ¢ # netstat -a //±¾Ñ¡ÏîÏÔʾһ¸öËùÓеÄÓÐЧÁ¬½ÓÐÅÏ¢Áбí # netstat -an|grep 8080 # netstat -na|grep -i listen //¿ÉÒÔ¿´µ½Ä¿Ç°ÏµÍ³ÕìÌýµÄ¶Ë¿ÚºÅ # netstat -antup //²é¿´Òѽ¨Á¢µÄÁ¬½Ó½ø³Ì£¬ËùÕ¼ÓõĶ˿ڡ£ netstat -anp|grep1487 lsof -i:1487 ²é¿´ÄÄЩ½ø³Ì´ò¿ªÁËÖ¸¶¨¶Ë¿Ú1487
tail -f messages
Ҫͳ¼ÆÒ»¸ö×Ö·û´®³öÏֵĴÎÊý£¬ÕâÀïÏÖÌṩ×Ô¼º³£ÓÃÁ½ÖÖ·½·¨£º1. ʹÓÃvimͳ¼ÆÓÃvim´ò¿ªÄ¿±êÎļþ£¬ÔÚÃüÁîģʽÏ£¬ÊäÈë:%s/objStr//gn¼´¿É2. ʹÓÃgrep£ºgrep -o objStr filename|wc -lÈç¹ûÊǶà¸ö×Ö·û´®³öÏÖ´ÎÊý£¬¿ÉʹÓãºgrep -o ¡®objStr1\|objStr2' filename|wc -l #Ö±½ÓÓÃ\| Á´½ÓÆðÀ´¼´¿É
isAlive() ²âÊÔÏß³ÌÊÇ·ñ´¦Óڻ״̬¡£ isInterrupted()²âÊÔÏß³ÌÊÇ·ñÒѾÖжϡ£
ÎïÀí·ÖÒ³Âß¼·ÖÒ³
¿¼ÂÇÊÇ·ñҪȡÏûµ¥Àý²ÉÓÃÆäËû·½Ê½ÊµÏÖ
¸ù¾ÝÒì³£×´¿öºÍÇëÇó×´¿ö½øÐзÖÀà¡£¿¼ÂÇÊÇ·ñÐèÒªÒì²½ÇëÇó£¬ÊµÊ±Êý¾Ý½»»¥¿¼ÂÇÑ»·ÇëÇó2´Î£¬¶øÇÒÒ»°ãÔÚ½øÐÐÍøÂçͨѶµÄ¹ý³ÌÖУ¬¶ÔÓÚһЩ±È½ÏÖØÒªµÄ½»»¥Êý¾Ý»á²ÉÓÃÈÕÖ¾¼Ç¼µÄ·½Ê½À´¼Ç¼±¾´ÎͨѶµÄ×´¿ö¡£ºóÆÚ¿ÉÒÔͨ¹ýÈÕÖ¾·ÖÎöÒì³£µÄÖ÷ÒªÔÒò£¬²¢Õë¶ÔÐÔ½â¾ö¡£
http://blog.csdn.net/u012116457/article/details/46316063
¡¶Äñ¸çµÄLinux˽·¿²Ë¡·
http://blog.163.com/hcl_zjblog/blog/static/214281242201712872723221/?newFollowBlog
1.ÄÚ´æÖмÓÔØµÄÊý¾ÝÁ¿¹ýÓÚÅÓ´ó£¬ÈçÒ»´Î´ÓÊý¾Ý¿âÈ¡³ö¹ý¶àÊý¾Ý£»¡¡¡¡2.¼¯ºÏÀàÖÐÓжԶÔÏóµÄÒýÓã¬Ê¹ÓÃÍêºóδÇå¿Õ£¬Ê¹µÃJVM²»ÄÜ»ØÊÕ£»¡¡¡¡3.´úÂëÖдæÔÚËÀÑ»·»òÑ»·²úÉú¹ý¶àÖØ¸´µÄ¶ÔÏóʵÌ壻¡¡¡¡4.ʹÓõĵÚÈý·½Èí¼þÖеÄBUG£»¡¡¡¡5.Æô¶¯²ÎÊýÄÚ´æÖµÉ趨µÄ¹ýС£»
µÚÒ»²½£¬ÐÞ¸ÄJVMÆô¶¯²ÎÊý£¬Ö±½ÓÔö¼ÓÄÚ´æ¡£(-Xms£¬-Xmx²ÎÊýÒ»¶¨²»ÒªÍü¼Ç¼Ó¡£) µÚ¶þ²½£¬¼ì²é´íÎóÈÕÖ¾£¬²é¿´¡°OutOfMemory¡±´íÎóǰÊÇ·ñÓÐÆäËüÒì³£»ò´íÎó¡£ µÚÈý²½£¬¶Ô´úÂë½øÐÐ×ß²éºÍ·ÖÎö£¬ÕÒ³ö¿ÉÄÜ·¢ÉúÄÚ´æÒç³öµÄλÖá£
³£ÓõÄÓÐ BoundsCheaker¡¢Deleaker¡¢Visual Leak DetectorµÈ
±£Ö¤Êý¾ÝµÄÔ×ÓÐÔÒ»ÖÂÐÔ¸ôÀëÐÔºÍÓÀ¾ÃÐÔ¡£Ò»°ã˵ΪÁ˱£Ö¤Êý¾ÝµÄÔ×ÓÐÔ¼´¿É¡£
java.lang:ÌṩÀûÓà Java ±à³ÌÓïÑÔ½øÐгÌÐòÉè¼ÆµÄ»ù´¡Àà¡£java.io:ͨ¹ýÊý¾ÝÁ÷¡¢ÐòÁл¯ºÍÎļþϵͳÌṩϵͳÊäÈëºÍÊä³ö¡£java.lang.ref£ºÇ¿ÒýÓã¬ÈíÒýÓã¬ÈõÒýÓã¬ÐéÒýÓá£java.math:ÌṩÓÃÓÚÖ´ÐÐÈÎÒ⾫¶ÈÕûÊýËã·¨ (BigInteger) ºÍÈÎÒ⾫¶ÈСÊýËã·¨ (BigDecimal) µÄÀà¡£ java.concurrent:ÔÚ²¢·¢±à³ÌÖкܳ£ÓõÄʵÓù¤¾ßÀà(ThreadFactory)
Ë÷Òý£ºÈ±µãÊÇË÷Òý¹ý¶àд²Ù×÷ÐÔÄܵͣ¬¶øÇÒÕ¼µÄ¿Õ¼ä´ó¡£ÓŵãÊDzéѯ¿ì¡£Êý¾ÝÁ¿½Ï´óµÄÇé¿öÏÂË÷ÒýÒ»°ã¼ÓÔڱ仯Á¿½Ï´óµÄ×Ö¶ÎÉÏ¡£
¸ôÀë¼¶±ð£ºhttp://blog.csdn.net/fg2006/article/details/6937413ÊÂÎñÌØÕ÷£ºhttps://zhidao.baidu.com/question/212549640.htmlÊÂÎïµÄ¸ôÀë¼¶±ð£ºÔà¶Á(¶ÁȡδÌá½»µÄ¼Ç¼)£¬¶ÁÈ¡Ìá½»£¬Öظ´¶Á£¨»Ã¶Á£©£¬ÐòÁл¯¡£ÊÂÎïµÄÌØÐÔ£ºÔ×ÓÐÔ£¬Ò»ÖÂÐÔ£¬¸ôÀëÐÔ£¬ÓÀ¾ÃÐÔ¡£Ê®ËÄ¡¢MySQLÐÐËø¡¢±íËø±¯¹ÛËø£ºselect .... for update ÐÐËø£¬Ö´ÐÐʱÆäËûÊÂÎï²»¿É¶Ô´Ë¼Ç¼½øÐвÙ×÷¡£ÀÖ¹ÛËø£º¸ù¾Ýʱ¼ä´Á£¬°æ±¾ºÅ,update ..set version = version + 1. where version = #{version}
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- ÊÂÎñ¹ÜÀíÆ÷ÅäÖÃ, Hibernateµ¥Êý¾ÝÔ´ÊÂÎñ --><bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /></bean><!-- ʹÓÃannotation¶¨ÒåÊÂÎñ --><tx:annotation-driven transaction-manager="defaultTransactionManager" proxy-target-class="true" />
ÒªÊÇÖ»ÔÚ½Ó¿ÚÉÏд, ½Ó¿ÚµÄʵÏÖÀà¾Í»á¼Ì³ÐÏÂÀ´¡¢½Ó¿ÚµÄʵÏÖÀàµÄ¾ßÌå·½·¨,¿ÉÒÔ¸²¸ÇÀàÉùÃ÷´¦µÄÉèÖÃ@Transactional //À༶µÄ×¢½â¡¢ÊÊÓÃÓÚÀàÖÐËùÓеÄpublicµÄ·½·¨ÊÂÎñµÄ´«²¥ÐÐΪºÍ¸ôÀë¼¶±ð´ó¼ÒÔÚʹÓÃspringµÄ×¢½âʽÊÂÎñ¹ÜÀíʱ£¬¶ÔÊÂÎñµÄ´«²¥ÐÐΪºÍ¸ôÀë¼¶±ð¿ÉÄÜÓе㲻֪Ëù´ë£¬Ï±߾ÍÏêϸµÄ½éÉÜÏÂÒÔ±¸·½±ã²éÔÄ¡£ÊÂÎï×¢½â·½Ê½: @Transactionalµ±±êÓÚÀàǰʱ, ±êʾÀàÖÐËùÓз½·¨¶¼½øÐÐÊÂÎï´¦Àí , Àý×Ó:@Transactionalpublic class TestServiceBean implements TestService {} µ±ÀàÖÐijЩ·½·¨²»ÐèÒªÊÂÎïʱ:@Transactionalpublic class TestServiceBean implements TestService { private TestDao dao; public void setDao(TestDao dao) { this.dao = dao; } @Transactional(propagation = Propagation.NOT_SUPPORTED) public List<Object> getAll() { return null; } }
@Transactional(propagation=Propagation.REQUIRED) Èç¹ûÓÐÊÂÎñ, ÄÇô¼ÓÈëÊÂÎñ, ûÓеĻ°Ð½¨Ò»¸ö(ĬÈÏÇé¿öÏÂ)@Transactional(propagation=Propagation.NOT_SUPPORTED) ÈÝÆ÷²»ÎªÕâ¸ö·½·¨¿ªÆôÊÂÎñ@Transactional(propagation=Propagation.REQUIRES_NEW) ²»¹ÜÊÇ·ñ´æÔÚÊÂÎñ,¶¼´´½¨Ò»¸öеÄÊÂÎñ,ÔÀ´µÄ¹ÒÆð,еÄÖ´ÐÐÍê±Ï,¼ÌÐøÖ´ÐÐÀϵÄÊÂÎñ@Transactional(propagation=Propagation.MANDATORY) ±ØÐëÔÚÒ»¸öÒÑÓеÄÊÂÎñÖÐÖ´ÐÐ,·ñÔòÅ׳öÒ[email protected](propagation=Propagation.NEVER) ±ØÐëÔÚÒ»¸öûÓеÄÊÂÎñÖÐÖ´ÐÐ,·ñÔòÅ׳öÒì³£(ÓëPropagation.MANDATORYÏà·´)@Transactional(propagation=Propagation.SUPPORTS) Èç¹ûÆäËûbeanµ÷ÓÃÕâ¸ö·½·¨,ÔÚÆäËûbeanÖÐÉùÃ÷ÊÂÎñ,ÄǾÍÓÃÊÂÎñ.Èç¹ûÆäËûbeanûÓÐÉùÃ÷ÊÂÎñ,ÄǾͲ»ÓÃÊÂÎñ.
@Transactional(timeout=30) //ĬÈÏÊÇ30Ãë
@Transactional(isolation = Isolation.READ_UNCOMMITTED)¶ÁȡδÌá½»Êý¾Ý(»á³öÏÖÔà¶Á, ²»¿ÉÖØ¸´¶Á) »ù±¾²»Ê¹ÓÃ@Transactional(isolation = Isolation.READ_COMMITTED)¶ÁÈ¡ÒÑÌá½»Êý¾Ý(»á³öÏÖ²»¿ÉÖØ¸´¶ÁºÍ»Ã¶Á)@Transactional(isolation = Isolation.REPEATABLE_READ)¿ÉÖØ¸´¶Á(»á³öÏֻöÁ)@Transactional(isolation = Isolation.SERIALIZABLE)´®Ðл¯MYSQL: ĬÈÏΪREPEATABLE_READ¼¶±ðSQLSERVER: ĬÈÏΪREAD_COMMITTEDÔà¶Á : Ò»¸öÊÂÎñ¶ÁÈ¡µ½ÁíÒ»ÊÂÎñδÌá½»µÄ¸üÐÂÊý¾Ý²»¿ÉÖØ¸´¶Á : ÔÚͬһÊÂÎñÖÐ, ¶à´Î¶ÁȡͬһÊý¾Ý·µ»ØµÄ½á¹ûÓÐËù²»Í¬, »»¾ä»°Ëµ, ºóÐø¶ÁÈ¡¿ÉÒÔ¶Áµ½ÁíÒ»ÊÂÎñÒÑÌá½»µÄ¸üÐÂÊý¾Ý. Ïà·´, "¿ÉÖØ¸´¶Á"ÔÚͬһÊÂÎñÖжà´Î¶ÁÈ¡Êý¾Ýʱ, Äܹ»±£Ö¤Ëù¶ÁÊý¾ÝÒ»Ñù, Ò²¾ÍÊǺóÐø¶ÁÈ¡²»ÄܶÁµ½ÁíÒ»ÊÂÎñÒÑÌá½»µÄ¸üÐÂÊý¾Ý»Ã¶Á : Ò»¸öÊÂÎñ¶Áµ½ÁíÒ»¸öÊÂÎñÒÑÌá½»µÄinsertÊý¾Ý
¸ÃÊôÐÔÓÃÓÚÉèÖõ±Ç°ÊÂÎñÊÇ·ñΪֻ¶ÁÊÂÎñ£¬ÉèÖÃΪtrue±íʾֻ¶Á£¬falseÔò±íʾ¿É¶Áд£¬Ä¬ÈÏֵΪfalse¡£ÀýÈ[email protected](readOnly=true)
¸ÃÊôÐÔÓÃÓÚÉèÖÃÐèÒª½øÐлعöµÄÒì³£ÀàÊý×飬µ±·½·¨ÖÐÅ׳öÖ¸¶¨Òì³£Êý×éÖеÄÒ쳣ʱ£¬Ôò½øÐÐÊÂÎñ»Ø¹ö¡£ÀýÈ磺
Ö¸¶¨µ¥Ò»Òì³£À[email protected](rollbackFor=RuntimeException.class)
Ö¸¶¨¶à¸öÒì³£À[email protected](rollbackFor={RuntimeException.class, Exception.class})
¸ÃÊôÐÔÓÃÓÚÉèÖÃÐèÒª½øÐлعöµÄÒì³£ÀàÃû³ÆÊý×飬µ±·½·¨ÖÐÅ׳öÖ¸¶¨Òì³£Ãû³ÆÊý×éÖеÄÒ쳣ʱ£¬Ôò½øÐÐÊÂÎñ»Ø¹ö¡£ÀýÈ磺
Ö¸¶¨µ¥Ò»Òì³£ÀàÃû³Æ£º@Transactional(rollbackForClassName="RuntimeException")
Ö¸¶¨¶à¸öÒì³£ÀàÃû³Æ£º@Transactional(rollbackForClassName={"RuntimeException","Exception"})
¸ÃÊôÐÔÓÃÓÚÉèÖò»ÐèÒª½øÐлعöµÄÒì³£ÀàÊý×飬µ±·½·¨ÖÐÅ׳öÖ¸¶¨Òì³£Êý×éÖеÄÒ쳣ʱ£¬²»½øÐÐÊÂÎñ»Ø¹ö¡£ÀýÈ磺
Ö¸¶¨µ¥Ò»Òì³£À[email protected](noRollbackFor=RuntimeException.class)
Ö¸¶¨¶à¸öÒì³£À[email protected](noRollbackFor={RuntimeException.class, Exception.class})
¸ÃÊôÐÔÓÃÓÚÉèÖò»ÐèÒª½øÐлعöµÄÒì³£ÀàÃû³ÆÊý×飬µ±·½·¨ÖÐÅ׳öÖ¸¶¨Òì³£Ãû³ÆÊý×éÖеÄÒ쳣ʱ£¬²»½øÐÐÊÂÎñ»Ø¹ö¡£ÀýÈ磺
Ö¸¶¨µ¥Ò»Òì³£ÀàÃû³Æ£º@Transactional(noRollbackForClassName="RuntimeException")
Ö¸¶¨¶à¸öÒì³£ÀàÃû³Æ£º
@Transactional(noRollbackForClassName={"RuntimeException","Exception"})
¸ÃÊôÐÔÓÃÓÚÉèÖÃÊÂÎñµÄ´«²¥ÐÐΪ£¬¾ßÌåȡֵ¿É²Î¿¼±í6-7¡£ÀýÈ[email protected](propagation=Propagation.NOT_SUPPORTED,readOnly=true)
¸ÃÊôÐÔÓÃÓÚÉèÖõײãÊý¾Ý¿âµÄÊÂÎñ¸ôÀë¼¶±ð£¬ÊÂÎñ¸ôÀë¼¶±ðÓÃÓÚ´¦Àí¶àÊÂÎñ²¢·¢µÄÇé¿ö£¬Í¨³£Ê¹ÓÃÊý¾Ý¿âµÄĬÈϸôÀë¼¶±ð¼´¿É£¬»ù±¾²»ÐèÒª½øÐÐÉèÖÃ
¸ÃÊôÐÔÓÃÓÚÉèÖÃÊÂÎñµÄ³¬Ê±ÃëÊý£¬Ä¬ÈÏֵΪ-1±íʾÓÀ²»³¬Ê±
1 @Transactional Ö»Äܱ»Ó¦Óõ½public·½·¨ÉÏ, ¶ÔÓÚÆäËü·ÇpublicµÄ·½·¨,Èç¹û±ê¼ÇÁË@TransactionalÒ²²»»á±¨´í,µ«·½·¨Ã»ÓÐÊÂÎñ¹¦ÄÜ.
2Óà spring ÊÂÎñ¹ÜÀíÆ÷,ÓÉspringÀ´¸ºÔðÊý¾Ý¿âµÄ´ò¿ª,Ìá½»,»Ø¹ö.ĬÈÏÓöµ½ÔËÐÐÆÚÀýÍâ(throw new
RuntimeException("×¢ÊÍ");)»á»Ø¹ö£¬¼´Óöµ½²»Êܼì²é£¨unchecked£©µÄÀýÍâʱ»Ø¹ö£»¶øÓöµ½ÐèÒª²¶»ñµÄÀýÍâ(throw new Exception("×¢ÊÍ");)²»»á»Ø¹ö,¼´Óöµ½Êܼì²éµÄÀýÍ⣨¾ÍÊÇ·ÇÔËÐÐʱÅ׳öµÄÒì³££¬±àÒëÆ÷»á¼ì²éµ½µÄÒì³£½ÐÊܼì²éÀý
Íâ»ò˵Êܼì²éÒì³££©Ê±£¬ÐèÎÒÃÇÖ¸¶¨·½Ê½À´ÈÃÊÂÎñ»Ø¹ö ÒªÏëËùÓÐÒì³£¶¼»Ø¹ö,Òª¼ÓÉÏ
@Transactional( rollbackFor={Exception.class,ÆäËüÒì³£}) .Èç¹ûÈÃuncheckedÀýÍâ²»»Ø¹ö£º
@Transactional(notRollbackFor=RunTimeException.class)
ÈçÏÂ:
@Transactional(rollbackFor=Exception.class) //Ö¸¶¨»Ø¹ö,Óöµ½Òì³£Exceptionʱ»Ø¹ö
public void methodName() {
throw new Exception("×¢ÊÍ");
}
@Transactional(noRollbackFor=Exception.class)//Ö¸¶¨²»»Ø¹ö,Óöµ½ÔËÐÐÆÚÀýÍâ(throw new RuntimeException("×¢ÊÍ");)»á»Ø¹ö
public ItimDaoImpl getItemDaoImpl() {
throw new RuntimeException("×¢ÊÍ");
}
3¡¢@Transactional ×¢½âÓ¦¸ÃÖ»±»Ó¦Óõ½ public ¿É¼û¶ÈµÄ·½·¨ÉÏ¡£ Èç¹ûÄãÔÚ protected¡¢private »òÕß package-visible µÄ·½·¨ÉÏʹÓà @Transactional ×¢½â£¬ËüÒ²²»»á±¨´í£¬ µ«ÊÇÕâ¸ö±»×¢½âµÄ·½·¨½«²»»áչʾÒÑÅäÖõÄÊÂÎñÉèÖá£
4¡¢@Transactional ×¢½â¿ÉÒÔ±»Ó¦ÓÃÓÚ½Ó¿Ú¶¨ÒåºÍ½Ó¿Ú·½·¨¡¢ÀඨÒåºÍÀàµÄ public ·½·¨ÉÏ¡£È»¶ø£¬Çë×¢Òâ½ö½ö @Transactional ×¢½âµÄ³öÏÖ²»×ãÓÚ¿ªÆôÊÂÎñÐÐΪ£¬Ëü½ö½ö ÊÇÒ»ÖÖÔªÊý¾Ý£¬Äܹ»±»¿ÉÒÔʶ±ð @Transactional ×¢½âºÍÉÏÊöµÄÅäÖÃÊʵ±µÄ¾ßÓÐÊÂÎñÐÐΪµÄbeansËùʹÓá£
ÉÏÃæµÄÀý×ÓÖУ¬ÆäʵÕýÊÇ <tx:annotation-driven/>ÔªËØµÄ³öÏÖ ¿ªÆô ÁËÊÂÎñÐÐΪ¡£
5¡¢SpringÍŶӵĽ¨ÒéÊÇÄãÔÚ¾ßÌåµÄÀࣨ»òÀàµÄ·½·¨£©ÉÏʹÓà @Transactional ×¢½â£¬¶ø²»ÒªÊ¹ÓÃÔÚÀàËùҪʵÏÖµÄÈκνӿÚÉÏ¡£
Ä㵱Ȼ¿ÉÒÔÔÚ½Ó¿ÚÉÏʹÓà @Transactional ×¢½â£¬µ«ÊÇÕ⽫ֻÄܵ±ÄãÉèÖÃÁË»ùÓڽӿڵĴúÀíʱËü²ÅÉúЧ¡£ÒòΪע½âÊÇ ²»Äܼ̳РµÄ£¬Õâ¾ÍÒâζ×ÅÈç¹ûÄãÕýÔÚʹÓûùÓÚÀàµÄ´úÀíʱ£¬ÄÇôÊÂÎñµÄÉèÖý«²»Äܱ»»ùÓÚÀàµÄ´úÀíËùʶ±ð£¬
¶øÇÒ¶ÔÏóÒ²½«²»»á±»ÊÂÎñ´úÀíËù°ü×°£¨½«±»È·ÈÏΪÑÏÖØµÄ£©¡£Òò ´Ë£¬Çë½ÓÊÜSpringÍŶӵĽ¨Òé²¢ÇÒÔÚ¾ßÌåµÄÀàÉÏʹÓà @Transactional ×¢½â¡£
Hibernate Êǵ±Ç°×îÁ÷ÐеÄO/R mapping¿ò¼Ü£¬Ëü³öÉíÓÚsf.NET£¬ÏÖÔÚÒѾ³ÉΪJbossµÄÒ»²¿·Ö¡£ Mybatis ÊÇÁíÍâÒ»ÖÖÓÅÐãµÄO/R mapping¿ò¼Ü¡£Ä¿Ç°ÊôÓÚapacheµÄÒ»¸ö×ÓÏîÄ¿¡£
MyBatis ²Î¿¼×ÊÁϹÙÍø£ºhttp://www.mybatis.org/core/zh/index.html
Hibernate²Î¿¼×ÊÁÏ£º http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/
Hibernate¶ÔÊý¾Ý¿â½á¹¹ÌṩÁ˽ÏΪÍêÕûµÄ·â×°£¬HibernateµÄO/R MappingʵÏÖÁËPOJO ºÍÊý¾Ý¿â±íÖ®¼äµÄÓ³É䣬ÒÔ¼°SQL µÄ×Ô¶¯Éú³ÉºÍÖ´ÐС£³ÌÐòÔ±ÍùÍùÖ»Ð趨ÒåºÃÁËPOJO µ½Êý¾Ý¿â±íµÄÓ³Éä¹ØÏµ£¬¼´¿Éͨ¹ýHibernate ÌṩµÄ·½·¨Íê³É³Ö¾Ã²ã²Ù
×÷¡£³ÌÐòÔ±ÉõÖÁ²»ÐèÒª¶ÔSQL µÄÊìÁ·ÕÆÎÕ£¬ Hibernate/OJB »á¸ù¾ÝÖÆ¶¨µÄ´æ´¢Âß¼£¬×Ô¶¯Éú³É¶ÔÓ¦µÄSQL ²¢µ÷ÓÃJDBC ½Ó¿Ú¼ÓÒÔÖ´ÐС£
iBATIS µÄ×ÅÁ¦µã£¬ÔòÔÚÓÚPOJO ÓëSQLÖ®¼äµÄÓ³Éä¹ØÏµ¡£È»ºóͨ¹ýÓ³ÉäÅäÖÃÎļþ£¬½«SQLËùÐèµÄ²ÎÊý£¬ÒÔ¼°·µ»ØµÄ½á¹û×Ö¶ÎÓ³Éäµ½Ö¸¶¨POJO¡£ Ïà¶ÔHibernate¡°O/R¡±¶øÑÔ£¬iBATIS ÊÇÒ»ÖÖ¡°Sql Mapping¡±µÄORMʵÏÖ¡£
HibernateµÄÕæÕýÕÆÎÕÒª±ÈMybatisÀ´µÃÄÑЩ¡£Mybatis¿ò¼ÜÏà¶Ô¼òµ¥ºÜÈÝÒ×ÉÏÊÖ£¬µ«Ò²Ïà¶Ô¼òªЩ¡£¸öÈ˾õµÃÒªÓúÃMybatis»¹ÊÇÊ×ÏÈÒªÏÈÀí½âºÃHibernate¡£
Hibernate ÓëMybatis¶¼ÊÇÁ÷Ðеij־ò㿪·¢¿ò¼Ü£¬µ«Hibernate¿ª·¢ÉçÇøÏà¶Ô¶àÈÈÄÖЩ£¬Ö§³ÖµÄ¹¤¾ßÒ²¶à£¬¸üÐÂÒ²¿ì£¬µ±Ç°×î¸ß°æ±¾4.1.8¡£¶øMybatisÏà¶Ôƽ¾²£¬¹¤¾ß½ÏÉÙ£¬µ±Ç°×î¸ß°æ±¾3.2¡£
HibernateºÍMyBatis¶¼ÓÐÏàÓ¦µÄ´úÂëÉú³É¹¤¾ß¡£¿ÉÒÔÉú³É¼òµ¥»ù±¾µÄDAO²ã·½·¨¡£
Õë¶Ô¸ß¼¶²éѯ£¬MybatisÐèÒªÊÖ¶¯±àдSQLÓï¾ä£¬ÒÔ¼°ResultMap¡£¶øHibernateÓÐÁ¼ºÃµÄÓ³Éä»úÖÆ£¬¿ª·¢ÕßÎÞÐè¹ØÐÄSQLµÄÉú³ÉÓë½á¹ûÓ³É䣬¿ÉÒÔ¸üרעÓÚÒµÎñÁ÷³Ì¡£
ÖÆ¶¨ºÏÀíµÄ»º´æ²ßÂÔ£»
¾¡Á¿Ê¹ÓÃÑÓ³Ù¼ÓÔØÌØÐÔ£»
²ÉÓúÏÀíµÄSession¹ÜÀí»úÖÆ£»
ʹÓÃÅúÁ¿×¥È¡£¬É趨ºÏÀíµÄÅú´¦Àí²ÎÊý£¨batch_size£©;
½øÐкÏÀíµÄO/RÓ³ÉäÉè¼Æ
MyBatisÔÚSession·½ÃæºÍHibernateµÄSessionÉúÃüÖÜÆÚÊÇÒ»Öµģ¬Í¬ÑùÐèÒªºÏÀíµÄSession¹ÜÀí»úÖÆ¡£MyBatisͬÑù¾ßÓжþ¼¶»º´æ»úÖÆ¡£ MyBatis¿ÉÒÔ½øÐÐÏêϸµÄSQLÓÅ»¯Éè¼Æ¡£
HibernateµÄ²éѯ»á½«±íÖеÄËùÓÐ×ֶβéѯ³öÀ´£¬ÕâÒ»µã»áÓÐÐÔÄÜÏûºÄ¡£HibernateÒ²¿ÉÒÔ×Ô¼ºÐ´SQLÀ´Ö¸¶¨ÐèÒª²éѯµÄ×ֶΣ¬µ«ÕâÑù¾ÍÆÆ»µÁËHibernate¿ª·¢µÄ¼ò½àÐÔ¡£¶øMybatisµÄSQLÊÇÊÖ¶¯±àдµÄ£¬ËùÒÔ¿ÉÒÔ°´ÐèÇóÖ¸¶¨²éѯµÄ×ֶΡ£
Hibernate HQLÓï¾äµÄµ÷ÓÅÐèÒª½«SQL´òÓ¡³öÀ´£¬¶øHibernateµÄSQL±»ºÜ¶àÈËÏÓÆúÒòΪ̫³óÁË¡£MyBatisµÄSQLÊÇ×Ô¼ºÊÖ¶¯Ð´µÄËùÒÔµ÷Õû·½±ã¡£µ«Hibernate¾ßÓÐ×Ô¼ºµÄÈÕ־ͳ¼Æ¡£Mybatis±¾Éí²»´øÈÕ־ͳ¼Æ£¬Ê¹ÓÃLog4j½øÐÐÈÕÖ¾¼Ç¼¡£
HibernateÓë¾ßÌåÊý¾Ý¿âµÄ¹ØÁªÖ»ÐèÔÚXMLÎļþÖÐÅäÖü´¿É£¬ËùÓеÄHQLÓï¾äÓë¾ßÌåʹÓõÄÊý¾Ý¿âÎ޹أ¬ÒÆÖ²ÐԺܺá£MyBatisÏîÄ¿ÖÐËùÓеÄSQLÓï¾ä¶¼ÊÇÒÀÀµËùÓõÄÊý¾Ý¿âµÄ£¬ËùÒÔ²»Í¬Êý¾Ý¿âÀàÐ͵ÄÖ§³Ö²»ºÃ¡£
Hibernate ÊÇÍêÕûµÄ¶ÔÏó/¹ØÏµÓ³Éä½â¾ö·½°¸£¬ËüÌṩÁ˶ÔÏó״̬¹ÜÀí£¨state management£©µÄ¹¦ÄÜ£¬Ê¹¿ª·¢Õß²»ÔÙÐèÒªÀí»áµ×²ãÊý¾Ý¿âϵͳµÄϸ½Ú¡£Ò²¾ÍÊÇ˵£¬Ïà¶ÔÓÚ³£¼ûµÄ JDBC/SQL ³Ö¾Ã²ã·½°¸ÖÐÐèÒª¹ÜÀí SQL Óï¾ä£¬Hibernate²ÉÓÃÁ˸ü×ÔÈ»µÄÃæÏò¶ÔÏóµÄÊÓ½ÇÀ´³Ö¾Ã»¯ Java Ó¦ÓÃÖеÄÊý¾Ý¡£
»»¾ä»°Ëµ£¬Ê¹Óà Hibernate µÄ¿ª·¢ÕßÓ¦¸Ã×ÜÊǹØ×¢¶ÔÏóµÄ״̬£¨state£©£¬²»±Ø¿¼ÂÇ SQL Óï¾äµÄÖ´ÐС£Õⲿ·Öϸ½ÚÒѾÓÉ Hibernate ÕÆ¹ÜÍ×µ±£¬Ö»Óпª·¢ÕßÔÚ½øÐÐϵͳÐÔÄܵ÷ÓŵÄʱºò²ÅÐèÒª½øÐÐÁ˽⡣¶øMyBatisÔÚÕâÒ»¿éûÓÐÎĵµËµÃ÷£¬Óû§ÐèÒª¶Ô¶ÔÏó×Ô¼º½øÐÐÏêϸµÄ¹ÜÀí¡£
Hibernate¶ÔʵÌ幨Áª¶ÔÏóµÄץȡÓÐ×ÅÁ¼ºÃµÄ»úÖÆ¡£¶ÔÓÚÿһ¸ö¹ØÁª¹ØÏµ¶¼¿ÉÒÔÏêϸµØÉèÖÃÊÇ·ñÑÓ³Ù¼ÓÔØ£¬²¢ÇÒÌṩ¹ØÁª×¥È¡¡¢²éѯץȡ¡¢×Ó²éѯץȡ¡¢ÅúÁ¿×¥È¡ËÄÖÖģʽ¡£ ËüÊÇÏêϸÅäÖúʹ¦ÀíµÄ¡£
¶øMybatisµÄÑÓ³Ù¼ÓÔØÊÇÈ«¾ÖÅäÖõġ£
HibernateÒ»¼¶»º´æÊÇSession»º´æ£¬ÀûÓúÃÒ»¼¶»º´æ¾ÍÐèÒª¶ÔSessionµÄÉúÃüÖÜÆÚ½øÐйÜÀíºÃ¡£½¨ÒéÔÚÒ»¸öAction²Ù×÷ÖÐʹÓÃÒ»¸öSession¡£Ò»¼¶»º´æÐèÒª¶ÔSession½øÐÐÑϸñ¹ÜÀí¡£
Hibernate¶þ¼¶»º´æÊÇSessionFactory¼¶µÄ»º´æ¡£ SessionFactoryµÄ»º´æ·ÖΪÄÚÖûº´æºÍÍâÖûº´æ¡£ÄÚÖûº´æÖдæ·ÅµÄÊÇSessionFactory¶ÔÏóµÄһЩ¼¯ºÏÊôÐÔ°üº¬µÄÊý¾Ý(Ó³ÉäÔªËØ¾Ý¼°Ô¤¶¨SQLÓï¾äµÈ),¶ÔÓÚÓ¦ÓóÌÐòÀ´Ëµ,ËüÊÇÖ»¶ÁµÄ¡£
ÍâÖûº´æÖдæ·ÅµÄÊÇÊý¾Ý¿âÊý¾ÝµÄ¸±±¾,Æä×÷ÓúÍÒ»¼¶»º´æÀàËÆ.¶þ¼¶»º´æ³ýÁËÒÔÄÚ´æ×÷Ϊ´æ´¢½éÖÊÍâ,»¹¿ÉÒÔÑ¡ÓÃÓ²Å̵ÈÍⲿ´æ´¢É豸¡£¶þ¼¶»º´æ³ÆÎª½ø³Ì¼¶»º´æ»òSessionFactory¼¶»º´æ£¬
Ëü¿ÉÒÔ±»ËùÓÐsession¹²Ïí£¬ËüµÄÉúÃüÖÜÆÚ°éËæ×ÅSessionFactoryµÄÉúÃüÖÜÆÚ´æÔÚºÍÏûÍö¡£
MyBatis °üº¬Ò»¸ö·Ç³£Ç¿´óµÄ²éѯ»º´æÌØÐÔ,Ëü¿ÉÒԷdz£·½±ãµØÅäÖúͶ¨ÖÆ¡£MyBatis 3 ÖеĻº´æÊµÏֵĺܶà¸Ä½ø¶¼ÒѾʵÏÖÁË,ʹµÃËü¸ü¼ÓÇ¿´ó¶øÇÒÒ×ÓÚÅäÖá£
ĬÈÏÇé¿öÏÂÊÇûÓпªÆô»º´æµÄ,³ýÁ˾ֲ¿µÄ session »º´æ,¿ÉÒÔÔöÇ¿±äÏÖ¶øÇÒ´¦ÀíÑ»· ÒÀÀµÒ²ÊDZØÐëµÄ¡£Òª¿ªÆô¶þ¼¶»º´æ,ÄãÐèÒªÔÚÄãµÄ SQL Ó³ÉäÎļþÖÐÌí¼ÓÒ»ÐÐ: <cache/>
×ÖÃæÉÏ¿´¾ÍÊÇÕâÑù¡£Õâ¸ö¼òµ¥Óï¾äµÄЧ¹ûÈçÏÂ:
Ó³ÉäÓï¾äÎļþÖеÄËùÓÐ select Óï¾ä½«»á±»»º´æ¡£
Ó³ÉäÓï¾äÎļþÖеÄËùÓÐ insert,update ºÍ delete Óï¾ä»áˢлº´æ¡£
»º´æ»áʹÓà Least Recently Used(LRU,×î½ü×îÉÙʹÓõÄ)Ëã·¨À´Êջء£
¸ù¾Ýʱ¼ä±í(±ÈÈç no Flush Interval,ûÓÐˢмä¸ô), »º´æ²»»áÒÔÈκÎʱ¼ä˳Ðò À´Ë¢Ð¡£
»º´æ»á´æ´¢ÁÐ±í¼¯ºÏ»ò¶ÔÏó(ÎÞÂÛ²éѯ·½·¨·µ»ØÊ²Ã´)µÄ 1024 ¸öÒýÓá£
»º´æ»á±»ÊÓΪÊÇ read/write(¿É¶Á/¿Éд)µÄ»º´æ,Òâζ×ŶÔÏó¼ìË÷²»Êǹ²ÏíµÄ,¶ø ÇÒ¿ÉÒÔ°²È«µØ±»µ÷ÓÃÕßÐÞ¸Ä,¶ø²»¸ÉÈÅÆäËûµ÷ÓÃÕß»òÏß³ÌËù×öµÄDZÔÚÐ޸ġ£
ËùÓеÄÕâЩÊôÐÔ¶¼¿ÉÒÔͨ¹ý»º´æÔªËصÄÊôÐÔÀ´Ð޸ġ£
±ÈÈç: <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
Õâ¸ö¸ü¸ß¼¶µÄÅäÖô´½¨ÁËÒ»¸ö FIFO »º´æ,²¢Ã¿¸ô 60 ÃëË¢ÐÂ,´æÊý½á¹û¶ÔÏó»òÁбíµÄ 512 ¸öÒýÓÃ,¶øÇÒ·µ»ØµÄ¶ÔÏó±»ÈÏΪÊÇÖ»¶ÁµÄ,Òò´ËÔÚ²»Í¬Ïß³ÌÖеĵ÷ÓÃÕßÖ®¼äÐÞ¸ÄËüÃÇ»á µ¼Ö³åÍ»¡£¿ÉÓõÄÊջزßÂÔÓÐ, ĬÈϵÄÊÇ LRU:
LRU ¨C ×î½ü×îÉÙʹÓõÄ:ÒÆ³ý×ʱ¼ä²»±»Ê¹ÓõĶÔÏó¡£
FIFO ¨C ÏȽøÏȳö:°´¶ÔÏó½øÈ뻺´æµÄ˳ÐòÀ´ÒƳýËüÃÇ¡£
SOFT ¨C ÈíÒýÓÃ:ÒÆ³ý»ùÓÚÀ¬»ø»ØÊÕÆ÷״̬ºÍÈíÒýÓùæÔòµÄ¶ÔÏó¡£
WEAK ¨C ÈõÒýÓÃ:¸ü»ý¼«µØÒƳý»ùÓÚÀ¬»øÊÕ¼¯Æ÷״̬ºÍÈõÒýÓùæÔòµÄ¶ÔÏó¡£
flushInterval(ˢмä¸ô)¿ÉÒÔ±»ÉèÖÃΪÈÎÒâµÄÕýÕûÊý,¶øÇÒËüÃÇ´ú±íÒ»¸öºÏÀíµÄºÁÃë ÐÎʽµÄʱ¼ä¶Î¡£Ä¬ÈÏÇé¿öÊDz»ÉèÖÃ,Ò²¾ÍÊÇûÓÐˢмä¸ô,»º´æ½ö½öµ÷ÓÃÓï¾äʱˢС£
size(ÒýÓÃÊýÄ¿)¿ÉÒÔ±»ÉèÖÃΪÈÎÒâÕýÕûÊý,Òª¼ÇסÄ㻺´æµÄ¶ÔÏóÊýÄ¿ºÍÄãÔËÐл·¾³µÄ ¿ÉÓÃÄÚ´æ×ÊÔ´ÊýÄ¿¡£Ä¬ÈÏÖµÊÇ1024¡£
readOnly(Ö»¶Á)ÊôÐÔ¿ÉÒÔ±»ÉèÖÃΪ true »ò false¡£Ö»¶ÁµÄ»º´æ»á¸øËùÓе÷ÓÃÕß·µ»Ø»º ´æ¶ÔÏóµÄÏàͬʵÀý¡£Òò´ËÕâЩ¶ÔÏó²»Äܱ»Ð޸ġ£ÕâÌṩÁ˺ÜÖØÒªµÄÐÔÄÜÓÅÊÆ¡£¿É¶ÁдµÄ»º´æ »á·µ»Ø»º´æ¶ÔÏóµÄ¿½±´(ͨ¹ýÐòÁл¯) ¡£Õâ»áÂýһЩ,µ«Êǰ²È«,Òò´ËĬÈÏÊÇ false¡£
HibernateºÍMybatisµÄ¶þ¼¶»º´æ³ýÁ˲ÉÓÃϵͳĬÈϵĻº´æ»úÖÆÍ⣬¶¼¿ÉÒÔͨ¹ýʵÏÖÄã×Ô¼ºµÄ»º´æ»òΪÆäËûµÚÈý·½»º´æ·½°¸£¬´´½¨ÊÊÅäÆ÷À´ÍêÈ«¸²¸Ç»º´æÐÐΪ¡£
HibernateµÄ¶þ¼¶»º´æÅäÖÃÔÚSessionFactoryÉú³ÉµÄÅäÖÃÎļþÖнøÐÐÏêϸÅäÖã¬È»ºóÔÙÔÚ¾ßÌåµÄ±í-¶ÔÏóÓ³ÉäÖÐÅäÖÃÊÇÄÇÖÖ»º´æ¡£
MyBatisµÄ¶þ¼¶»º´æÅäÖö¼ÊÇÔÚÿ¸ö¾ßÌåµÄ±í-¶ÔÏóÓ³ÉäÖнøÐÐÏêϸÅäÖã¬ÕâÑùÕë¶Ô²»Í¬µÄ±í¿ÉÒÔ×Ô¶¨Ò岻ͬµÄ»º´æ»úÖÆ¡£²¢ÇÒMybatis¿ÉÒÔÔÚÃüÃû¿Õ¼äÖй²ÏíÏàͬµÄ»º´æÅäÖúÍʵÀý£¬Í¨¹ýCache-refÀ´ÊµÏÖ¡£
ÒòΪHibernate¶Ô²éѯ¶ÔÏóÓÐ×ÅÁ¼ºÃµÄ¹ÜÀí»úÖÆ£¬Óû§ÎÞÐè¹ØÐÄSQL¡£ËùÒÔÔÚʹÓöþ¼¶»º´æÊ±Èç¹û³öÏÖÔàÊý¾Ý£¬ÏµÍ³»á±¨³ö´íÎó²¢Ìáʾ¡£
¶øMyBatisÔÚÕâÒ»·½Ã棬ʹÓöþ¼¶»º´æÊ±ÐèÒªÌØ±ðСÐÄ¡£Èç¹û²»ÄÜÍêȫȷ¶¨Êý¾Ý¸üвÙ×÷µÄ²¨¼°·¶Î§£¬±ÜÃâCacheµÄäĿʹÓ᣷ñÔò£¬ÔàÊý¾ÝµÄ³öÏÖ»á¸øÏµÍ³µÄÕý³£ÔËÐдøÀ´ºÜ´óµÄÒþ»¼¡£
HibernateÓëMyBatis¶¼¿ÉÒÔÊÇͨ¹ýSessionFactoryBuiderÓÉXMLÅäÖÃÎļþÉú³ÉSessionFactory£¬È»ºóÓÉSessionFactory Éú³ÉSession£¬×îºóÓÉSessionÀ´¿ªÆôÖ´ÐÐÊÂÎñºÍSQLÓï¾ä¡£ÆäÖÐSessionFactoryBuider£¬SessionFactory£¬SessionµÄÉúÃüÖÜÆÚ¶¼ÊDz¶àµÄ¡£
HibernateºÍMyBatis¶¼Ö§³ÖJDBCºÍJTAÊÂÎñ´¦Àí¡£
MyBatis¿ÉÒÔ½øÐиüΪϸÖµÄSQLÓÅ»¯£¬¿ÉÒÔ¼õÉÙ²éѯ×ֶΡ£
MyBatisÈÝÒ×ÕÆÎÕ£¬¶øHibernateÃż÷½Ï¸ß¡£
HibernateµÄDAO²ã¿ª·¢±ÈMyBatis¼òµ¥£¬MybatisÐèҪά»¤SQLºÍ½á¹ûÓ³Éä¡£
Hibernate¶Ô¶ÔÏóµÄά»¤ºÍ»º´æÒª±ÈMyBatisºÃ£¬¶ÔÔöɾ¸Ä²éµÄ¶ÔÏóµÄά»¤Òª·½±ã¡£
HibernateÊý¾Ý¿âÒÆÖ²ÐԺܺã¬MyBatisµÄÊý¾Ý¿âÒÆÖ²ÐÔ²»ºÃ£¬²»Í¬µÄÊý¾Ý¿âÐèҪд²»Í¬SQL¡£
HibernateÓиüºÃµÄ¶þ¼¶»º´æ»úÖÆ£¬¿ÉÒÔʹÓõÚÈý·½»º´æ¡£MyBatis±¾ÉíÌṩµÄ»º´æ»úÖÆ²»¼Ñ¡£
Hibernate¹¦ÄÜÇ¿´ó£¬Êý¾Ý¿âÎÞ¹ØÐԺã¬O/RÓ³ÉäÄÜÁ¦Ç¿£¬Èç¹ûÄã¶ÔHibernateÏ൱¾«Í¨£¬¶øÇÒ¶ÔHibernate½øÐÐÁËÊʵ±µÄ·â×°£¬ÄÇôÄãµÄÏîÄ¿Õû¸ö³Ö¾Ã²ã´úÂë»áÏ൱¼òµ¥£¬ÐèҪдµÄ´úÂëºÜÉÙ£¬¿ª·¢ËٶȺܿ죬·Ç³£Ë¬¡£
HibernateµÄȱµã¾ÍÊÇѧϰÃż÷²»µÍ£¬Òª¾«Í¨Ãż÷¸ü¸ß£¬¶øÇÒÔõôÉè¼ÆO/RÓ³É䣬ÔÚÐÔÄܺͶÔÏóÄ£ÐÍÖ®¼äÈçºÎȨºâÈ¡µÃƽºâ£¬ÒÔ¼°ÔõÑùÓúÃHibernate·½ÃæÐèÒªÄãµÄ¾ÑéºÍÄÜÁ¦¶¼ºÜÇ¿²ÅÐС£
NYBATISÈëÃżòµ¥£¬¼´Ñ§¼´Óã¬ÌṩÁËÊý¾Ý¿â²éѯµÄ×Ô¶¯¶ÔÏó°ó¶¨¹¦ÄÜ£¬¶øÇÒÑÓÐøÁ˺ܺõÄSQLʹÓþÑ飬¶ÔÓÚûÓÐÄÇô¸ßµÄ¶ÔÏóÄ£ÐÍÒªÇóµÄÏîÄ¿À´Ëµ£¬Ï൱ÍêÃÀ¡£
NYBATISµÄȱµã¾ÍÊÇ¿ò¼Ü»¹ÊDZȽϼòª£¬¹¦ÄÜÉÐÓÐȱʧ£¬ËäÈ»¼ò»¯ÁËÊý¾Ý°ó¶¨´úÂ룬µ«ÊÇÕû¸öµ×²ãÊý¾Ý¿â²éѯʵ¼Ê»¹ÊÇÒª×Ô¼ºÐ´µÄ£¬¹¤×÷Á¿Ò²±È½Ï´ó£¬¶øÇÒ²»Ì«ÈÝÒ×ÊÊÓ¦¿ìËÙÊý¾Ý¿âÐÞ¸Ä
´ð£ºSessionFactory¶ÔÓ¦HibernateµÄÒ»¸öÊý¾Ý´æ´¢µÄ¸ÅÄËüÊÇḬ̈߳²È«µÄ£¬¿ÉÒÔ±»¶à¸öÏ̲߳¢·¢·ÃÎÊ¡£SessionFactoryÒ»°ãÖ»»áÔÚÆô¶¯µÄʱºò¹¹½¨¡£
¶ÔÓÚÓ¦ÓóÌÐò£¬×îºÃ½«SessionFactoryͨ¹ýµ¥Àýģʽ½øÐзâ×°ÒÔ±ãÓÚ·ÃÎÊ¡£SessionÊÇÒ»¸öÇáÁ¿¼¶·ÇḬ̈߳²È«µÄ¶ÔÏó£¨Ï̼߳䲻Äܹ²Ïísession£©£¬Ëü±íʾÓëÊý¾Ý¿â½øÐн»»¥µÄÒ»¸ö¹¤×÷µ¥Ôª¡£
SessionÊÇÓÉSessionFactory´´½¨µÄ£¬ÔÚÈÎÎñÍê³ÉÖ®ºóËü»á±»¹Ø±Õ¡£SessionÊdz־òã·þÎñ¶ÔÍâÌṩµÄÖ÷Òª½Ó¿Ú¡£Session»áÑÓ³Ù»ñÈ¡Êý¾Ý¿âÁ¬½Ó£¨Ò²¾ÍÊÇÔÚÐèÒªµÄʱºò²Å»á»ñÈ¡£©¡£
ΪÁ˱ÜÃâ´´½¨Ì«¶àµÄsession£¬¿ÉÒÔʹÓÃThreadLocal½«sessionºÍµ±Ç°Ḭ̈߳ó¶¨ÔÚÒ»Æð£¬ÕâÑù¿ÉÒÔÈÃͬһ¸öÏ̻߳ñµÃµÄ×ÜÊÇͬһ¸ösession¡£Hibernate 3ÖÐSessionFactoryµÄgetCurrentSession()·½·¨¾Í¿ÉÒÔ×öµ½¡£
´ð£ºÖ÷ÒªÓÐÒÔÏÂÈýÏîÇø±ð£º
¢Ù Èç¹ûûÓÐÕÒµ½·ûºÏÌõ¼þµÄ¼Ç¼£¬get·½·¨·µ»Ønull£¬load·½·¨Å׳öÒì³£¡£
¢Ú get·½·¨Ö±½Ó·µ»ØÊµÌåÀà¶ÔÏó£¬load·½·¨·µ»ØÊµÌåÀà¶ÔÏóµÄ´úÀí¡£
¢Û ÔÚHibernate 3֮ǰ£¬get·½·¨Ö»ÔÚÒ»¼¶»º´æÖнøÐÐÊý¾Ý²éÕÒ£¬Èç¹ûûÓÐÕÒµ½¶ÔÓ¦µÄÊý¾ÝÔòÔ½¹ý¶þ¼¶»º´æ£¬Ö±½Ó·¢³öSQLÓï¾äÍê³ÉÊý¾Ý¶ÁÈ¡£»load·½·¨Ôò¿ÉÒÔ´Ó¶þ¼¶»º´æÖлñÈ¡Êý¾Ý£»´ÓHibernate 3¿ªÊ¼£¬get·½·¨²»ÔÙÊǶԶþ¼¶»º´æÖ»Ð´²»¶Á£¬ËüÒ²ÊÇ¿ÉÒÔ·ÃÎʶþ¼¶»º´æµÄ¡£
˵Ã÷£º¶ÔÓÚload()·½·¨HibernateÈÏΪ¸ÃÊý¾ÝÔÚÊý¾Ý¿âÖÐÒ»¶¨´æÔÚ¿ÉÒÔ·ÅÐĵÄʹÓôúÀíÀ´ÊµÏÖÑÓ³Ù¼ÓÔØ£¬Èç¹ûûÓÐÊý¾Ý¾ÍÅ׳öÒì³££¬¶øÍ¨¹ýget()·½·¨»ñÈ¡µÄÊý¾Ý¿ÉÒÔ²»´æÔÚ¡£
´ð£ºHibernateµÄ¶ÔÏóÓÐÈýÖÖ״̬£ºË²Ê±Ì¬£¨transient£©¡¢³Ö¾Ã̬£¨persistent£©ºÍÓÎÀë̬£¨detached£©£¬Ë²Ê±Ì¬µÄʵÀý¿ÉÒÔͨ¹ýµ÷ÓÃsave()¡¢persist()»òÕßsaveOrUpdate()·½·¨±ä³É³Ö¾Ã̬£»
ÓÎÀë̬µÄʵÀý¿ÉÒÔͨ¹ýµ÷Óà update()¡¢saveOrUpdate()¡¢lock()»òÕßreplicate()±ä³É³Ö¾Ã̬¡£save()ºÍpersist()½«»áÒý·¢SQLµÄINSERTÓï¾ä£¬¶øupdate()»òmerge()»áÒý·¢UPDATEÓï¾ä¡£
save()ºÍupdate()µÄÇø±ðÔÚÓÚÒ»¸öÊǽ«Ë²Ê±Ì¬¶ÔÏó±ä³É³Ö¾Ã̬£¬Ò»¸öÊǽ«ÓÎÀë̬¶ÔÏó±äΪ³Ö¾Ã̬¡£merge()·½·¨¿ÉÒÔÍê³Ésave()ºÍupdate()·½·¨µÄ¹¦ÄÜ£¬ËüµÄÒâͼÊǽ«ÐµÄ״̬ºÏ²¢µ½ÒÑÓеij־û¯¶ÔÏóÉÏ»ò´´½¨Ðµij־û¯¶ÔÏó¡£
¶ÔÓÚpersist()·½·¨£¬°´ÕÕ¹Ù·½ÎĵµµÄ˵Ã÷£º
¢Ù persist()·½·¨°ÑÒ»¸ö˲ʱ̬µÄʵÀý³Ö¾Ã»¯£¬µ«ÊDz¢²»±£Ö¤±êʶ·û±»Á¢¿ÌÌîÈëµ½³Ö¾Ã»¯ÊµÀýÖУ¬±êʶ·ûµÄÌîÈë¿ÉÄܱ»ÍƳٵ½flushµÄʱ¼ä£»¢Ú persist()·½·¨±£Ö¤µ±ËüÔÚÒ»¸öÊÂÎñÍⲿ±»µ÷ÓõÄʱºò²¢²»´¥·¢Ò»¸öINSERTÓï¾ä£¬µ±ÐèÒª·â×°Ò»¸ö³¤»á»°Á÷³ÌµÄʱºò£¬persist()·½·¨ÊǺÜÓбØÒªµÄ£»
¢Û save()·½·¨²»±£Ö¤µÚ¢ÚÌõ£¬ËüÒª·µ»Ø±êʶ·û£¬ËùÒÔËü»áÁ¢¼´Ö´ÐÐINSERTÓï¾ä£¬²»¹ÜÊÇÔÚÊÂÎñÄÚ²¿»¹ÊÇÍⲿ¡£ÖÁÓÚlock()·½·¨ºÍupdate()·½·¨µÄÇø±ð£¬update()·½·¨ÊǰÑÒ»¸öÒѾ¸ü¸Ä¹ýµÄÍѹÜ״̬µÄ¶ÔÏó±ä³É³Ö¾Ã״̬£»lock()·½·¨ÊǰÑÒ»¸öûÓиü¸Ä¹ýµÄÍѹÜ״̬µÄ¶ÔÏó±ä³É³Ö¾Ã״̬¡£
´ð£ºSession¼ÓÔØÊµÌå¶ÔÏóµÄ²½ÖèÊÇ£º
¢Ù SessionÔÚµ÷ÓÃÊý¾Ý¿â²éѯ¹¦ÄÜ֮ǰ£¬Ê×ÏÈ»áÔÚÒ»¼¶»º´æÖÐͨ¹ýʵÌåÀàÐͺÍÖ÷¼ü½øÐвéÕÒ£¬Èç¹ûÒ»¼¶»º´æ²éÕÒÃüÖÐÇÒÊý¾Ý״̬ºÏ·¨£¬ÔòÖ±½Ó·µ»Ø£»
¢Ú Èç¹ûÒ»¼¶»º´æÃ»ÓÐÃüÖУ¬½ÓÏÂÀ´Session»áÔÚµ±Ç°NonExists¼Ç¼£¨Ï൱ÓÚÒ»¸ö²éѯºÚÃûµ¥£¬Èç¹û³öÏÖÖØ¸´µÄÎÞЧ²éѯ¿ÉÒÔѸËÙ×ö³öÅжϣ¬´Ó¶øÌáÉýÐÔÄÜ£©ÖнøÐвéÕÒ£¬Èç¹ûNonExistsÖдæÔÚͬÑùµÄ²éѯÌõ¼þ£¬Ôò·µ»Ønull£»
¢Û Èç¹ûÒ»¼¶»º´æ²éѯʧ°ÜÔò²éѯ¶þ¼¶»º´æ£¬Èç¹û¶þ¼¶»º´æÃüÖÐÔòÖ±½Ó·µ»Ø£»
¢Ü Èç¹û֮ǰµÄ²éѯ¶¼Î´ÃüÖУ¬Ôò·¢³öSQLÓï¾ä£¬Èç¹û²éѯδ·¢ÏÖ¶ÔÓ¦¼Ç¼Ôò½«´Ë´Î²éѯÌí¼Óµ½SessionµÄNonExistsÖмÓÒԼǼ£¬²¢·µ»Ønull£»
¢Ý ¸ù¾ÝÓ³ÉäÅäÖúÍSQLÓï¾äµÃµ½ResultSet£¬²¢´´½¨¶ÔÓ¦µÄʵÌå¶ÔÏó£»
¢Þ ½«¶ÔÏóÄÉÈëSession£¨Ò»¼¶»º´æ£©µÄ¹ÜÀí£»
¢ß Èç¹ûÓжÔÓ¦µÄÀ¹½ØÆ÷£¬ÔòÖ´ÐÐÀ¹½ØÆ÷µÄonLoad·½·¨£»
¢à Èç¹û¿ªÆô²¢ÉèÖÃÁËҪʹÓöþ¼¶»º´æ£¬Ôò½«Êý¾Ý¶ÔÏóÄÉÈë¶þ¼¶»º´æ£»
¢á ·µ»ØÊý¾Ý¶ÔÏó¡£
´ð£º
¢Ù list()·½·¨ÎÞ·¨ÀûÓÃÒ»¼¶»º´æºÍ¶þ¼¶»º´æ£¨¶Ô»º´æÖ»Ð´²»¶Á£©£¬ËüÖ»ÄÜÔÚ¿ªÆô²éѯ»º´æµÄǰÌáÏÂʹÓòéѯ»º´æ£»iterate()·½·¨¿ÉÒÔ³ä·ÖÀûÓûº´æ£¬Èç¹ûÄ¿±êÊý¾ÝÖ»¶Á»òÕß¶ÁȡƵ·±£¬Ê¹ÓÃiterate()·½·¨¿ÉÒÔ¼õÉÙÐÔÄÜ¿ªÏú¡£
¢Ú list()·½·¨²»»áÒýÆðN+1²éѯÎÊÌ⣬¶øiterate()·½·¨¿ÉÄÜÒýÆðN+1²éѯÎÊÌâ
´ð£ºÑÓ³Ù¼ÓÔØ¾ÍÊDz¢²»ÊÇÔÚ¶ÁÈ¡µÄʱºò¾Í°ÑÊý¾Ý¼ÓÔØ½øÀ´£¬¶øÊǵȵ½Ê¹ÓÃʱÔÙ¼ÓÔØ¡£HibernateʹÓÃÁËÐéÄâ´úÀí»úÖÆÊµÏÖÑÓ³Ù¼ÓÔØ£¬ÎÒÃÇʹÓÃSessionµÄload()·½·¨¼ÓÔØÊý¾Ý»òÕßÒ»¶Ô¶à¹ØÁªÓ³ÉäÔÚʹÓÃÑÓ³Ù¼ÓÔØµÄÇé¿öÏ´ÓÒ»µÄÒ»·½¼ÓÔØ¶àµÄÒ»·½£¬
µÃµ½µÄ¶¼ÊÇÐéÄâ´úÀí£¬¼òµ¥µÄ˵·µ»Ø¸øÓû§µÄ²¢²»ÊÇʵÌå±¾Éí£¬¶øÊÇʵÌå¶ÔÏóµÄ´úÀí¡£´úÀí¶ÔÏóÔÚÓû§µ÷ÓÃgetter·½·¨Ê±²Å»áÈ¥Êý¾Ý¿â¼ÓÔØÊý¾Ý¡£µ«¼ÓÔØÊý¾Ý¾ÍÐèÒªÊý¾Ý¿âÁ¬½Ó¡£¶øµ±ÎÒÃǰѻỰ¹Ø±Õʱ£¬Êý¾Ý¿âÁ¬½Ó¾Íͬʱ¹Ø±ÕÁË¡£
¢Ù ¹Ø±ÕÑÓ³Ù¼ÓÔØÌØÐÔ¡£ÕâÖÖ·½Ê½²Ù×÷ÆðÀ´±È½Ï¼òµ¥£¬ÒòΪHibernateµÄÑÓ³Ù¼ÓÔØÌØÐÔÊÇ¿ÉÒÔͨ¹ýÓ³ÉäÎļþ»òÕß×¢½â½øÐÐÅäÖõ쬵«ÕâÖÖ½â¾ö·½°¸´æÔÚÃ÷ÏÔµÄȱÏÝ¡£
Ê×ÏÈ£¬³öÏÖ"no session or session was closed"ͨ³£ËµÃ÷ϵͳÖÐÒѾ´æÔÚÖ÷Íâ¼ü¹ØÁª£¬Èç¹ûÈ¥µôÑÓ³Ù¼ÓÔØµÄ»°£¬Ã¿´Î²éѯµÄ¿ªÏú¶¼»á±äµÃºÜ´ó¡£
¢Ú ÔÚsession¹Ø±Õ֮ǰÏÈ»ñÈ¡ÐèÒª²éѯµÄÊý¾Ý£¬¿ÉÒÔʹÓù¤¾ß·½·¨Hibernate.isInitialized()Åж϶ÔÏóÊÇ·ñ±»¼ÓÔØ£¬Èç¹ûûÓб»¼ÓÔØÔò¿ÉÒÔʹÓÃHibernate.initialize()·½·¨¼ÓÔØ¶ÔÏó¡£
¢Û ʹÓÃÀ¹½ØÆ÷»ò¹ýÂËÆ÷ÑÓ³¤SessionµÄÉúÃüÖÜÆÚÖ±µ½ÊÓͼ»ñµÃÊý¾Ý¡£SpringÕûºÏHibernateÌṩµÄOpenSessionInViewFilterºÍOpenSessionInViewInterceptor¾ÍÊÇÕâÖÖ×ö·¨¡£
´ð£º¼Ì³Ð¹ØÏµµÄÓ³Éä²ßÂÔÓÐÈýÖÖ£º
¢Ù ÿ¸ö¼Ì³Ð½á¹¹Ò»ÕÅ±í£¨table per class hierarchy£©£¬²»¹Ü¶àÉÙ¸ö×ÓÀà¶¼ÓÃÒ»ÕÅ±í¡£
¢Ú ÿ¸ö×ÓÀàÒ»ÕÅ±í£¨table per subclass£©£¬¹«¹²ÐÅÏ¢·ÅÒ»ÕÅ±í£¬ÌØÓÐÐÅÏ¢·Åµ¥¶ÀµÄ±í¡£
¢Û ÿ¸ö¾ßÌåÀàÒ»ÕÅ±í£¨table per concrete class£©£¬ÓжàÉÙ¸ö×ÓÀà¾ÍÓжàÉÙÕÅ±í¡£
µÚÒ»ÖÖ·½Ê½ÊôÓÚµ¥±í²ßÂÔ£¬ÆäÓŵãÔÚÓÚ²éѯ×ÓÀà¶ÔÏóµÄʱºòÎÞÐè±íÁ¬½Ó£¬²éѯËٶȿ죬Êʺ϶à̬²éѯ£»È±µãÊÇ¿ÉÄܵ¼Ö±íºÜ´ó¡£ºóÁ½ÖÖ·½Ê½ÊôÓÚ¶à±í²ßÂÔ£¬ÆäÓŵãÔÚÓÚÊý¾Ý´æ´¢½ô´Õ£¬ÆäȱµãÊÇÐèÒª½øÐÐÁ¬½Ó²éѯ£¬²»Êʺ϶à̬²éѯ¡£
´ð£ºÕâ¸öÎÊÌâÓ¦µ±Ìô×Ô¼ºÊ¹ÓùýµÄÓÅ»¯²ßÂԻش𣬳£ÓõÄÓУº
¢Ù ÖÆ¶¨ºÏÀíµÄ»º´æ²ßÂÔ£¨¶þ¼¶»º´æ¡¢²éѯ»º´æ£©¡£
¢Ú ²ÉÓúÏÀíµÄSession¹ÜÀí»úÖÆ¡£
¢Û ¾¡Á¿Ê¹ÓÃÑÓ³Ù¼ÓÔØÌØÐÔ¡£
¢Ü É趨ºÏÀíµÄÅú´¦Àí²ÎÊý¡£
¢Ý Èç¹û¿ÉÒÔ£¬Ñ¡ÓÃUUID×÷ΪÖ÷¼üÉú³ÉÆ÷¡£
¢Þ Èç¹û¿ÉÒÔ£¬Ñ¡ÓûùÓÚ°æ±¾ºÅµÄÀÖ¹ÛËøÌæ´ú±¯¹ÛËø¡£
¢ß ÔÚ¿ª·¢¹ý³ÌÖÐ, ¿ªÆôhibernate.show_sqlÑ¡Ïî²é¿´Éú³ÉµÄSQL£¬´Ó¶øÁ˽âµ×²ãµÄ×´¿ö£»¿ª·¢Íê³Éºó¹Ø±Õ´ËÑ¡Ïî¡£
¢à ¿¼ÂÇÊý¾Ý¿â±¾ÉíµÄÓÅ»¯£¬ºÏÀíµÄË÷Òý¡¢Ç¡µ±µÄÊý¾Ý·ÖÇø²ßÂԵȶ¼»á¶Ô³Ö¾Ã²ãµÄÐÔÄÜ´øÀ´¿É¹ÛµÄÌáÉý£¬µ«ÕâЩÐèҪרҵµÄDBA£¨Êý¾Ý¿â¹ÜÀíÔ±£©Ìṩ֧³Ö¡£
´ð£ºHibernateµÄSessionÌṩÁËÒ»¼¶»º´æµÄ¹¦ÄÜ£¬Ä¬ÈÏ×ÜÊÇÓÐЧµÄ£¬µ±Ó¦ÓóÌÐò±£´æ³Ö¾Ã»¯ÊµÌå¡¢Ð޸ij־û¯ÊµÌåʱ£¬Session²¢²»»áÁ¢¼´°ÑÕâÖָıäÌá½»µ½Êý¾Ý¿â£¬¶øÊÇ»º´æÔÚµ±Ç°µÄSessionÖУ¬³ý·ÇÏÔʾµ÷ÓÃÁËSessionµÄflush()·½·¨»òͨ¹ýclose()·½·¨¹Ø±ÕSession¡£Í¨¹ýÒ»¼¶»º´æ£¬¿ÉÒÔ¼õÉÙ³ÌÐòÓëÊý¾Ý¿âµÄ½»»¥£¬´Ó¶øÌá¸ßÊý¾Ý¿â·ÃÎÊÐÔÄÜ¡£
SessionFactory¼¶±ðµÄ¶þ¼¶»º´æÊÇÈ«¾ÖÐԵģ¬ËùÓеÄSession¿ÉÒÔ¹²ÏíÕâ¸ö¶þ¼¶»º´æ¡£²»¹ý¶þ¼¶»º´æÄ¬ÈÏÊǹرյģ¬ÐèÒªÏÔʾ¿ªÆô²¢Ö¸¶¨ÐèҪʹÓÃÄÄÖÖ¶þ¼¶»º´æÊµÏÖÀࣨ¿ÉÒÔʹÓõÚÈý·½ÌṩµÄʵÏÖ£©¡£Ò»µ©¿ªÆôÁ˶þ¼¶»º´æ²¢ÉèÖÃÁËÐèҪʹÓöþ¼¶»º´æµÄʵÌåÀ࣬SessionFactory¾Í»á»º´æ·ÃÎʹýµÄ¸ÃʵÌåÀàµÄÿ¸ö¶ÔÏ󣬳ý·Ç»º´æµÄÊý¾Ý³¬³öÁËÖ¸¶¨µÄ»º´æ¿Õ¼ä¡£
Ò»¼¶»º´æºÍ¶þ¼¶»º´æ¶¼ÊǶÔÕû¸öʵÌå½øÐлº´æ£¬²»»á»º´æÆÕͨÊôÐÔ£¬Èç¹ûÏ£Íû¶ÔÆÕͨÊôÐÔ½øÐлº´æ£¬¿ÉÒÔʹÓòéѯ»º´æ¡£²éѯ»º´æÊǽ«HQL»òSQLÓï¾äÒÔ¼°ËüÃǵIJéѯ½á¹û×÷Ϊ¼üÖµ¶Ô½øÐлº´æ£¬¶ÔÓÚͬÑùµÄ²éѯ¿ÉÒÔÖ±½Ó´Ó»º´æÖлñÈ¡Êý¾Ý¡£²éѯ»º´æÄ¬ÈÏÒ²Êǹرյģ¬ÐèÒªÏÔʾ¿ªÆô¡£
´ð£ºDetachedCriteriaºÍCriteriaµÄÓ÷¨»ù±¾ÉÏÊÇÒ»Öµģ¬µ«CriteriaÊÇÓÉSessionµÄcreateCriteria()·½·¨´´½¨µÄ£¬Ò²¾ÍÒâζ×ÅÀ뿪´´½¨ËüµÄSession£¬Criteria¾ÍÎÞ·¨Ê¹ÓÃÁË¡£
DetachedCriteria²»ÐèÒªSession¾Í¿ÉÒÔ´´½¨£¨Ê¹ÓÃDetachedCriteria.forClass()·½·¨´´½¨£©£¬ËùÒÔͨ³£Ò²³ÆÆäΪÀëÏßµÄCriteria£¬ÔÚÐèÒª½øÐвéѯ²Ù×÷µÄʱºòÔÙºÍSession°ó¶¨£¨µ÷ÓÃÆägetExecutableCriteria(Session)·½·¨£©£¬ÕâÒ²¾ÍÒâζ×ÅÒ»¸öDetachedCriteria¿ÉÒÔÔÚÐèÒªµÄʱºòºÍ²»Í¬µÄSession½øÐа󶨡£
´ð£º@OneToManyÓÃÀ´ÅäÖÃÒ»¶Ô¶à¹ØÁªÓ³É䣬µ«Í¨³£Çé¿öÏ£¬Ò»¶Ô¶à¹ØÁªÓ³Éä¶¼ÓɶàµÄÒ»·½À´Î¬»¤¹ØÁª¹ØÏµ£¬ÀýÈçѧÉúºÍ°à¼¶£¬Ó¦¸ÃÔÚѧÉúÀàÖÐÌí¼Ó°à¼¶ÊôÐÔÀ´Î¬³ÖѧÉúºÍ°à¼¶µÄ¹ØÁª¹ØÏµ£¨ÔÚÊý¾Ý¿âÖÐÊÇÓÉѧÉú±íÖеÄÍâ¼ü°à¼¶±àºÅÀ´Î¬»¤Ñ§Éú±íºÍ°à¼¶±íµÄ¶à¶ÔÒ»¹ØÏµ£©
Èç¹ûҪʹÓÃË«Ïò¹ØÁª£¬Ôڰ༶ÀàÖÐÌí¼ÓÒ»¸öÈÝÆ÷ÊôÐÔÀ´´æ·ÅѧÉú£¬²¢Ê¹ÓÃ@OneToMany×¢½â½øÐÐÓ³É䣬´ËʱmappedByÊôÐԾͷdz£ÖØÒª¡£Èç¹ûʹÓÃXML½øÐÐÅäÖ㬿ÉÒÔÓÃ<set>±êÇ©µÄinverse="true"ÉèÖÃÀ´´ïµ½Í¬ÑùµÄЧ¹û¡£
´ð£º#½«´«ÈëµÄÊý¾Ý¶¼µ±³ÉÒ»¸ö×Ö·û´®£¬»á¶Ô´«ÈëµÄÊý¾Ý×Ô¶¯¼ÓÉÏÒýºÅ£»$½«´«ÈëµÄÊý¾ÝÖ±½ÓÏÔʾÉú³ÉÔÚSQLÖС£×¢Ò⣺ʹÓÃ$ռλ·û¿ÉÄܻᵼÖÂSQL×¢Éä¹¥»÷£¬ÄÜÓÃ#µÄµØ·½¾Í²»ÒªÊ¹ÓÃ$£¬Ð´order by×Ó¾äµÄʱºòÓ¦¸ÃÓÃ$¶ø²»ÊÇ#¡£
´ð£ºÔÚ´óÐÍÏîÄ¿ÖУ¬¿ÉÄÜ´æÔÚ´óÁ¿µÄSQLÓï¾ä£¬ÕâʱºòΪÿ¸öSQLÓï¾äÆðÒ»¸öΨһµÄ±êʶ£¨ID£©¾Í±äµÃ²¢²»ÈÝÒ×ÁË¡£ÎªÁ˽â¾öÕâ¸öÎÊÌ⣬ÔÚMyBatisÖУ¬¿ÉÒÔΪÿ¸öÓ³ÉäÎļþÆðÒ»¸öΨһµÄÃüÃû¿Õ¼ä£¬ÕâÑù¶¨ÒåÔÚÕâ¸öÓ³ÉäÎļþÖеÄÿ¸öSQLÓï¾ä¾Í³ÉÁ˶¨ÒåÔÚÕâ¸öÃüÃû¿Õ¼äÖеÄÒ»¸öID¡£
Ö»ÒªÎÒÃÇÄܹ»±£Ö¤Ã¿¸öÃüÃû¿Õ¼äÖÐÕâ¸öIDÊÇΨһµÄ£¬¼´Ê¹ÔÚ²»Í¬Ó³ÉäÎļþÖеÄÓï¾äIDÏàͬ£¬Ò²²»»áÔÙ²úÉú³åÍ»ÁË¡£
´ð£º¶ÔÓÚһЩ¸´ÔӵIJéѯ£¬ÎÒÃÇ¿ÉÄÜ»áÖ¸¶¨¶à¸ö²éѯÌõ¼þ£¬µ«ÊÇÕâЩÌõ¼þ¿ÉÄÜ´æÔÚÒ²¿ÉÄܲ»´æÔÚ£¬ÀýÈçÔÚ58ͬ³ÇÉÏÃæÕÒ·¿×Ó£¬ÎÒÃÇ¿ÉÄÜ»áÖ¸¶¨Ãæ»ý¡¢Â¥²ãºÍËùÔÚλÖÃÀ´²éÕÒ·¿Ô´£¬Ò²¿ÉÄÜ»áÖ¸¶¨Ãæ»ý¡¢¼Û¸ñ¡¢»§ÐͺÍËùÔÚλÖÃÀ´²éÕÒ·¿Ô´£¬´Ëʱ¾ÍÐèÒª¸ù¾ÝÓû§Ö¸¶¨µÄÌõ¼þ¶¯Ì¬Éú³ÉSQLÓï¾ä¡£
Èç¹û²»Ê¹Óó־òã¿ò¼ÜÎÒÃÇ¿ÉÄÜÐèÒª×Ô¼ºÆ´×°SQLÓï¾ä£¬»¹ºÃMyBatisÌṩÁ˶¯Ì¬SQLµÄ¹¦ÄÜÀ´½â¾öÕâ¸öÎÊÌâ¡£MyBatisÖÐÓÃÓÚʵÏÖ¶¯Ì¬SQLµÄÔªËØÖ÷ÒªÓУº
- if
- choose / when / otherwise
- trim
- where
- set
- foreach
´ð£ºIoC½Ð¿ØÖÆ·´×ª£¬ÊÇInversion of ControlµÄËõд£¬DI£¨Dependency Injection£©½ÐÒÀÀµ×¢È룬ÊǶÔIoC¸ü¼òµ¥µÄÚ¹ÊÍ¡£¿ØÖÆ·´×ªÊǰѴ«Í³ÉÏÓɳÌÐò´úÂëÖ±½Ó²Ù¿ØµÄ¶ÔÏóµÄµ÷ÓÃȨ½»¸øÈÝÆ÷£¬Í¨¹ýÈÝÆ÷À´ÊµÏÖ¶ÔÏó×é¼þµÄ×°ÅäºÍ¹ÜÀí¡£
ËùνµÄ"¿ØÖÆ·´×ª"¾ÍÊǶÔ×é¼þ¶ÔÏó¿ØÖÆÈ¨µÄ×ªÒÆ£¬´Ó³ÌÐò´úÂë±¾Éí×ªÒÆµ½ÁËÍⲿÈÝÆ÷£¬ÓÉÈÝÆ÷À´´´½¨¶ÔÏó²¢¹ÜÀí¶ÔÏóÖ®¼äµÄÒÀÀµ¹ØÏµ¡£IoCÌåÏÖÁ˺ÃÀ³ÎëÔÔò - "Don¡¯t call me, we will call you"¡£
ÒÀÀµ×¢ÈëµÄ»ù±¾ÔÔòÊÇÓ¦ÓÃ×é¼þ²»Ó¦¸Ã¸ºÔð²éÕÒ×ÊÔ´»òÕ߯äËûÒÀÀµµÄÐ×÷¶ÔÏó¡£ÅäÖöÔÏóµÄ¹¤×÷Ó¦¸ÃÓÉÈÝÆ÷¸ºÔ𣬲éÕÒ×ÊÔ´µÄÂß¼Ó¦¸Ã´ÓÓ¦ÓÃ×é¼þµÄ´úÂëÖгéÈ¡³öÀ´£¬½»¸øÈÝÆ÷À´Íê³É¡£
DIÊǶÔIoC¸ü׼ȷµÄÃèÊö£¬¼´×é¼þÖ®¼äµÄÒÀÀµ¹ØÏµÓÉÈÝÆ÷ÔÚÔËÐÐÆÚ¾ö¶¨£¬ÐÎÏóµÄÀ´Ëµ£¬¼´ÓÉÈÝÆ÷¶¯Ì¬µÄ½«Ä³ÖÖÒÀÀµ¹ØÏµ×¢Èëµ½×é¼þÖ®ÖС£
ÒÀÀµ×¢Èë¿ÉÒÔͨ¹ýsetter·½·¨×¢È루ÉèÖµ×¢È룩¡¢¹¹ÔìÆ÷×¢ÈëºÍ½Ó¿Ú×¢ÈëÈýÖÖ·½Ê½À´ÊµÏÖ£¬SpringÖ§³Ösetter×¢ÈëºÍ¹¹ÔìÆ÷×¢È룬ͨ³£Ê¹Óù¹ÔìÆ÷×¢ÈëÀ´×¢Èë±ØÐëµÄÒÀÀµ¹ØÏµ£¬¶ÔÓÚ¿ÉÑ¡µÄÒÀÀµ¹ØÏµ£¬Ôòsetter×¢ÈëÊǸüºÃµÄÑ¡Ôñ£¬setter×¢ÈëÐèÒªÀàÌṩÎ޲ι¹ÔìÆ÷»òÕßÎ޲εľ²Ì¬¹¤³§·½·¨À´´´½¨¶ÔÏó¡£
´ð£ºÔÚSpringµÄÔçÆÚ°æ±¾ÖУ¬½öÓÐÁ½¸ö×÷ÓÃÓò£ºsingletonºÍprototype£¬Ç°Õß±íʾBeanÒÔµ¥ÀýµÄ·½Ê½´æÔÚ£»ºóÕß±íʾÿ´Î´ÓÈÝÆ÷Öе÷ÓÃBeanʱ£¬¶¼»á·µ»ØÒ»¸öеÄʵÀý£¬prototypeͨ³£·ÒëΪÔÐÍ¡£
²¹³ä£ºÉè¼ÆÄ£Ê½ÖеĴ´½¨ÐÍģʽÖÐÒ²ÓÐÒ»¸öÔÐÍģʽ£¬ÔÐÍģʽҲÊÇÒ»¸ö³£ÓõÄģʽ£¬ÀýÈç×öÒ»¸öÊÒÄÚÉè¼ÆÈí¼þ£¬ËùÓеÄËØ²Ä¶¼ÔÚ¹¤¾ßÏäÖУ¬¶øÃ¿´Î´Ó¹¤¾ßÏäÖÐÈ¡³öµÄ¶¼ÊÇËØ²Ä¶ÔÏóµÄÒ»¸öÔÐÍ£¬¿ÉÒÔͨ¹ý¶ÔÏó¿Ë¡À´ÊµÏÖÔÐÍģʽ¡£
Spring 2.xÖÐÕë¶ÔWebApplicationContextÐÂÔöÁË3¸ö×÷ÓÃÓò£¬·Ö±ðÊÇ£ºrequest£¨Ã¿´ÎHTTPÇëÇ󶼻ᴴ½¨Ò»¸öеÄBean£©¡¢session£¨Í¬Ò»¸öHttpSession¹²Ïíͬһ¸öBean£¬²»Í¬µÄHttpSessionʹÓò»Í¬µÄBean£©ºÍglobalSession£¨Í¬Ò»¸öÈ«¾ÖSession¹²ÏíÒ»¸öBean£©¡£
˵Ã÷£ºµ¥ÀýģʽºÍÔÐÍģʽ¶¼ÊÇÖØÒªµÄÉè¼ÆÄ£Ê½¡£Ò»°ãÇé¿öÏ£¬ÎÞ״̬»ò״̬²»¿É±äµÄÀàÊʺÏʹÓõ¥Àýģʽ¡£ÔÚ´«Í³¿ª·¢ÖУ¬ÓÉÓÚDAO³ÖÓÐConnectionÕâ¸ö·ÇḬ̈߳²È«¶ÔÏóÒò¶øÃ»ÓÐʹÓõ¥Àýģʽ£»µ«ÔÚSpring»·¾³Ï£¬ËùÓÐDAOÀà¶Ô¿ÉÒÔ²ÉÓõ¥Àýģʽ£¬ÒòΪSpringÀûÓÃAOPºÍjava APIÖеÄThreadLocal¶Ô·ÇḬ̈߳²È«µÄ¶ÔÏó½øÐÐÁËÌØÊâ´¦Àí¡£
ThreadLocalΪ½â¾ö¶àÏ̳߳ÌÐòµÄ²¢·¢ÎÊÌâÌṩÁËÒ»ÖÖеÄ˼·¡£ThreadLocal£¬¹ËÃû˼ÒåÊÇÏ̵߳ÄÒ»¸ö±¾µØ»¯¶ÔÏ󣬵±¹¤×÷ÓÚ¶àÏß³ÌÖеĶÔÏóʹÓÃThreadLocalά»¤±äÁ¿Ê±£¬ThreadLocalΪÿ¸öʹÓøñäÁ¿µÄÏ̷߳ÖÅäÒ»¸ö¶ÀÁ¢µÄ±äÁ¿¸±±¾£¬ËùÒÔÿһ¸öÏ̶߳¼¿ÉÒÔ¶ÀÁ¢µÄ¸Ä±ä×Ô¼ºµÄ¸±±¾£¬¶ø²»Ó°ÏìÆäËûÏß³ÌËù¶ÔÓ¦µÄ¸±±¾¡£´ÓÏ̵߳ĽǶȿ´£¬Õâ¸ö±äÁ¿¾ÍÏñÊÇÏ̵߳ı¾µØ±äÁ¿¡£
ThreadLocalÀà·Ç³£¼òµ¥ºÃÓã¬Ö»ÓÐËĸö·½·¨£¬ÄÜÓÃÉϵÄÒ²¾ÍÊÇÏÂÃæÈý¸ö·½·¨£º
- void set(T value)£ºÉèÖõ±Ç°Ï̵߳ÄÏֲ߳̾¿±äÁ¿µÄÖµ¡£
- T get()£º»ñµÃµ±Ç°Ïß³ÌËù¶ÔÓ¦µÄÏֲ߳̾¿±äÁ¿µÄÖµ¡£
- void remove()£ºÉ¾³ýµ±Ç°Ïß³ÌÖÐÏֲ߳̾¿±äÁ¿µÄÖµ¡£
ThreadLocalÊÇÈçºÎ×öµ½ÎªÃ¿Ò»¸öÏß³Ìά»¤Ò»·Ý¶ÀÁ¢µÄ±äÁ¿¸±±¾µÄÄØ£¿ÔÚThreadLocalÀàÖÐÓÐÒ»¸öMap£¬¼üΪÏ̶߳ÔÏó£¬ÖµÊÇÆäÏ̶߳ÔÓ¦µÄ±äÁ¿µÄ¸±±¾
´ð£ºAOP£¨Aspect-Oriented Programming£©Ö¸Ò»ÖÖ³ÌÐòÉè¼Æ·¶ÐÍ£¬¸Ã·¶ÐÍÒÔÒ»ÖÖ³ÆÎªÇÐÃæ£¨aspect£©µÄÓïÑÔ¹¹ÔìΪ»ù´¡£¬ÇÐÃæÊÇÒ»ÖÖеÄÄ£¿é»¯»úÖÆ£¬ÓÃÀ´ÃèÊö·ÖÉ¢ÔÚ¶ÔÏó¡¢Àà»ò·½·¨ÖеĺáÇйØ×¢µã£¨crosscutting concern£©¡£
´ð£º"ºáÇйØ×¢"ÊÇ»áÓ°Ïìµ½Õû¸öÓ¦ÓóÌÐòµÄ¹Ø×¢¹¦ÄÜ£¬Ëü¸úÕý³£µÄÒµÎñÂß¼ÊÇÕý½»µÄ£¬Ã»ÓбØÈ»µÄÁªÏµ£¬µ«ÊǼ¸ºõËùÓеÄÒµÎñÂß¼¶¼»áÉæ¼°µ½ÕâЩ¹Ø×¢¹¦ÄÜ¡£Í¨³££¬ÊÂÎñ¡¢ÈÕÖ¾¡¢°²È«ÐԵȹØ×¢¾ÍÊÇÓ¦ÓÃÖеĺáÇйØ×¢¹¦ÄÜ¡£
´ð£º
a. Á¬½Óµã£¨Joinpoint£©£º³ÌÐòÖ´ÐеÄij¸öÌØ¶¨Î»Öã¨È磺ij¸ö·½·¨µ÷ÓÃǰ¡¢µ÷Óú󣬷½·¨Å׳öÒì³£ºó£©¡£Ò»¸öÀà»òÒ»¶Î³ÌÐò´úÂëÓµÓÐһЩ¾ßÓб߽çÐÔÖʵÄÌØ¶¨µã£¬ÕâЩ´úÂëÖеÄÌØ¶¨µã¾ÍÊÇÁ¬½Óµã¡£Spring½öÖ§³Ö·½·¨µÄÁ¬½Óµã¡£
b. Çе㣨Pointcut£©£ºÈç¹ûÁ¬½ÓµãÏ൱ÓÚÊý¾ÝÖеļǼ£¬ÄÇôÇеãÏ൱ÓÚ²éѯÌõ¼þ£¬Ò»¸öÇеã¿ÉÒÔÆ¥Åä¶à¸öÁ¬½Óµã¡£Spring AOPµÄ¹æÔò½âÎöÒýÇæ¸ºÔð½âÎöÇеãËùÉ趨µÄ²éѯÌõ¼þ£¬ÕÒµ½¶ÔÓ¦µÄÁ¬½Óµã¡£
c. ÔöÇ¿£¨Advice£©£ºÔöÇ¿ÊÇÖ¯È뵽Ŀ±êÀàÁ¬½ÓµãÉϵÄÒ»¶Î³ÌÐò´úÂë¡£SpringÌṩµÄÔöÇ¿½Ó¿Ú¶¼ÊÇ´ø·½Î»ÃûµÄ£¬È磺BeforeAdvice¡¢AfterReturningAdvice¡¢ThrowsAdviceµÈ¡£ºÜ¶à×ÊÁÏÉϽ«ÔöÇ¿ÒëΪ¡°Í¨Öª¡±£¬ÕâÃ÷ÏÔÊǸö´Ê²»´ïÒâµÄ·Ò룬Èúܶà³ÌÐòÔ±À§»óÁËÐí¾Ã¡£
˵Ã÷£º AdviceÔÚ¹úÄڵĺܶàÊéÃæ×ÊÁÏÖж¼±»·Òë³É"֪ͨ"£¬µ«ÊǺÜÏÔÈ»Õâ¸ö·ÒëÎÞ·¨±í´ïÆä±¾ÖÊ£¬ÓÐÉÙÁ¿µÄ¶ÁÎïÉϽ«Õâ¸ö´Ê·ÒëΪ"ÔöÇ¿"£¬Õâ¸ö·ÒëÊǶÔAdvice½ÏΪ׼ȷµÄÚ¹ÊÍ£¬ÎÒÃÇͨ¹ýAOP½«ºáÇйØ×¢¹¦Äܼӵ½ÔÓеÄÒµÎñÂß¼ÉÏ£¬Õâ¾ÍÊǶÔÔÓÐÒµÎñÂß¼µÄÒ»ÖÖÔöÇ¿£¬ÕâÖÖÔöÇ¿¿ÉÒÔÊÇǰÖÃÔöÇ¿¡¢ºóÖÃÔöÇ¿¡¢·µ»ØºóÔöÇ¿¡¢Å×Ò쳣ʱÔöÇ¿ºÍ°üΧÐÍÔöÇ¿¡£
d. Òý½é£¨Introduction£©£ºÒý½éÊÇÒ»ÖÖÌØÊâµÄÔöÇ¿£¬ËüΪÀàÌí¼ÓһЩÊôÐԺͷ½·¨¡£ÕâÑù£¬¼´Ê¹Ò»¸öÒµÎñÀàÔ±¾Ã»ÓÐʵÏÖij¸ö½Ó¿Ú£¬Í¨¹ýÒý½é¹¦ÄÜ£¬¿ÉÒÔ¶¯Ì¬µÄδ¸ÃÒµÎñÀàÌí¼Ó½Ó¿ÚµÄʵÏÖÂß¼£¬ÈÃÒµÎñÀà³ÉΪÕâ¸ö½Ó¿ÚµÄʵÏÖÀà¡£
e. Ö¯È루Weaving£©£ºÖ¯ÈëÊǽ«ÔöÇ¿Ìí¼Óµ½Ä¿±êÀà¾ßÌåÁ¬½ÓµãÉϵĹý³Ì£¬AOPÓÐÈýÖÖÖ¯È뷽ʽ£º¢Ù±àÒëÆÚÖ¯È룺ÐèÒªÌØÊâµÄJava±àÒëÆÚ£¨ÀýÈçAspectJµÄajc£©£»¢Ú×°ÔØÆÚÖ¯È룺ҪÇóʹÓÃÌØÊâµÄÀà¼ÓÔØÆ÷£¬ÔÚ×°ÔØÀàµÄʱºò¶ÔÀà½øÐÐÔöÇ¿£»¢ÛÔËÐÐʱ֯È룺ÔÚÔËÐÐʱΪĿ±êÀàÉú³É´úÀíʵÏÖÔöÇ¿¡£Spring²ÉÓÃÁ˶¯Ì¬´úÀíµÄ·½Ê½ÊµÏÖÁËÔËÐÐʱ֯È룬¶øAspectJ²ÉÓÃÁ˱àÒëÆÚÖ¯ÈëºÍ×°ÔØÆÚÖ¯ÈëµÄ·½Ê½¡£
f. ÇÐÃæ£¨Aspect£©£ºÇÐÃæÊÇÓÉÇеãºÍÔöÇ¿£¨Òý½é£©×é³ÉµÄ£¬Ëü°üÀ¨Á˶ԺáÇйØ×¢¹¦Ä͍ܵÒ壬Ҳ°üÀ¨Á˶ÔÁ¬½ÓµãµÄ¶¨Òå¡£
²¹³ä£º´úÀíģʽÊÇGoFÌá³öµÄ23ÖÖÉè¼ÆÄ£Ê½ÖÐ×îΪ¾µäµÄģʽ֮һ£¬´úÀíģʽÊǶÔÏóµÄ½á¹¹Ä£Ê½£¬Ëü¸øÄ³Ò»¸ö¶ÔÏóÌṩһ¸ö´úÀí¶ÔÏ󣬲¢ÓÉ´úÀí¶ÔÏó¿ØÖƶÔÔ¶ÔÏóµÄÒýÓá£
¼òµ¥µÄ˵£¬´úÀí¶ÔÏó¿ÉÒÔÍê³É±ÈÔ¶ÔÏó¸ü¶àµÄÖ°Ô𣬵±ÐèҪΪԶÔÏóÌí¼ÓºáÇйØ×¢¹¦ÄÜʱ£¬¾Í¿ÉÒÔʹÓÃÔ¶ÔÏóµÄ´úÀí¶ÔÏó¡£
ÎÒÃÇÔÚ´ò¿ªOfficeϵÁеÄWordÎĵµÊ±£¬Èç¹ûÎĵµÖÐÓвåͼ£¬µ±Îĵµ¸Õ¼ÓÔØÊ±£¬ÎĵµÖеIJåͼ¶¼Ö»ÊÇÒ»¸öÐé¿òռλ·û£¬µÈÓû§ÕæÕý·µ½Ä³Ò³Òª²é¿´¸ÃͼƬʱ£¬²Å»áÕæÕý¼ÓÔØÕâÕÅͼ£¬ÕâÆäʵ¾ÍÊǶԴúÀíģʽµÄʹÓ㬴úÌæÕæÕýͼƬµÄÐé¿ò¾ÍÊÇÒ»¸öÐéÄâ´úÀí£»
HibernateµÄload·½·¨Ò²ÊÇ·µ»ØÒ»¸öÐéÄâ´úÀí¶ÔÏ󣬵ÈÓû§ÕæÕýÐèÒª·ÃÎʶÔÏóµÄÊôÐÔʱ£¬²ÅÏòÊý¾Ý¿â·¢³öSQLÓï¾ä»ñµÃÕæÊµ¶ÔÏó
´ð£º¿ÉÒÔ´ÓÒÔϼ¸¸ö·½Ãæ×÷´ð£º
·ÇÇÖÈëʽ£ºÖ§³Ö»ùÓÚPOJOµÄ±à³Ìģʽ£¬²»Ç¿ÖÆÐÔµÄÒªÇóʵÏÖSpring¿ò¼ÜÖеĽӿڻò¼Ì³ÐSpring¿ò¼ÜÖеÄÀà¡£
IoCÈÝÆ÷£ºIoCÈÝÆ÷°ïÖúÓ¦ÓóÌÐò¹ÜÀí¶ÔÏóÒÔ¼°¶ÔÏóÖ®¼äµÄÒÀÀµ¹ØÏµ£¬¶ÔÏóÖ®¼äµÄÒÀÀµ¹ØÏµÈç¹û·¢ÉúÁ˸ıäÖ»ÐèÒªÐÞ¸ÄÅäÖÃÎļþ¶ø²»ÊÇÐ޸ĴúÂ룬ÒòΪ´úÂëµÄÐ޸ĿÉÄÜÒâζ×ÅÏîÄ¿µÄÖØÐ¹¹½¨ºÍÍêÕûµÄ»Ø¹é²âÊÔ¡£
ÓÐÁËIoCÈÝÆ÷£¬³ÌÐòÔ±ÔÙÒ²²»ÐèÒª×Ô¼º±àд¹¤³§¡¢µ¥Àý£¬ÕâÒ»µãÌØ±ð·ûºÏSpringµÄ¾«Éñ"²»ÒªÖظ´µÄ·¢Ã÷ÂÖ×Ó"¡£
AOP£¨ÃæÏòÇÐÃæ±à³Ì£©£º½«ËùÓеĺáÇйØ×¢¹¦ÄÜ·â×°µ½ÇÐÃæ£¨aspect£©ÖУ¬Í¨¹ýÅäÖõķ½Ê½½«ºáÇйØ×¢¹¦Äܶ¯Ì¬Ìí¼Óµ½Ä¿±ê´úÂëÉÏ£¬½øÒ»²½ÊµÏÖÁËÒµÎñÂß¼ºÍϵͳ·þÎñÖ®¼äµÄ·ÖÀë¡£ÁíÒ»·½Ã棬ÓÐÁËAOP³ÌÐòÔ±¿ÉÒÔʡȥºÜ¶à×Ô¼ºÐ´´úÀíÀàµÄ¹¤×÷¡£
MVC£ºSpringµÄMVC¿ò¼ÜÊǷdz£ÓÅÐãµÄ£¬´Ó¸÷¸ö·½Ãæ¶¼¿ÉÒÔ˦Struts 2¼¸Ìõ½Ö£¬ÎªWeb±íʾ²ãÌṩÁ˸üºÃµÄ½â¾ö·½°¸¡£
ÊÂÎñ¹ÜÀí£ºSpringÒÔ¿í¹ãµÄÐØ»³½ÓÄɶàÖֳ־ò㼼Êõ£¬²¢ÇÒΪÆäÌṩÁËÉùÃ÷ʽµÄÊÂÎñ¹ÜÀí£¬ÔÚ²»ÐèÒªÈκÎÒ»ÐдúÂëµÄÇé¿öϾÍÄܹ»Íê³ÉÊÂÎñ¹ÜÀí¡£
ÆäËû£ºÑ¡ÔñSpring¿ò¼ÜµÄÔÒò»¹Ô¶²»Ö¹ÓÚ´Ë£¬SpringΪJavaÆóÒµ¼¶¿ª·¢ÌṩÁËһվʽѡÔñ£¬Äã¿ÉÒÔÔÚÐèÒªµÄʱºòʹÓÃËüµÄ²¿·ÖºÍÈ«²¿£¬¸üÖØÒªµÄÊÇ£¬ÄãÉõÖÁ¿ÉÒÔÔڸоõ²»µ½Spring´æÔÚµÄÇé¿öÏ£¬ÔÚÄãµÄÏîÄ¿ÖÐʹÓÃSpringÌṩµÄ¸÷ÖÖÓÅÐãµÄ¹¦ÄÜ¡£
´ð£º
¢Ù Spring IoCÈÝÆ÷ÕÒµ½¹ØÓÚBeanµÄ¶¨Ò岢ʵÀý»¯¸ÃBean¡£
¢Ú Spring IoCÈÝÆ÷¶ÔBean½øÐÐÒÀÀµ×¢Èë¡£
¢Û Èç¹ûBeanʵÏÖÁËBeanNameAware½Ó¿Ú£¬Ôò½«¸ÃBeanµÄid´«¸øsetBeanName·½·¨¡£
¢Ü Èç¹ûBeanʵÏÖÁËBeanFactoryAware½Ó¿Ú£¬Ôò½«BeanFactory¶ÔÏ󴫸øsetBeanFactory·½·¨¡£
¢Ý Èç¹ûBeanʵÏÖÁËBeanPostProcessor½Ó¿Ú£¬Ôòµ÷ÓÃÆäpostProcessBeforeInitialization·½·¨¡£
¢Þ Èç¹ûBeanʵÏÖÁËInitializingBean½Ó¿Ú£¬Ôòµ÷ÓÃÆäafterPropertySet·½·¨¡£
¢ß Èç¹ûÓкÍBean¹ØÁªµÄBeanPostProcessors¶ÔÏó£¬ÔòÕâЩ¶ÔÏóµÄpostProcessAfterInitialization·½·¨±»µ÷Óá£
¢à µ±Ïú»ÙBeanʵÀýʱ£¬Èç¹ûBeanʵÏÖÁËDisposableBean½Ó¿Ú£¬Ôòµ÷ÓÃÆädestroy·½·¨¡£
´ð£º
·Ö²ã£º·Ö²ãÊÇ´¦ÀíÈκθ´ÔÓϵͳ×î³£¼ûµÄÊÖ¶ÎÖ®Ò»£¬½«ÏµÍ³ºáÏòÇзֳÉÈô¸É¸ö²ãÃæ£¬Ã¿¸ö²ãÃæÖ»³Ðµ£µ¥Ò»µÄÖ°Ôð£¬È»ºóͨ¹ýϲãΪÉϲãÌṩµÄ»ù´¡ÉèÊ©ºÍ·þÎñÒÔ¼°Éϲã¶ÔϲãµÄµ÷ÓÃÀ´ÐγÉÒ»¸öÍêÕûµÄ¸´ÔÓµÄϵͳ¡£
¼ÆËã»úÍøÂçµÄ¿ª·Åϵͳ»¥Áª²Î¿¼Ä£ÐÍ£¨OSI/RM£©ºÍInternetµÄTCP/IPÄ£ÐͶ¼ÊÇ·Ö²ã½á¹¹£¬´óÐÍÍøÕ¾µÄÈí¼þϵͳҲ¿ÉÒÔʹÓ÷ֲãµÄÀíÄÆä·ÖΪ³Ö¾Ã²ã£¨ÌṩÊý¾Ý´æ´¢ºÍ·ÃÎÊ·þÎñ£©¡¢ÒµÎñ²ã£¨´¦ÀíÒµÎñÂß¼£¬ÏµÍ³ÖÐ×îºËÐĵIJ¿·Ö£©ºÍ±íʾ²ã£¨ÏµÍ³½»»¥¡¢ÊÓͼչʾ£©¡£
ÐèÒªÖ¸³öµÄÊÇ£º£¨1£©·Ö²ãÊÇÂß¼ÉϵĻ®·Ö£¬ÔÚÎïÀíÉÏ¿ÉÒÔλÓÚͬһÉ豸ÉÏÒ²¿ÉÒÔÔÚ²»Í¬µÄÉ豸Éϲ¿Êð²»Í¬µÄ¹¦ÄÜÄ£¿é£¬ÕâÑù¿ÉÒÔʹÓøü¶àµÄ¼ÆËã×ÊÔ´À´Ó¦¶ÔÓû§µÄ²¢·¢·ÃÎÊ£»£¨2£©²ãÓë²ãÖ®¼äÓ¦µ±ÓÐÇåÎúµÄ±ß½ç£¬ÕâÑù·Ö²ã²ÅÓÐÒâÒ壬²Å¸üÀûÓÚÈí¼þµÄ¿ª·¢ºÍά»¤¡£
·Ö¸î£º·Ö¸îÊǶÔÈí¼þµÄ×ÝÏòÇз֡£ÎÒÃÇ¿ÉÒÔ½«´óÐÍÍøÕ¾µÄ²»Í¬¹¦ÄܺͷþÎñ·Ö¸î¿ª£¬ÐγɸßÄÚ¾ÛµÍñîºÏµÄ¹¦ÄÜÄ£¿é£¨µ¥Ôª£©
¡£ÔÚÉè¼Æ³õÆÚ¿ÉÒÔ×öÒ»¸ö´ÖÁ£¶ÈµÄ·Ö¸î£¬½«ÍøÕ¾·Ö¸îΪÈô¸É¸ö¹¦ÄÜÄ£¿é£¬ºóÆÚ»¹¿ÉÒÔ½øÒ»²½¶Ôÿ¸öÄ£¿é½øÐÐϸÁ£¶ÈµÄ·Ö¸î£¬ÕâÑùÒ»·½ÃæÓÐÖúÓÚÈí¼þµÄ¿ª·¢ºÍά»¤£¬ÁíÒ»·½ÃæÓÐÖúÓÚ·Ö²¼Ê½µÄ²¿Êð£¬Ìá¹©ÍøÕ¾µÄ²¢·¢´¦ÀíÄÜÁ¦ºÍ¹¦ÄܵÄÀ©Õ¹¡£
·Ö²¼Ê½£º³ýÁËÉÏÃæÌáµ½µÄÄÚÈÝ£¬ÍøÕ¾µÄ¾²Ì¬×ÊÔ´£¨JavaScript¡¢CSS¡¢Í¼Æ¬µÈ£©Ò²¿ÉÒÔ²ÉÓöÀÁ¢·Ö²¼Ê½²¿Êð²¢²ÉÓöÀÁ¢µÄÓòÃû£¬ÕâÑù¿ÉÒÔ¼õÇáÓ¦Ó÷þÎñÆ÷µÄ¸ºÔØÑ¹Á¦£¬Ò²Ê¹µÃä¯ÀÀÆ÷¶Ô×ÊÔ´µÄ¼ÓÔØ¸ü¿ì¡£
Êý¾ÝµÄ´æÈ¡Ò²Ó¦¸ÃÊÇ·Ö²¼Ê½µÄ£¬´«Í³µÄÉÌÒµ¼¶¹ØÏµÐÍÊý¾Ý¿â²úÆ·»ù±¾É϶¼Ö§³Ö·Ö²¼Ê½²¿Ê𣬶øÐÂÉúµÄNoSQL²úÆ·¼¸ºõ¶¼ÊÇ·Ö²¼Ê½µÄ¡£µ±È»£¬ÍøÕ¾ºǫ́µÄÒµÎñ´¦ÀíҲҪʹÓ÷ֲ¼Ê½¼¼Êõ£¬ÀýÈç²éѯË÷ÒýµÄ¹¹½¨¡¢Êý¾Ý·ÖÎöµÈ£¬ÕâЩҵÎñ¼ÆËã¹æÄ£ÅӴ󣬿ÉÒÔʹÓÃHadoopÒÔ¼°MapReduce·Ö²¼Ê½¼ÆËã¿ò¼ÜÀ´´¦Àí¡£
¼¯Èº£º¼¯ÈºÊ¹µÃÓиü¶àµÄ·þÎñÆ÷ÌṩÏàͬµÄ·þÎñ£¬¿ÉÒÔ¸üºÃµÄÌṩ¶Ô²¢·¢µÄÖ§³Ö¡£
»º´æ£ºËùν»º´æ¾ÍÊÇÓÿռ任ȡʱ¼äµÄ¼¼Êõ£¬½«Êý¾Ý¾¡¿ÉÄÜ·ÅÔÚ¾àÀë¼ÆËã×î½üµÄλÖá£Ê¹Óûº´æÊÇÍøÕ¾ÓÅ»¯µÄµÚÒ»¶¨ÂÉ¡£ÎÒÃÇͨ³£ËµµÄCDN¡¢·´Ïò´úÀí¡¢ÈȵãÊý¾Ý¶¼ÊǶԻº´æ¼¼ÊõµÄʹÓá£
Òì²½£ºÒì²½ÊÇʵÏÖÈí¼þʵÌåÖ®¼ä½âñîºÏµÄÓÖÒ»ÖØÒªÊֶΡ£Òì²½¼Ü¹¹ÊǵäÐ͵ÄÉú²úÕßÏû·ÑÕßģʽ£¬¶þÕßÖ®¼äûÓÐÖ±½ÓµÄµ÷ÓùØÏµ£¬Ö»Òª±£³ÖÊý¾Ý½á¹¹²»±ä£¬±Ë´Ë¹¦ÄÜʵÏÖ¿ÉÒÔËæÒâ±ä»¯¶ø²»»¥ÏàÓ°Ï죬Õâ¶ÔÍøÕ¾µÄÀ©Õ¹·Ç³£ÓÐÀû¡£
ʹÓÃÒì²½´¦Àí»¹¿ÉÒÔÌá¸ßϵͳ¿ÉÓÃÐÔ£¬¼Ó¿ìÍøÕ¾µÄÏìÓ¦ËÙ¶È£¨ÓÃAjax¼ÓÔØÊý¾Ý¾ÍÊÇÒ»ÖÖÒì²½¼¼Êõ£©£¬Í¬Ê±»¹¿ÉÒÔÆðµ½Ï÷·å×÷Óã¨Ó¦¶Ô˲ʱ¸ß²¢·¢£©¡£"£»ÄÜÍÆ³Ù´¦ÀíµÄ¶¼ÒªÍƳٴ¦Àí"ÊÇÍøÕ¾ÓÅ»¯µÄµÚ¶þ¶¨ÂÉ£¬¶øÒì²½ÊǼùÐÐÍøÕ¾ÓÅ»¯µÚ¶þ¶¨ÂɵÄÖØÒªÊֶΡ£
ÈßÓࣺ¸÷ÖÖ·þÎñÆ÷¶¼ÒªÌṩÏàÓ¦µÄÈßÓà·þÎñÆ÷ÒÔ±ãÔÚij̨»òijЩ·þÎñÆ÷å´»úʱ»¹Äܱ£Ö¤ÍøÕ¾¿ÉÒÔÕý³£¹¤×÷£¬Í¬Ê±Ò²ÌṩÁËÔÖÄѻָ´µÄ¿ÉÄÜÐÔ¡£ÈßÓàÊÇÍøÕ¾¸ß¿ÉÓÃÐÔµÄÖØÒª±£Ö¤¡£
´ð£º
¢Ù ä¯ÀÀÆ÷·ÃÎÊÓÅ»¯£º
- ¼õÉÙHTTPÇëÇóÊýÁ¿£ººÏ²¢CSS¡¢ºÏ²¢javascript¡¢ºÏ²¢Í¼Æ¬£¨CSS Sprite£©
- ʹÓÃä¯ÀÀÆ÷»º´æ£ºÍ¨¹ýÉèÖÃHTTPÏìӦͷÖеÄCache-ControlºÍExpiresÊôÐÔ£¬½«CSS¡¢JavaScript¡¢Í¼Æ¬µÈÔÚä¯ÀÀÆ÷Öлº´æ£¬µ±ÕâЩ¾²Ì¬×ÊÔ´ÐèÒª¸üÐÂʱ£¬¿ÉÒÔ¸üÐÂHTMLÎļþÖеÄÒýÓÃÀ´ÈÃä¯ÀÀÆ÷ÖØÐÂÇëÇóеÄ×ÊÔ´
- ÆôÓÃѹËõ
- CSSǰÖã¬JavaScriptºóÖÃ
- ¼õÉÙCookie´«Êä
¢Ú CDN¼ÓËÙ£ºCDN£¨Content Distribute Network£©µÄ±¾ÖÊÈÔÈ»ÊÇ»º´æ£¬½«Êý¾Ý»º´æÔÚÀëÓû§×î½üµÄµØ·½£¬CDNͨ³£²¿ÊðÔÚÍøÂçÔËÓªÉ̵Ļú·¿£¬²»½ö¿ÉÒÔÌáÉýÏìÓ¦ËÙ¶È£¬»¹¿ÉÒÔ¼õÉÙÓ¦Ó÷þÎñÆ÷µÄѹÁ¦¡£µ±È»£¬CDN»º´æµÄͨ³£¶¼ÊǾ²Ì¬×ÊÔ´¡£
¢Û ·´Ïò´úÀí£º·´Ïò´úÀíÏ൱ÓÚÓ¦Ó÷þÎñÆ÷µÄÒ»¸öÃÅÃæ£¬¿ÉÒÔ±£»¤ÍøÕ¾µÄ°²È«ÐÔ£¬Ò²¿ÉÒÔʵÏÖ¸ºÔؾùºâµÄ¹¦ÄÜ£¬µ±È»×îÖØÒªµÄÊÇËü»º´æÁËÓû§·ÃÎʵÄÈȵã×ÊÔ´£¬¿ÉÒÔÖ±½Ó´Ó·´Ïò´úÀí½«Ä³Ð©ÄÚÈÝ·µ»Ø¸øÓû§ä¯ÀÀÆ÷¡£
´ð£º ¢Ù ·Ö²¼Ê½»º´æ£º»º´æµÄ±¾ÖʾÍÊÇÄÚ´æÖеĹþÏ£±í£¬Èç¹ûÉè¼ÆÒ»¸öÓÅÖʵĹþÏ£º¯Êý£¬ÄÇôÀíÂÛÉϹþÏ£±í¶ÁдµÄ½¥½üʱ¼ä¸´ÔÓ¶ÈΪO(1)¡£»º´æÖ÷ÒªÓÃÀ´´æ·ÅÄÇЩ¶Áд±ÈºÜ¸ß¡¢±ä»¯ºÜÉÙµÄÊý¾Ý£¬ÕâÑùÓ¦ÓóÌÐò¶ÁÈ¡Êý¾ÝʱÏȵ½»º´æÖжÁÈ¡£¬Èç¹ûûÓлòÕßÊý¾ÝÒѾʧЧÔÙÈ¥·ÃÎÊÊý¾Ý¿â»òÎļþϵͳ£¬²¢¸ù¾ÝÄⶨµÄ¹æÔò½«Êý¾ÝдÈ뻺´æ¡£ ¶ÔÍøÕ¾Êý¾ÝµÄ·ÃÎÊÒ²·ûºÏ¶þ°Ë¶¨ÂÉ£¨Pareto·Ö²¼£¬ÃÝÂÉ·Ö²¼£©£¬¼´80%µÄ·ÃÎʶ¼¼¯ÖÐÔÚ20%µÄÊý¾ÝÉÏ£¬Èç¹ûÄܹ»½«Õâ20%µÄÊý¾Ý»º´æÆðÀ´£¬ÄÇôϵͳµÄÐÔÄܽ«µÃµ½ÏÔÖøµÄ¸ÄÉÆ¡£µ±È»£¬Ê¹Óûº´æÐèÒª½â¾öÒÔϼ¸¸öÎÊÌ⣺ - Ƶ·±Ð޸ĵÄÊý¾Ý£» - Êý¾Ý²»Ò»ÖÂÓëÔà¶Á£» - »º´æÑ©±À£¨¿ÉÒÔ²ÉÓ÷ֲ¼Ê½»º´æ·þÎñÆ÷¼¯Èº¼ÓÒÔ½â¾ö£¬memcachedÊǹ㷺²ÉÓõĽâ¾ö·½°¸£©£» - »º´æÔ¤ÈÈ£» - »º´æ´©Í¸£¨¶ñÒâ³ÖÐøÇëÇó²»´æÔÚµÄÊý¾Ý£©¡£ ¢Ú Òì²½²Ù×÷£º¿ÉÒÔʹÓÃÏûÏ¢¶ÓÁн«µ÷ÓÃÒì²½»¯£¬Í¨¹ýÒì²½´¦Àí½«¶Ìʱ¼ä¸ß²¢·¢²úÉúµÄʼþÏûÏ¢´æ´¢ÔÚÏûÏ¢¶ÓÁÐÖУ¬´Ó¶øÆðµ½Ï÷·å×÷ÓᣵçÉÌÍøÕ¾ÔÚ½øÐдÙÏú»î¶¯Ê±£¬¿ÉÒÔ½«Óû§µÄ¶©µ¥ÇëÇó´æÈëÏûÏ¢¶ÓÁУ¬ÕâÑù¿ÉÒÔµÖÓù´óÁ¿µÄ²¢·¢¶©µ¥ÇëÇó¶ÔϵͳºÍÊý¾Ý¿âµÄ³å»÷¡£Ä¿Ç°£¬¾ø´ó¶àÊýµÄµçÉÌÍøÕ¾¼´±ã²»½øÐдÙÏú»î¶¯£¬¶©µ¥ÏµÍ³¶¼²ÉÓÃÁËÏûÏ¢¶ÓÁÐÀ´´¦Àí¡£ ¢Û ʹÓü¯Èº¡£ ¢Ü ´úÂëÓÅ»¯£º - ¶àỊ̈߳º»ùÓÚJavaµÄWeb¿ª·¢»ù±¾É϶¼Í¨¹ý¶àÏ̵߳ķ½Ê½ÏìÓ¦Óû§µÄ²¢·¢ÇëÇó£¬Ê¹ÓöàÏ̼߳¼ÊõÔÚ±à³ÌÉÏÒª½â¾öḬ̈߳²È«ÎÊÌ⣬Ö÷Òª¿ÉÒÔ¿¼ÂÇÒÔϼ¸¸ö·½Ã棺 A. ½«¶ÔÏóÉè¼ÆÎªÎÞ״̬¶ÔÏó£¨ÕâºÍÃæÏò¶ÔÏóµÄ±à³Ì¹ÛµãÊÇì¶ÜµÄ£¬ÔÚÃæÏò¶ÔÏóµÄÊÀ½çÖб»ÊÓΪ²»Á¼Éè¼Æ£©£¬ÕâÑù¾Í²»»á´æÔÚ²¢·¢·ÃÎÊʱ¶ÔÏó״̬²»Ò»ÖµÄÎÊÌâ¡£ B. ÔÚ·½·¨ÄÚ²¿´´½¨¶ÔÏó£¬ÕâÑù¶ÔÏóÓɽøÈë·½·¨µÄÏ̴߳´½¨£¬²»»á³öÏÖ¶à¸öÏ̷߳ÃÎÊͬһ¶ÔÏóµÄÎÊÌ⡣ʹÓÃThreadLocal½«¶ÔÏóÓëḬ̈߳ó¶¨Ò²ÊǺܺõÄ×ö·¨£¬ÕâÒ»µãÔÚÇ°ÃæÒѾ̽ÌÖ¹ýÁË¡£C. ¶Ô×ÊÔ´½øÐв¢·¢·ÃÎÊʱӦµ±Ê¹ÓúÏÀíµÄËø»úÖÆ¡£ - ·Ç×èÈûI/O£º ʹÓõ¥Ï̺߳ͷÇ×èÈûI/OÊÇĿǰ¹«ÈϵıȶàÏ̵߳ķ½Ê½¸üÄܳä·Ö·¢»Ó·þÎñÆ÷ÐÔÄܵÄÓ¦ÓÃģʽ£¬»ùÓÚNode.js¹¹½¨µÄ·þÎñÆ÷¾Í²ÉÓÃÁËÕâÑùµÄ·½Ê½¡£JavaÔÚJDK 1.4ÖоÍÒýÈëÁËNIO£¨Non-blocking I/O£©,ÔÚServlet 3¹æ·¶ÖÐÓÖÒýÈëÁËÒì²½ServletµÄ¸ÅÄÕâЩ¶¼ÎªÔÚ·þÎñÆ÷¶Ë²ÉÓ÷Ç×èÈûI/OÌṩÁ˱ØÒªµÄ»ù´¡¡£ - ×ÊÔ´¸´Óãº×ÊÔ´¸´ÓÃÖ÷ÒªÓÐÁ½ÖÖ·½Ê½£¬Ò»Êǵ¥Àý£¬¶þÊǶÔÏ󳨣¬ÎÒÃÇʹÓõÄÊý¾Ý¿âÁ¬½Ó³Ø¡¢Ï̳߳ض¼ÊǶÔÏ󳨻¯¼¼Êõ£¬ÕâÊǵäÐ͵ÄÓÿռ任ȡʱ¼äµÄ²ßÂÔ£¬ÁíÒ»·½ÃæÒ²ÊµÏÖ¶Ô×ÊÔ´µÄ¸´Ó㬴Ӷø±ÜÃâÁ˲»±ØÒªµÄ´´½¨ºÍÊÍ·Å×ÊÔ´Ëù´øÀ´µÄ¿ªÏú¡£
´ð£º
XSS£¨Cross Site Script£¬¿çÕ¾½Å±¾¹¥»÷£©ÊÇÏòÍøÒ³ÖÐ×¢Èë¶ñÒâ½Å±¾ÔÚÓû§ä¯ÀÀÍøÒ³Ê±ÔÚÓû§ä¯ÀÀÆ÷ÖÐÖ´ÐжñÒâ½Å±¾µÄ¹¥»÷·½Ê½¡£
¿çÕ¾½Å±¾¹¥»÷·ÖÓÐÁ½ÖÖÐÎʽ£º·´ÉäÐ͹¥»÷£¨ÓÕʹÓû§µã»÷Ò»¸öǶÈë¶ñÒâ½Å±¾µÄÁ´½ÓÒÔ´ïµ½¹¥»÷µÄÄ¿±ê£¬Ä¿Ç°Óкܶ๥»÷ÕßÀûÓÃÂÛ̳¡¢Î¢²©·¢²¼º¬ÓжñÒâ½Å±¾µÄURL¾ÍÊôÓÚÕâÖÖ·½Ê½£©ºÍ³Ö¾ÃÐ͹¥»÷£¨½«¶ñÒâ½Å±¾Ìá½»µ½±»¹¥»÷ÍøÕ¾µÄÊý¾Ý¿âÖУ¬Óû§ä¯ÀÀÍøÒ³Ê±£¬¶ñÒâ½Å±¾´ÓÊý¾Ý¿âÖб»¼ÓÔØµ½Ò³ÃæÖ´ÐУ¬
QQÓÊÏäµÄÔçÆÚ°æ±¾¾ÍÔø¾±»ÀûÓÃ×÷Ϊ³Ö¾ÃÐÍ¿çÕ¾½Å±¾¹¥»÷µÄƽ̨£©¡£XSSËäÈ»²»ÊÇʲôÐÂÏÊÍæÒ⣬µ«Êǹ¥»÷µÄÊÖ·¨È´²»¶Ï·Ð£¬·À·¶XSSÖ÷ÒªÓÐÁ½·½Ã棺Ïû¶¾£¨¶ÔΣÏÕ×Ö·û½øÐÐתÒ壩ºÍHttpOnly£¨·À·¶XSS¹¥»÷ÕßÇÔÈ¡CookieÊý¾Ý£©¡£
SQL×¢Èë¹¥»÷ÊÇ×¢Èë¹¥»÷×î³£¼ûµÄÐÎʽ£¨´ËÍ⻹ÓÐOS×¢Èë¹¥»÷£¨Struts 2µÄ¸ßΣ©¶´¾ÍÊÇͨ¹ýOGNLʵʩOS×¢Èë¹¥»÷µ¼Öµģ©£©£¬µ±·þÎñÆ÷ʹÓÃÇëÇó²ÎÊý¹¹ÔìSQLÓï¾äʱ£¬¶ñÒâµÄSQL±»Ç¶Èëµ½SQLÖн»¸øÊý¾Ý¿âÖ´ÐС£
SQL×¢Èë¹¥»÷ÐèÒª¹¥»÷Õß¶ÔÊý¾Ý¿â½á¹¹ÓÐËùÁ˽â²ÅÄܽøÐУ¬¹¥»÷ÕßÏëÒª»ñµÃ±í½á¹¹ÓжàÖÖ·½Ê½£º
£¨1£©Èç¹ûʹÓÿªÔ´ÏµÍ³´î½¨ÍøÕ¾£¬Êý¾Ý¿â½á¹¹Ò²Êǹ«¿ªµÄ£¨Ä¿Ç°ÓкܶàÏֳɵÄϵͳ¿ÉÒÔÖ±½Ó´î½¨ÂÛ̳£¬µçÉÌÍøÕ¾£¬ËäÈ»·½±ã¿ì½Ýµ«ÊÇ·çÏÕÊDZØÐëÒªÈÏÕæÆÀ¹ÀµÄ£©£»
£¨2£©´íÎó»ØÏÔ£¨Èç¹û½«·þÎñÆ÷µÄ´íÎóÐÅÏ¢Ö±½ÓÏÔʾÔÚÒ³ÃæÉÏ£¬¹¥»÷Õß¿ÉÒÔͨ¹ý·Ç·¨²ÎÊýÒý·¢Ò³Ãæ´íÎó´Ó¶øÍ¨¹ý´íÎóÐÅÏ¢Á˽âÊý¾Ý¿â½á¹¹£¬WebÓ¦ÓÃÓ¦µ±ÉèÖÃÓѺõĴíÎóÒ³£¬Ò»·½Ãæ·ûºÏ×îС¾ªÑÈÔÔò£¬Ò»·½ÃæÆÁ±Îµô¿ÉÄܸøÏµÍ³´øÀ´Î£ÏյĴíÎó»ØÏÔÐÅÏ¢£©£»
£¨3£©Ã¤×¢¡£·À·¶SQL×¢Èë¹¥»÷Ò²¿ÉÒÔ²ÉÓÃÏû¶¾µÄ·½Ê½£¬Í¨¹ýÕýÔò±í´ïʽ¶ÔÇëÇó²ÎÊý½øÐÐÑéÖ¤£¬´ËÍ⣬²ÎÊý°ó¶¨Ò²ÊǺܺõÄÊֶΣ¬ÕâÑù¶ñÒâµÄSQL»á±»µ±×öSQLµÄ²ÎÊý¶ø²»ÊÇÃüÁî±»Ö´ÐУ¬JDBCÖеÄPreparedStatement¾ÍÊÇÖ§³Ö²ÎÊý°ó¶¨µÄÓï¾ä¶ÔÏ󣬴ÓÐÔÄܺͰ²È«ÐÔÉ϶¼Ã÷ÏÔÓÅÓÚStatement¡£
CSRF¹¥»÷£¨Cross Site Request Forgery£¬¿çÕ¾ÇëÇóαÔ죩Êǹ¥»÷Õßͨ¹ý¿çÕ¾ÇëÇó£¬ÒԺϷ¨µÄÓû§Éí·Ý½øÐзǷ¨²Ù×÷£¨ÈçתÕË»ò·¢ÌûµÈ£©¡£CSRFµÄÔÀíÊÇÀûÓÃä¯ÀÀÆ÷µÄCookie»ò·þÎñÆ÷µÄSession£¬µÁÈ¡Óû§Éí·Ý£¬ÆäÔÀíÈçÏÂͼËùʾ¡£
·À·¶CSRFµÄÖ÷ÒªÊÖ¶ÎÊÇʶ±ðÇëÇóÕßµÄÉí·Ý£¬Ö÷ÒªÓÐÒÔϼ¸ÖÖ·½Ê½£º
£¨1£©ÔÚ±íµ¥ÖÐÌí¼ÓÁîÅÆ£¨token£©£»
£¨2£©ÑéÖ¤Â룻
£¨3£©¼ì²éÇëÇóÍ·ÖеÄReferer£¨Ç°ÃæÌáµ½·ÀͼƬµÁÁ´½ÓÒ²ÊÇÓõÄÕâÖÖ·½Ê½£©¡£
ÁîÅÆºÍÑéÖ¤¶¼¾ßÓÐÒ»´ÎÏû·ÑÐÔµÄÌØÕ÷£¬Òò´ËÔÚÔÀíÉÏÒ»Öµģ¬µ«ÊÇÑéÖ¤ÂëÊÇÒ»ÖÖÔã¸âµÄÓû§ÌåÑ飬²»ÊDZØÒªµÄÇé¿öϲ»ÒªÇáÒ×ʹÓÃÑéÖ¤Â룬ĿǰºÜ¶àÍøÕ¾µÄ×ö·¨ÊÇÈç¹ûÔÚ¶Ìʱ¼äÄÚ¶à´ÎÌá½»Ò»¸ö±íµ¥Î´»ñµÃ³É¹¦ºó²ÅÒªÇóÌṩÑéÖ¤Â룬ÕâÑù»á»ñµÃ½ÏºÃµÄÓû§ÌåÑé
´ð£ºÁìÓòÄ£ÐÍÊÇÁìÓòÄڵĸÅÄîÀà»òÏÖʵÊÀ½çÖжÔÏóµÄ¿ÉÊÓ»¯±íʾ£¬ÓÖ³ÆÎª¸ÅÄîÄ£ÐÍ»ò·ÖÎö¶ÔÏóÄ£ÐÍ£¬ËüרעÓÚ·ÖÎöÎÊÌâÁìÓò±¾Éí£¬·¢¾òÖØÒªµÄÒµÎñÁìÓò¸ÅÄ²¢½¨Á¢ÒµÎñÁìÓò¸ÅÄîÖ®¼äµÄ¹ØÏµ¡£Æ¶ÑªÄ£ÐÍÊÇָʹÓõÄÁìÓò¶ÔÏóÖÐÖ»ÓÐsetterºÍgetter·½·¨£¨POJO£©£¬ËùÓеÄÒµÎñÂß¼¶¼²»°üº¬ÔÚÁìÓò¶ÔÏóÖжøÊÇ·ÅÔÚÒµÎñÂß¼²ã¡£
ÓÐÈ˽«ÎÒÃÇÕâÀï˵µÄƶѪģÐͽøÒ»²½»®·Ö³ÉʧѪģÐÍ£¨ÁìÓò¶ÔÏóÍêȫûÓÐÒµÎñÂß¼£©ºÍƶѪģÐÍ£¨ÁìÓò¶ÔÏóÓÐÉÙÁ¿µÄÒµÎñÂß¼£©£¬ÎÒÃÇÕâÀï¾Í²»¶Ô´Ë¼ÓÒÔÇø·ÖÁË¡£
³äѪģÐͽ«´ó¶àÊýÒµÎñÂß¼ºÍ³Ö¾Ã»¯·ÅÔÚÁìÓò¶ÔÏóÖУ¬ÒµÎñÂß¼£¨ÒµÎñÃÅÃæ£©Ö»ÊÇÍê³É¶ÔÒµÎñÂß¼µÄ·â×°¡¢ÊÂÎñºÍȨÏ޵ȵĴ¦Àí¡£ÏÂÃæÁ½ÕÅͼ·Ö±ðչʾÁËÆ¶ÑªÄ£ÐͺͳäѪģÐ͵ķֲã¼Ü¹¹¡£
°æÈ¨ÉùÃ÷£º±¾ÎÄÄÚÈÝÓɰ¢ÀïÔÆÊµÃû×¢²áÓû§×Ô·¢¹±Ï×£¬°æÈ¨¹éÔ×÷ÕßËùÓУ¬°¢ÀïÔÆ¿ª·¢ÕßÉçÇø²»ÓµÓÐÆäÖø×÷Ȩ£¬Ò಻³Ðµ£ÏàÓ¦·¨ÂÉÔðÈΡ£¾ßÌ广ÔòÇë²é¿´¡¶°¢ÀïÔÆ¿ª·¢ÕßÉçÇøÓû§·þÎñÐÒé¡·ºÍ¡¶°¢ÀïÔÆ¿ª·¢ÕßÉçÇøÖªÊ¶²úȨ±£»¤Ö¸Òý¡·¡£Èç¹ûÄú·¢ÏÖ±¾ÉçÇøÖÐÓÐÉæÏӳϮµÄÄÚÈÝ£¬ÌîдÇÖȨͶËß±íµ¥½øÐоٱ¨£¬Ò»¾²éʵ£¬±¾ÉçÇø½«Á¢¿Ìɾ³ýÉæÏÓÇÖȨÄÚÈÝ¡£