個倓倠倅倩倛倹倝俷倇倣俷倢倉倆倩俱個値倄倕俷倝倒倸倢俷倱倌倸倗倰倊倢 倲倕俱倇倡倹俷倳倊倓倢倗俱倡倊倰俷倥倒倊倚倉値倇倕俷倳倉倎倓値倊倅倢 倰倛倕倧倝倰倎倥倒俷倰倚倥倒俷俴倓倢俷倛倦倸俷倶 俲倝俷倰俴倓倧倸倝俷個倓倡倊倝倢俱倢倘倇倥倸俱倣倕倡俷倇倣俷倢倉倰倇倸倢倉倡倹倉
倕倩倸俹倥 (Lu Qi) 倰倄値倉倕倢俱倰倇倹倢俱倕倡倊們倢倇倥倸倲倅债倠倇倣俷倢倉 俱倸倝倉俸倠倇値倹俷倅倡倗倕俷倉倡倸俷倊倉倰俱倹倢倝倥倹倛倉倡俷倊倨倉倗們倅倡倗倳倛俽倸 倰俲倢倒俱們倧倝倇倡倹俷倚倝俷俲倹倢俷俲倦倹倉倉倗倄俲們倡倊倝倒倸倢俷倱倓俷 倰倎倧倸倝俲倡倊倴倕倸倝倢俱倢倓個倗倄倛倡倗倅倦倊倶
俴倗倢們倰倛倉倧倸倝倒倕倹倢倝倒倸倢俷倱倚倉倚倢倛倡倚倆倢倲倆們倰俲倹倢倳倚倸倰俲倢倓倢倗俱倡倊俴倕倧倸倉倒倡俱候值倚倦倉倢們値 倰俲倢倱倕倠倕倩俱倇倥們倇倨倸們倰倇倇倡倹俷倱倓俷俱倢倒 倱倓俷倳俸 倱倕倠們倡倉倚們倝俷倇倡倹俷倛們倄倇倥倸們倥倳倛倹俱倡倊倲個倓倰俸俱倅值倉倥倹們倢俱倰俱値倉倴個倱倕倹倗... 們倢俱俸倉倰俱値倉俲倥倄俸倣俱倡倄俲倝俷們倉倨候倒值個俱倅値
倳倉倒倨俴個倥 2008 倉倥倹... 倝倢倃倢俸倡俱倓 Yahoo (倒倢倞倩) 俱倣倕倡俷倆倩俱倌倩倹倇倹倢俺値俷倛倉倹倢倳倛們倸倝倒倸倢俷 Google (俱倩倰俱値倕) 倊倥倊俴倡倹倉倝倒倸倢俷倛倉倡俱倛倉倸倗俷 倚倸倗倉倱倊倸俷俱倢倓倅倕倢倄 (Market Share) 俲倝俷倓倠倊倊倰倚値倓值俺倰倝倉俸値倉 (Search Engine) 倇倥倸倰俴倒倰個倷倉倰倊倝倓值倛倉倦倸俷 俱倣倕倡俷倆倩俱俱倡倄俱値倉倱倕倠倅俱倝倒倩倸倳倉倚倐倢倗倠倗値俱倔倅
俴倃倠俱倓倓們俱倢倓倊倓値倛倢倓 (Board of Directors) 倏倡倉倈俷倗倸倢 '倓倠倊倊倱倉倠倉倣俴倝倉倰倇倉倅值倱倊倊倓倩倹倳俸' (Personalized Recommendation System) 俴倧倝 ‘倚倨倄倒倝倄倝倢倗倨倈’ 倰倎倥倒俷俺値倹倉倰倄倥倒倗倇倥倸俸倠倚倢們倢倓倆倎倕値俱倚倆倢倉俱倢倓倃值倱倕倠俱倝倊俱倩倹倊倡倕倕倡俷俱值俲倝俷 Yahoo 俱倕倡倊俴倧倉們倢倴倄倹
倱倕倠倐倢倓倠倝倡倉倛倉倡俱倝倦倹俷倓倠倄倡倊俺倥倹倰個倷倉俺倥倹倅倢倒倊倓値候倡倇倉倥倹... 俱倷倅俱倕俷們倢倝倒倩倸倊倉倊倸倢俲倝俷倰俲倢倰倎倥倒俷倕倣倎倡俷!
倅倕倝倄倚倢們倰倄倧倝倉倇倥倸倌倸倢倉們倢 倕倩倸俹倥倱倕倠倇倥們倗値倘倗俱倓倓倠倄倡倊倛倡倗俱倠倇値倱倇倊俸倠俱値倉倉倝倉倱倕倠倳俺倹俺倥倗値倅倝倒倩倸倳倉倝倝倏倏値倘倱倛倸俷倉倥倹倱倇倉倊倹倢倉 倇倗倸倢... 俴倗倢們俴倧倊倛倉倹倢俲倝俷倲個倓倰俸俱倅值俱倕倡倊俴倧倊俴倕倢倉倴個倴倄倹倝倒倸倢俷倰俺倧倸倝俷俺倹倢倰倛倕倧倝倰俱値倉
倰俲倢倓倩倹倝倒倩倸倰倅倷們倝俱倗倸倢... 倱倉倗倇倢俷 ‘俱倢倓倰倓倥倒倉倓倩倹倱倊倊俴倸倝倒倰個倷倉俴倸倝倒倴個 (Incremental Learning)’ 倇倥倸倰俲倢倰倎値倸俷倲倒倉倰個倷倉倲俸倇倒值倳倛倹倕倩俱倇倥們倴個倰們倧倸倝俴倓倩倸倉倥倹... 們倡倉倰個倷倉倰倎倥倒俷倱俴倸 ‘俴倝倉倰俻個倅值倇倔候俾倥’ 倇倥倸倒倡俷俴倕倨們倰俴倓倧倝們倢俱倶
倚倸倗倉倗値倈倥俱倢倓倉倣倇倔候俾倥倉倥倹倴個 ‘倰俲倥倒倉倲俴倹倄倳俺倹俷倢倉俸倓値俷 (Implementation)’ 倱倕倠俸倠倰倝倢們倡倉倴個倚倗們倰俲倹倢俱倡倊 ‘倀倢倉俲倹倝們倩倕俲倉倢倄倒倡俱候值 (Big Data)’ 俲倝俷 Yahoo 倴倄倹倝倒倸倢俷倴倓倉倡倹倉... 倅倡倗倰俲倢倰倝俷俱倷倒倡俷倴們倸們倥俴倣倅倝倊倇倥倸俺倡倄倰俸倉倰倕倒倚倡俱倉値倄!
們倡倉倳倛倹俴倗倢們倓倩倹倚倦俱倰倛們倧倝倉倰俲倢俱倣倕倡俷倒倧倉倝倒倩倸俱倕倢俷個倸倢倄値倊俺倧倹倉倇倥倸們倧倄們値倄倴倓倹倱倚俷倚倗倸倢俷 倱倕倠倰俲倢倅倹倝俷倰個倷倉俴倉倆倧倝倅倠倰俱倥倒俷倉倣倇倢俷倕倩俱倇倥們倰倎倧倸倝俴倗倢倉倛倢 ‘倰倚倹倉倇倢俷倝倝俱’ 倇倥倸倴們倸倰俴倒們倥們倉倨候倒值俴倉倴倛倉倊倉倲倕俱倰俴倒倰倄値倉倌倸倢倉們倢俱倸倝倉
們倡倉倒倢俱倰俱値倉倴個...
倕倩倸俹倥倎倓倩倕們倛倢倒倳俸倒倢倗倰倛倒倥倒倄 倰俲倢倰倝倉倛倕倡俷倎値俷倎倉倡俱倰俱倹倢倝倥倹 倛倕倡倊倅倢倕俷倰倎倧倸倝倎倡俱倚倢倒倅倢倱倕倠倇倣倚們倢倈値倳倛倹俸値倅倳俸倚俷倊倕俷
倌倸倢倉倴個倴們倸俱倥倸倉倢倇倥 倰俲倢俴倸倝倒倶 倕倧們倅倢俲倦倹倉倝倥俱俴倓倡倹俷 倱倗倗倅倢俱倕倡倊們倢俹倢倒倱倗倗俴們俱倓値倊倱倕倠俺倡倄倰俸倉俲倦倹倉 倰俲倢倰倝倧倹倝們們倧倝倴個倰倕倧倸倝倉倰們倢倚值 個倕倨俱倛倉倹倢俸倝倱倕倷個倇倷倝個倳倛倹倚倗倸倢俷俲倦倹倉 俱倸倝倉俸倠倎倓們個倕倢倒倉値倹倗倎値們倎值 URL 倝倒倸倢俷俴倕倸倝俷倱俴倕倸倗
[ GitHub.com ]
倰倗倷倊倴俻倅值倉倹倝俷倳倛們倸倇倥倸倰倎値倸俷倰個値倄倅倡倗們倢倴倄倹倴們倸俱倥倸倰倄倧倝倉 們倡倉俴倧倝俴倝們們倩倉値倅倥倹倰俹倎倢倠倇倢俷倇倥倸倚倓倹倢俷俲倦倹倉們倢倰倎倧倸倝倳倛倹倲個倓倱俱倓們倰們倝倓值倳俺倹倰個倷倉 ‘倲俱倄倡俷’ 倍倢俱俻倝倓值倚倲俴倹倄
倚倣倛倓倡倊倌倩倹倊倓値倛倢倓倓倠倄倡倊倚倩俷倇倥倸們倥倓倢俱倀倢倉倱倕倠俸値倅倗値俽俽倢倃倰個倷倉倗値倘倗俱倓俴倝們倎値倗倰倅倝倓值 (Tech Exec) 倝倒倸倢俷倕倩倸俹倥... 俱倢倓倳俺倹倰倗倕倢倗倸倢俷倱倗倠倰倗倥倒倉倰俲倹倢們倢倴倆倛倉倹倢倏倥倄倊倉 GitHub 倰倎倧倸倝倄倩倗倸倢們倥倲個倓倰俸俱倅值倝倠倴倓倱個倕俱倳倛們倸 倛倓倧倝們倥倴倝倰倄倥倒倝倠倴倓倉倸倢倚倉倳俸倰俱値倄俲倦倹倉倳倉俺倨們俺倉倲倝倰倎倉俻倝倓值倚倊倹倢俷... 倆倧倝倰個倷倉倗値倈倥 ‘倎倡俱倌倸倝倉倛倒倸倝倉倳俸’ 倱倕倠 ‘倅倢們倛倢倱倓俷倊倡倉倄倢倕倳俸’ 倇倥倸倄倥倇倥倸倚倨倄倚倣倛倓倡倊倰俲倢
倱倕倠倰們倧倸倝倗倢倉倉倥倹倰倝俷... 倰俲倢倊倡俷倰倝値俽倴個倰俸倝倲個倓倰俸俱倅值倛倉倦倸俷倊倉倰倗倷倊倴俻倅值倉倥倹 俻倦倸俷們倡倉倚倓倹倢俷俴倗倢們倅倧倸倉倅倠倕倦俷倱倕倠個倓倠倇倡倊倳俸倳倛倹倰俲倢倝倒倸倢俷倓倨倉倱倓俷!
們倡倉俴倧倝 Web Server Framework 倇倥倸倆倩俱倰俲倥倒倉俲倦倹倉倄倹倗倒倐倢候倢 Python... 俺倧倸倝俲倝俷們倡倉俴倧倝 'Tornado' (倇倝倓值倉倢倲倄)
倱倅倸倚値倸俷倇倥倸倇倣倳倛倹倰俲倢倓倩倹倚倦俱個倓倠倛倕倢倄倳俸倱倕倠倚倠倄倨倄倅倢倇倥倸倚倨倄俱倕倡倊倴們倸倳俺倸俺倧倸倝倲個倓倰俸俱倅值... 倱倅倸們倡倉俴倧倝 '倊倇倉倣 (README)' 俲倝俷倲個倓倰俸俱倅值倉倥倹 倇倥倸倆倩俱倰俲倥倒倉倄倹倗倒 '倅倡倗倝倡俱候倓俸倥倉' 倇倡倹俷倛們倄!
倕倩倸俹倥倰個倷倉俴倉俸倥倉倲倄倒俱倣倰倉値倄 倰俲倢倰倓倥倒倉俸倊個倓値俽俽倢倅倓倥俸倢俱們倛倢倗値倇倒倢倕倡倒倏倩倸倅倡倹倉 (Fudan University) 倝倡倉倰倕倧倸倝俷俺倧倸倝 俱倸倝倉俸倠倰倄値倉倇倢俷俲倹倢們倉倹倣俲倹倢們倇倠倰倕們倢倘倦俱候倢倅倸倝倱倕倠倕俷倛倕倡俱個倡俱倀倢倉倇倣俷倢倉倝倒倩倸倳倉倚倛倓倡倀倝倰們倓値俱倢 俱倢倓倴倄倹們倢倰倛倷倉倅倡倗倝倡俱候倓俸倥倉倝倡倉俴倨倹倉倅倢 們倢倲倌倕倸倛倓倢倝倒倩倸倊倉倛倉倹倢倰倗倷倊 GitHub 倇倥倸們倥倱倅倸倄俷倐倢候倢倝倡俷俱倔候... 們倡倉倇倣倳倛倹倰俲倢倓倩倹倚倦俱倝倊倝倨倸倉倱倕倠俴倨倹倉倰俴倒倝倒倸倢俷倝倈値倊倢倒倴們倸倆倩俱
倰們倧倸倝倗倢倉倉倥倹 倰俲倢倴倄倹倕倝俷俴倕値俱倰俲倹倢倴個倄倩俻倝倓值倚倲俴倹倄俲倝俷們倡倉倱倕倹倗 倰倎倥倒俷倱俴倸俱倗倢倄倚倢倒倅倢倴倕倸倝倸倢倉倅倓倓俱倠倲俴倹倄倴個倴倄倹倴們倸俱倥倸倊倓倓倇倡倄 倰俲倢俱倷倅俱倛倕倨們倓倡俱倳倉俴倨倃倐倢倎俴倗倢們倛們倄俸倄 倱倕倠 ‘俴倝倉倰俻個倅值倚倆倢個倡倅倒俱倓倓們’ 倇倥倸倝倒倩倸倰倊倧倹倝俷倛倕倡俷倲個倓倰俸俱倅值倉倥倹倰俲倹倢倝倒倸倢俷俸倡俷!
倰倓倥倒倊俷倸倢倒... 倇倓俷個倓倠倚値倇倈値倐倢倎... 倱倕倠俷倄俷倢們倴倓倹倇倥倸倅値!
倲倄倒倰俹倎倢倠倝倒倸倢俷倒値倸俷 俱倢倓倰倕倧倝俱倳俺倹倲俴倓俷倚倓倹倢俷倱倊倊 Non-blocking I/O (俱倢倓個倓倠們倗倕倌倕倱倊倊倴們倸倓倝俴値倗) 倱倕倠 Event-driven (俱倢倓俲倡倊倰俴倕倧倸倝倉倄倹倗倒倰倛倅倨俱倢倓倃值) 倰倎倧倸倝倱俱倹個倡俽倛倢俱倢倓倓倡倊倚倸俷俲倹倝們倩倕們倛倢倘倢倕... 們倡倉俴倧倝倴倝倰倄倥倒倓倠倄倡倊 ‘倝倡俸俹倓値倒倠’ 俺倡倄倶!
俸倢俱們倨們們倝俷倱倕倠個倓倠倚倊俱倢倓倃值倇倥倸俴倕倨俱俴倕倥倝倒倩倸倳倉倚們倓倐倩們値倰倇俴倲倉倲倕倒倥俺倡倹倉倚倩俷們倢倛倕倢倒倚値倊個倥俲倝俷倕倩倸俹倥 倰俲倢俱倕倹倢倰倝倢倛倡倗倰個倷倉個倓倠俱倡倉倰倕倒倗倸倢... 倌倩倹倇倥倸倰俲倥倒倉倲俴倹倄倲個倓倰俸俱倅值倉倥倹俲倦倹倉們倢 俸倠倅倹倝俷倰個倷倉 ‘個倓們倢俸倢倓倒值’ 倓倠倄倡倊倇倷倝個俴倕倢倚俲倝俷倲倕俱倝倒倸倢俷倱倉倸倉倝倉! 俴倗倢們倰俲倹倢倳俸倇倥倸倰俲倢們倥倅倸倝倓倠倊倊個俿値倊倡倅値俱倢倓倓倠倄倡倊倕倸倢俷 (Low-level Computing) 倱倕倠俱倢倓倰俲倥倒倉倲個倓倱俱倓們倰俴倓倧倝俲倸倢倒 (Network Programming) 們倡倉倇倠倕倨個倓倨倲個倓倸俷倴個倆倦俷倓倠倄倡倊倇倥倸倉倸倢俲倉倕倨俱!
倳倉倅倝倉倱倓俱 倕倩倸俹倥倆倦俷俱倡倊俴倡倉倴們倹俴倡倉們倧倝 倝倒倢俱俸倠俱倄 Fork 倲個倓倰俸俱倅值 倱倕倹倗倰俲倹倢倴個俺倸倗倒倰俲倥倒倉倲俴倹倄倅倸倝倒倝倄倳倛倹們倡倉倰倚倓倷俸倚們倊倩倓倃值倄倹倗倒倅倡倗倰倝俷倰倕倒倄倹倗倒俻倹倣! 倱倅倸倅値倄倇倥倸倗倸倢倐倢倓倠俷倢倉倓倡倄倅倡倗倇倥倸 Yahoo 們倡倉倚倢倛倡倚倰俱値倉倴個 倰俲倢俸倦俷倇倣倴倄倹倱俴倸俱倄個倨倸們 'Follow' (倅値倄倅倢們) 倱倝俴倰俴倢倉倅值俲倝俷倌倩倹倚倓倹倢俷倲個倓倰俸俱倅值倇倥倸俺倧倸倝 'DongXia' 倰倝倢倴倗倹倰俷倥倒倊倶
倇倗倸倢倳倉倗値倉倢倇倥倉倥倹... 倇倡倉倇倥倇倥倸倰俲倢倕倷倝俱倝値倉倰俲倹倢倚倩倸倛倉倹倢倱倓俱俲倝俷 GitHub 倚倡俽倕倡俱候倃值倱俸倹俷倰倅倧倝倉倱倊倊倰倓倥倒倊倶 俱倷倰倄倹俷個倓倢俱俿俲倦倹倉倇倥倸們倨們俲倗倢倊倉俲倝俷倛倉倹倢俸倝
[ 倊倡俽俺倥 'DongXia' 倇倥倸俴倨倃倅値倄倅倢們 倰倎値倸俷倚倓倹倢俷倲個倓倰俸俱倅值 Repository 倳倛們倸俸倣倉倗倉 3 倓倢倒俱倢倓 倰們倧倸倝倴們倸俱倥倸倉倢倇倥倇倥倸倌倸倢倉們倢 ]
‘倲倝倹...?’ 俴値倹倗俲倝俷倕倩倸俹倥倰倕値俱俲倦倹倉倰倕倷俱倉倹倝倒倄倹倗倒俴倗倢們個倓倠倛倕倢倄倳俸 俴倗倢們倚倉倳俸倱倕倠俴倗倢們俱倓倠倛倢倒倳俴倓倸倓倩倹 倰倓値倸們俱倸倝倅倡倗俲倦倹倉倳倉倳俸俲倝俷倰俲倢倝倒倸倢俷倓倗倄倰倓倷倗
倝倡俸俹倓値倒倠倕倦俱倕倡倊倌倩倹倳倛倹俱倣倰倉値倄 Tornado... 倰倎値倸俷俸倠個倕倸倝倒俲倝俷倰倕倸倉倳倛們倸倝倠倴倓倝倝俱們倢倝倥俱倕倸倠倰倉倥倸倒?
倰俲倢倴們倸倓倝俺倹倢 俲倒倡倊倰們倢倚值俴倕値俱倰俲倹倢倴個倄倩倳倉倛倉倹倢倲個倓倴倏倕值倉倡倹倉倇倡倉倇倥 俴倕倡俷倰俱倷倊俻倝倓值倚倲俴倹倄 (Repository) 倲個倓倰俸俱倅值倳倛們倸倰倝倥倸倒們俸倣倉倗倉 3 倓倢倒俱倢倓 倆倩俱俸倡倄倰倓倥倒俷倝倒倸倢俷倰個倷倉倓倠倰倊倥倒倊倝倒倩倸倅倓俷倛倉倹倢倰俲倢
倚倢倒倅倢俲倝俷倰俲倢倚倠倄倨倄倰俲倹倢俱倡倊俺倧倸倝倲個倓倰俸俱倅值倱倓俱倚倨倄
[ Redis ]
們倡倉倰個倷倉俴倣倘倡倎倇值倱個倕俱個倓倠倛倕倢倄倇倥倸倰俲倢倴們倸倰俴倒倴倄倹倒値倉倛倓倧倝俴倨倹倉倅倢們倢俱倸倝倉倰倕倒倳倉俺倥倗値倅 倰俲倢俴倕値俱倰俲倹倢倴個 倱倕倹倗倰倓値倸們俱倗倢倄倚倢倒倅倢倝倸倢倉倛倉倹倢俲倹倝們倩倕倰倊倧倹倝俷倅倹倉俲倝俷倲個倓倰俸俱倅值 倛倓倧倝倇倥倸倲個倓倱俱倓們倰們倝倓值倰倓倥倒俱俱倡倉倅値倄個倢俱倗倸倢倴倏倕值 'README'
倱倕倠俱倷倰俺倸倉倰俴倒... 倰倝俱倚倢倓倇倡倹俷倛們倄倆倩俱倰俲倥倒倉倄倹倗倒倐倢候倢俸倥倉倇倥倸俴倨倹倉倅倢
[ 俺倧倸倝倲個倓倰俸俱倅值: Redis (REmote DIctionary Server) ]
[ 俲倹倝們倩倕倰倊倧倹倝俷倅倹倉俲倝俷倲個倓倰俸俱倅值: ] 倉倥倸俴倧倝倓倠倊倊俸倡倄倰俱倷倊俲倹倝們倩倕倱倊倊 'Key-Value' (俴倥倒值-倱倗倕倩) 個倓倠倚値倇倈値倐倢倎倚倩俷倕値倊倕値倸倗倱倊倊倲倝倰倎倉俻倝倓值倚 俻倦倸俷倆倩俱倰俲倥倒倉俲倦倹倉倄倹倗倒倐倢候倢 C
俻倦倸俷倱倅俱倅倸倢俷俸倢俱倀倢倉俲倹倝們倩倕 (Database) 倱倊倊倄倡倹俷倰倄値們倇倥倸倅倹倝俷倊倡倉倇倦俱俲倹倝們倩倕倕俷倊倉倞倢倓值倄倴倄倓倏值 (HDD)... Redis 倰倕倧倝俱倇倥倸俸倠俱倓倠俺倢俱俱倓倝倊倰倄値們倇値倹俷 倱倕倹倗倉倣俲倹倝們倩倕倇倡倹俷倛們倄倴個俸倡倄倰俱倷倊倴倗倹倳倉 '倛倉倸倗倒俴倗倢們俸倣倛倕倡俱 (RAM)' 倱倇倉!
倚値倸俷倉倥倹倛們倢倒俴倗倢們倗倸倢倝倒倸倢俷倴倓? 們倡倉倛們倢倒俴倗倢們倗倸倢... Redis 俸倠們倥俴倗倢們倰倓倷倗倳倉俱倢倓倝倸倢倉倱倕倠倰俲倥倒倉俲倹倝們倩倕 (Read/Write Speed) 倇倥倸 倰倛倉倧倝俺倡倹倉俸倉倴倓倹俴倩倸倱俲倸俷! > 倞倢倓值倄倴倄倓倏值倱倊倊倰俱倸倢倅倹倝俷倳俺倹 '倛倡倗倝倸倢倉倱倊倊俱倕倴俱' 倳倉俱倢倓倛們倨倉倛倢俲倹倝們倩倕... 倱倅倸倛倉倸倗倒俴倗倢們俸倣 (RAM) 倳俺倹俱倢倓個倓倠們倗倕倌倕 '倱倊倊倝値倰倕倷俱倇倓倝倉値俱倚值' 俻倦倸俷們倥俴倗倢們倰倓倷倗倱倅俱倅倸倢俷俱倡倉俺倉値倄倇倥倸倗倸倢... 倛倸倢俷俱倡倉倰個倷倉倛們倧倸倉倰個倷倉倱倚倉倰倇倸倢倅倡倗!
[ 們倡倉倰俱値倄們倢倰倎倧倸倝倱俱倹個倡俽倛倢倝倠倴倓? ] 倳倉倚倆倢倉俱倢倓倃值俸倓値俷俲倝俷 Web Application 倇倥倸們倥俸倣倉倗倉倌倩倹倰俲倹倢倳俺倹俷倢倉倎倓倹倝們俱倡倉倛倕倡俱倕倹倢倉俴倉 (High Concurrency)... 俴倝俲倗倄 (Bottleneck) 倇倥倸倇倣倳倛倹倓倠倊倊倎倡俷倊倸倝倒倇倥倸倚倨倄 俱倷俴倧倝 ‘俴倗倢們倕倸倢俺倹倢倳倉俱倢倓倝倸倢倉/倰俲倥倒倉俲倹倝們倩倕倕俷倀倢倉俲倹倝們倩倕’ 倕倝俷俸値倉倅倉倢俱倢倓倄倩倗倸倢 倰們倧倸倝倌倩倹倳俺倹俷倢倉倉倡倊倛們倧倸倉俴倉倱倒倸俷俱倡倉俱倄倓倥倰倏倓俺倰倎倧倸倝俲倝倰倓倥倒俱倄倩俲倹倝們倩倕倰倄倥倒倗俱倡倉倎倓倹倝們倶 俱倡倉... 倞倢倓值倄倄値倚俱值俲倝俷倀倢倉俲倹倝們倩倕倱倊倊倄倡倹俷倰倄値們俸倠倛們倨倉倇倣俷倢倉倴們倸倇倡倉 倛倡倗倝倸倢倉俸倠倇倣俷倢倉倛倉倡俱俸倉倲倝倰倗倝倓值倲倛倕倄 倚倸俷倌倕倳倛倹倓倠倊倊倰俱値倄倝倢俱倢倓俴倹倢俷 (Lag) 倆倸倢倒倲倝倉俲倹倝們倩倕俺倹倢 倛倓倧倝倰倕倗倓倹倢倒倇倥倸倚倨倄俴倧倝 倰俻値倓值倏倰倗倝倓值倕倸們 (Crash) 倴個倰倕倒!
Redis 倆倩俱倝倝俱倱倊倊們倢倰倎倧倸倝俶倸倢個倡俽倛倢倉倥倹倲倄倒倰俹倎倢倠! 們倡倉倚倢們倢倓倆倆倩俱倉倣倴個倗倢俷倴倗倹倰個倷倉 ‘俺倡倹倉倱俴俺 (Cache Layer) 俴倗倢們倰倓倷倗倱倚俷’ 俴倡倸倉俱倕倢俷倓倠倛倗倸倢俷倅倡倗 Application 俱倡倊 Database 倱倊倊倄倡倹俷倰倄値們 俲倹倝們倩倕倴倛倉倇倥倸們倥俱倢倓倰倓倥倒俱倄倩倊倸倝倒倶 (Hot Data) 倓倠倊倊俸倠倚倢們倢倓倆倄倦俷俲倹倝們倩倕倉倡倹倉們倢俸倢俱 RAM 俲倝俷 Redis 倴倄倹倲倄倒倅倓俷倳倉倓倠倄倡倊倰倚倥倹倒倗倴們倲俴倓倗値倉倢倇倥 (Microsecond) 俻倦倸俷俸倠俺倸倗倒倕倄倐倢倓倠俱倢倓倇倣俷倢倉俲倝俷倀倢倉俲倹倝們倩倕倛倕倡俷倊倹倢倉倴倄倹倝倒倸倢俷們倛倢倘倢倕!
[ 個倓倡俺俽倢倱俱倉倛倕倡俱俲倝俷 Redis 俴倧倝倝倠倴倓? ]
倛倉倸倗倒俴倗倢們俸倣俴倧倝倎倓倠倰俸倹倢: 倰倓倢倒倝們倚倕倠 '俴倗倢們俴俷倇倉倆倢倗倓俲倝俷俲倹倝們倩倕' (倆倹倢倴倏倄倡倊 俲倹倝們倩倕倇倥倸倝倒倩倸倳倉 RAM 倝倢俸俸倠倛倢倒倴個) 倰倎倧倸倝倱倕俱俱倡倊 '俴倗倢們倰倓倷倗倳倉俱倢倓個倓倠們倗倕倌倕倇倥倸倇倠倕倨俲倥倄俸倣俱倡倄們倉倨候倒值!'
倓倝俷倓倡倊倲俴倓俷倚倓倹倢俷俲倹倝們倩倕倇倥倸倛倕倢俱倛倕倢倒: Redis 倴們倸倳俺倸倱俴倸倀倢倉俲倹倝們倩倕 Key-Value 倲俷倸倶 倇倡倸倗倴個... 倱倅倸們倡倉倓倝俷倓倡倊倲俴倓俷倚倓倹倢俷俲倹倝們倩倕倇倥倸俻倡倊俻倹倝倉 (Data Structures) 倴倄倹倛倕倢俱倛倕倢倒倓倩個倱倊倊 倰俺倸倉 Strings, Hashes, Lists, Sets 倱倕倠 Sorted Sets! 倚値倸俷倉倥倹倛們倢倒俴倗倢們倗倸倢... 倉倡俱倎倡倂倉倢倚倢們倢倓倆倄倦俷俲倹倝們倩倕倴個俴倣倉倗倃倛倓倧倝俸倡倄倰倓倥倒俷俴倗倢們俻倡倊俻倹倝倉倴倄倹倅倡倹俷倱倅倸 '倓倠倄倡倊倀倢倉俲倹倝們倩倕' 倲倄倒倴們倸倅倹倝俷倓倝倚倸俷倴個個倓倠們倗倕倌倕倇倥倸倱倝個倎倕値倰俴俺倡倉 俺倸倗倒倕倄俲倡倹倉倅倝倉倱倕倠倰倎値倸們個倓倠倚値倇倈値倐倢倎倳倉俱倢倓倰俲倥倒倉倲俴倹倄倴倄倹倝倒倸倢俷俱倹倢倗俱倓倠倲倄倄!
倲們倰倄倕倱倊倊倰倈倓倄倰倄倥倒倗 (Single-threaded): 倳俺倸俴倓倡倊... 俴倨倃倝倸倢倉倴們倸倌値倄倛倓倝俱! 倲們倰倄倕倰俴倓倧倝俲倸倢倒倛倕倡俱俲倝俷 Redis 倳俺倹俱倢倓倇倣俷倢倉倱倊倊 '倰倈倓倄倰倄倥倒倗'! 倄倹倗倒俱倢倓倌倚倢倉倎倕倡俷俱倡倊倰倇俴倲倉倲倕倒倥 I/O Multiplexing 倇倣倳倛倹們倡倉倚倢們倢倓倆倛倕倥俱倰倕倥倸倒俷個倡俽倛倢倱倕倠倐倢倓倠倛倉倡俱倛倉倸倗俷 (Overhead) 倇倥倸倰俱値倄俸倢俱俱倢倓倚倕倡倊倊倓値倊倇俱倢倓倇倣俷倢倉倴個們倢倱倊倊們倡倕倅値倰倈倓倄 (Multi-threading Context Switching) 倴倄倹倝倒倸倢俷倛們倄俸倄! 倚倣倛倓倡倊俱倢倓俸倡倄俱倢倓俴倣俲倝俲倹倝們倩倕倌倸倢倉倰俴倓倧倝俲倸倢倒倚倸倗倉倳倛俽倸... 俱倢倓倳俺倹倰倈倓倄倰倄倥倒倗倇倥倸倝倝俱倱倊倊們倢倝倒倸倢俷倄倥 倒倸倝們 ‘倰倓倷倗俱倗倸倢’ 倱倕倠 ‘倰倚倆倥倒倓俱倗倸倢’ 倝倒倸倢俷倰倇倥倒倊倴們倸倅値倄!
[ 們倡倉俸倠倰俲倹倢們倢倰倅値們倰倅倷們俺倸倝俷倲倛倗倸倳倄倳倉倗俷俱倢倓? ] 倳倉倲倕俱倰倇俴倲倉倲倕倒倥倝値倉倰倇倝倓值倰倉倷倅 倃 個倡俸俸倨倊倡倉... 倰倓倢倒倡俷俲倢倄倱俴倕倉 '們倥倄倎倡倊倚倗値倚 (倰俴倓倧倸倝俷們倧倝倚倢倓倎倡倄個倓倠倲倒俺倉值)' 倇倥倸們倥俴倗倢們倰倓倷倗倱倕倠俴倗倢們倒倧倄倛倒倨倸倉們倢俱倎倝倇倥倸俸倠們倢倓倡倊們倧倝俱倡倊倚倆倢倉俱倢倓倃值倚倨倄俲倡倹倗! 倅倡倗倝倒倸倢俷倰俺倸倉... 俱倢倓倇倣倱俴俺倛倉倹倢倰倗倷倊倰倎俸 (Web Page Caching), 俱倢倓俸倡倄俱倢倓倰俻倚俺倡倉俲倝俷倌倩倹倳俺倹俷倢倉 (User Session Management), 俱倢倓倚倓倹倢俷倓倠倊倊俱倓倠倄倢倉俸倡倄倝倡倉倄倡倊 (Leaderboards), 俱倢倓倇倣倅倡倗倉倡倊倚倆値倅値倱倊倊倰倓倥倒倕倴倇們值 (Real-time Counters), 倱倕倠倓倠倊倊俴値倗倓倡倊倚倸俷俲倹倝俴倗倢們 (Message Queues)
俱倢倓倆倧倝俱倣倰倉値倄俲倦倹倉俲倝俷 Redis 俸倠倰俲倹倢們倢倝倨倄倓倝倒倓倡倸倗倱倕倠倰倅値們倰倅倷們俺倸倝俷倗倸倢俷倰倛倕倸倢倉倥倹倴倄倹倝倒倸倢俷倚們倊倩倓倃值倱倊倊! 俸倨倄個倓倠倚俷俴值俲倝俷們倡倉倴們倸倴倄倹倆倩俱倚倓倹倢俷們倢倰倎倧倸倝 '俶倸倢' 倛倓倧倝 '倱倇倉倇倥倸' 倀倢倉俲倹倝們倩倕倱倊倊倄倡倹俷倰倄値們... 倱倅倸們倡倉倆倩俱倚倓倹倢俷們倢倰倎倧倸倝倰個倷倉 ‘俴倩倸倛倩倇倥倸倄倥倇倥倸倚倨倄’ 倇倥倸俸倠倇倣俷倢倉倚倝倄個倓倠倚倢倉俱倡倉 倰倎倧倸倝倚倓倹倢俷倚倆倢個倡倅倒俱倓倓們倊倓値俱倢倓倛倕倡俷倊倹倢倉 (Backend Architecture) 倇倥倸們倥個倓倠倚値倇倈値倐倢倎倚倩俷倚倨倄 倱倕倠倚倢們倢倓倆倓倝俷倓倡倊倌倩倹倳俺倹俷倢倉倉倡倊倓倹倝倒倕倹倢倉俴倉倴倄倹倝倒倸倢俷倱倇倹俸倓値俷!
...
倕倩倸俹倥倰倎倸俷倚倢倒倅倢倝倸倢倉俲倹倝俴倗倢們倐倢候倢俸倥倉倇倨俱倅倡倗倝倡俱候倓倝倒倸倢俷倕倠倰倝倥倒倄倆倥倸倆倹倗倉 倴們倸們倥倅俱倛倕倸倉倱們倹倱倅倸俴倣倰倄倥倒倗
倄倗俷倅倢俲倝俷倰俲倢俴倸倝倒倶 倰倊値俱俱倗倹倢俷俲倦倹倉... 俱倗倹倢俷俲倦倹倉倰倓倧倸倝倒倶! 倲倄倒倴們倸倓倩倹倅倡倗... 俸倡俷倛倗倠俱倢倓倛倢倒倳俸俲倝俷倰俲倢倰倓値倸們倛倝倊倆倥倸倱倕倠倱倓俷俲倦倹倉 們倧倝倇倥倸倗倢俷倇倢倊倝倒倩倸倊倉倰們倢倚值 倰倓値倸們倚倡倸倉倓倠倓値俱倄倹倗倒俴倗倢們倅倧倸倉倰倅倹倉倇倥倸倴們倸倝倢俸俴倗倊俴倨們倴倄倹!
“倝倡俸俹倓値倒倠...”
倰俲倢倰倌倕倝倛倕倨倄個倢俱倝倨倇倢倉俴倣倶 倉倥倹倝倝俱們倢倄倹倗倒倉倹倣倰倚倥倒俷倱倛倊倎倓倸倢 “倉倥倸們倡倉... 俴倧倝倚倨倄倒倝倄倴倝倰倄倥倒倓倠倄倡倊倝倡俸俹倓値倒倠俲倝俷倱倇倹!”
俸倩倸倶 倰俲倢俱倷倌倨倄倕倨俱倎倓倗倄俲倦倹倉俸倢俱倰俱倹倢倝倥倹倌倩倹倊倓値倛倢倓 們倧倝倇倡倹俷倚倝俷俲倹倢俷倒倡倉倕俷倊倉倲倅债倠 倲倉倹們倅倡倗倰倝倥倒俷俴倝倰俲倹倢倴個倳俱倕倹倛倉倹倢俸倝們倝倉値倰倅倝倓值俸倉俸們倩俱倱倇倊俸倠俺倉俱倓倠俸俱!
倀倢倉俲倹倝們倩倕倇倥倸倓倡倉倊倉倛倉倸倗倒俴倗倢們俸倣 (In-Memory Database)! 倱倉倗俴値倄倉倥倹倝倢俸俸倠倴們倸倴倄倹倄倩倱個倕俱倳倛們倸倛倓倧倝倎値倚倄倢倓倝倠倴倓們倢俱倉倡俱... 倱倅倸們倡倉倒倡俷 ‘倴們倸倰俴倒們倥倳俴倓倛倉倹倢倴倛倉倊倉倲倕俱倳倊倉倥倹’ 倇倥倸倚倢們倢倓倆倒俱倓倠倄倡倊俴倝倉倰俻個倅值倉倥倹 倳倛倹俱倕倢倒倰個倷倉倓倠倊倊倇倥倸倚們倊倩倓倃值倱倊倊倱倕倠倓倥倄個倓倠倚値倇倈値倐倢倎倝倝俱們倢倴倄倹倚倨倄俲倥倄俴倕倡倸俷俲倉倢倄倉倥倹們倢俱倸倝倉!
倲倄倒倰俹倎倢倠倝倒倸倢俷倒値倸俷... 俱倢倓倇倥倸們倡倉倆倩俱倄倥倴俻倉值們倢倳倛倹倓倝俷倓倡倊 倲俴倓俷倚倓倹倢俷俲倹倝們倩倕倇倥倸倛倕倢俱倛倕倢倒 (Data Structures) 倍倡俷倕俷倴個倳倉倅倡倗俲倝俷們倡倉倰倝俷! 倉倡倸倉倛們倢倒俴倗倢們倗倸倢... 們倡倉倴們倸倳俺倸倱俴倸倲個倓倱俱倓們倇倣 Cache 倲俷倸倶 倈倓倓們倄倢倶... 倱倅倸們倡倉俴倧倝 '倀倢倉俲倹倝們倩倕倱倛倸俷倝倉倢俴倅' 倇倥倸倚倢們倢倓倆倳俺倹俷倢倉倇倄倱倇倉倓倠倊倊倰倄値們倴倄倹倝倒倸倢俷倚們倊倩倓倃值倱倊倊!
倱倕倠倰們倧倸倝倉倣倚倨倄倒倝倄倰倇俴倲倉倲倕倒倥倅倡倗倉倥倹... 倴個俸倡倊俴倩倸倇倣俷倢倉倓倸倗們俱倡倊倚倆倢個倡倅倒俱倓倓們 Non-blocking I/O 俲倝俷倲個倓倰俸俱倅值 'Tornado' 倇倥倸倰俲倢倰倎値倸俷倰倛倷倉倴個倰們倧倸倝倗倢倉倕倸倠俱倷...!!!