ÏÖÔÚ´ó¶àÊý¿ª·¢ÈËÔ±¶¼»áÌý˵¹ý Redis¡£Redis ÊÇÄ¿Ç°Êг¡ÉÏ×îºÃµÄ¿ªÔ´ÄÚ´æ NoSQL Êý¾Ý¿âÖ®Ò»¡£ËüΪǰ¶ËÒÔ¼°ºó¶Ë·þÎñ£¨Èç¼üÖµ²éÕÒ£¬¶ÓÁУ¬¹þÏ£µÈ£©ÌṩÁ˷dz£¶àµÄ°ïÖú¡£
Ò»¡¢Ê²Ã´ÊÇ Redis£¿
¸ù¾Ý Redis ¹Ù·½½éÉÜ£¬Redis ÊÇÒ»¸ö¿ªÔ´£¨BSDÐí¿É£©£¬ÄÚ´æÊý¾Ý½á¹¹´æ´¢£¬ÓÃ×÷Êý¾Ý¿â£¬»º´æºÍÏûÏ¢´úÀí£¬ËüÖ§³Ö×Ö·û´®¡¢¹þÏ£±í¡¢ÁÐ±í¡¢¼¯ºÏ¡¢ÓÐÐò¼¯ºÏ¡¢Î»Í¼¡¢hyperloglogs µÈÊý¾ÝÀàÐÍ¡£
¶þ¡¢Redis Óë Memcached
Redis ÊÇÒ»¸öÊý¾Ý½á¹¹·þÎñÆ÷¡£×÷Ϊ¼üÖµÊý¾Ý´æ´¢£¬Redis ÀàËÆÓÚ Memcached£¬µ«Ëü±È Memcached ÓÐÁ½¸öÖ÷ÒªÓŵ㣺֧³Ö¸ü¶àµÄÊý¾ÝÀàÐÍÒÔ¼°³Ö¾Ã»¯¡£
³Ö¾Ã»¯Ê¹µÃÄã¿ÉÒÔ½« Redis µ±×öºÏ·¨Êý¾Ý¿â½øÐвÙ×÷£¬¶ø²»ÊÇÒ»¸ö²»Îȶ¨µÄÁÙʱ»º´æ¡£Èç¹ûÖØÐÂÆô¶¯£¬Memcached ÐÅÏ¢½«¶ªÊ§; µ« Redis Êý¾ÝÈÔÈ»´æÔÚ¡£
Redis Ö§³Ö´æ´¢¶àÖÖÀàÐÍÊý¾Ý¡£¸ú Memcached Ò»Ñù¿ÉÒÔʹÓÃ×Ö·û´®¡£¶øÇÒÄ㻹¿ÉÒÔ´¦Àí hash£¨¹þÏ££©£¬set£¨ËùÓв»Í¬ÖµµÄδÅÅÐò£©£¬zset£¨ËùÓв»Í¬ÖµµÄÅÅÐò£©ºÍ list£¨¿ÉÄÜ°üÀ¨Öظ´µÄÅÅÐò£©¡£
Èý¡¢Redis ÈçºÎÔË×÷£¿
Êý¾Ý¿â½«Êý¾Ý´æ´¢ÔÚ´ÅÅÌ»ò SSD ÉÏ£¬¶ø Redis µÄÊý¾ÝÊÇפÁôÔÚÄÚ´æÖС£ÓÉÓÚÎÞÐè·ÃÎÊ´ÅÅÌ£¬Redis µÈÄÚ´æÊý¾Ý´æ´¢±ÜÃâÁ˲éÕÒʱ¼äÑÓ³Ù£¬²¢ÇÒ¿ÉÒÔÔÚ¼¸Î¢ÃëÄÚ·ÃÎÊÊý¾Ý¡£Redis Ìṩ¶àÖÖÊý¾Ý½á¹¹¡¢¸ß¿ÉÓÃÐÔ¡¢µØÀí¿Õ¼ä¡¢Lua ½Å±¾¡¢ÊÂÎñ¡¢´ÅÅ̳־ÃÐÔºÍȺ¼¯Ö§³Ö£¬ÈÃʵʱ»¥ÁªÍø¼¶Ó¦ÓóÌÐòµÄ¹¹½¨±äµÃ¸ü¼Ó¼òµ¥¡£
ËÄ¡¢Redis ³Ö¾Ã»¯
ÏÖÔÚ¿ÉÒÔͨ¹ýÁ½ÖÖ²»Í¬µÄ·½Ê½ÊµÏÖ³Ö¾ÃÐÔ£ºÒ»ÖÖ³ÆΪ¿ìÕÕ£¬ÊÇÒ»ÖÖ°ë³Ö¾ÃÐÔģʽ£¬Ö¸¶¨µÄʱ¼ä¼ä¸ôÄÚÉú³ÉÊý¾Ý¼¯µÄʱ¼äµã¿ìÕÕ£¬ÒÔ RDB(Redis DataBase) ת´¢¸ñʽ±àд¡£´Ó°æ±¾1.1¿ªÊ¼£¬Óиü°²È«µÄÌæ´ú·½°¸ AOF(Append Only File)£¬ËüµÄ³öÏÖÊÇΪÁËÃÖ²¹ RDB µÄ²»×㣨Êý¾ÝµÄ²»Ò»ÖÂÐÔ£©,²ÉÓÃÈÕÖ¾µÄÐÎʽÀ´¼Ç¼ÿ¸öд²Ù×÷²¢×·¼ÓÔÚÎļþÖС£
Îå¡¢RDB ºÍ AOF ,ÎÒÓ¦¸ÃÓÃÄÄÒ»¸ö£¿
Ò»°ãÀ´Ëµ,Èç¹ûÏë´ïµ½×ãÒÔæÇÃÀ PostgreSQL µÄÊý¾Ý°²È«ÐÔ£¬ ÄãÓ¦¸ÃͬʱʹÓà RDB ºÍ AOF Á½Öֳ־û¯¹¦ÄÜ¡£
AOF ĬÈÏÇé¿öÏ£¬Redis ÿ2Ã뽫Êý¾ÝдÈëÎļþϵͳ£¬¸ù¾ÝÐèÇóÉèÖÃʱ¼ä¡£Èç¹ûÔÚĬÈÏÉèÖÃÏÂϵͳ³öÏÖ¹ÊÕÏ£¬ÔòÖ»»á¶ªÊ§¼¸ÃëÖÓµÄÊý¾Ý¡£Èç¹ûÄã¿ÉÒÔ³ÐÊÜÊý·ÖÖÓÒÔÄÚµÄÊý¾Ý¶ªÊ§£¬ ÄÇôÄã¿ÉÒÔֻʹÓà RDB ³Ö¾Ã»¯¡£
ÓкܶàÈ˻ᵥ¶ÀʹÓà AOF£¬µ«ÊÇÎÒÃDz¢²»¹ÄÀøÕâÑù£¬ÒòΪʱ³£½øÐÐ RDB ¿ìÕշdz£·½±ãÓÚÊý¾Ý¿â±¸·Ý£¬Æô¶¯ËÙ¶ÈÒ²½ÏÖ®¿ì£¬»¹±ÜÃâÁËAOF ÒýÇæµÄ bug¡£
Áù¡¢³£¼û°¸Àý
»º´æ - ÓÉÓÚÆä¸ßÐÔÄÜ£¬µ±¶Áд²Ù×÷Á¿³¬¹ý´«Í³Êý¾Ý¿âµÄ¹¦ÄÜʱ£¬¿ÉÒÔͨ¹ý Redis ½øÐнâ¾ö¡£ÓÉÓÚ Redis Äܹ»ÇáËɵĽ«Êý¾Ý³Ö¾Ã±£´æµ½´ÅÅ̺ͷḻÊý¾ÝÀàÐÍ£¬Òò´ËËüÊÇ´«Í³ Memcached »º´æ½â¾ö·½°¸µÄ¾ø¼ÑÌæ´ú·½°¸¡£
·¢²¼ºÍ¶©ÔÄ - ´Ó°æ±¾ 2.0 ¿ªÊ¼£¬Redis ÌṩÁËʹÓ÷¢²¼/¶©ÔÄÏûÏ¢´«µÝ·¶Àý·Ö·¢Êý¾ÝµÄ¹¦ÄÜ¡£
¶ÓÁÐ - Ïñ Resque ÕâÑùµÄÏîĿʹÓà Redis ×÷ΪÅŶӺǫ́×÷ÒµµÄºó¶Ë¡£
ÓÎÏ·ÅÅÐаñ- Redis ÊÇÑ°Çó¹¹½¨ÊµÊ±ÅÅÐаñµÄÓÎÏ·¿ª·¢ÕßµÄÈÈÃÅÑ¡Ôñ¡£¿ÉÖ±½ÓʹÓà Redis ÓÐÐò¼¯Êý¾Ý½á¹¹£¬´Ë½á¹¹ÊµÏÖÁËÔªËصÄΨһÐÔ£¬Í¬Ê±ÓÖ¿Éά»¤°´Óû§·ÖÊýÅÅÐòµÄÁÐ±í¡£ÄãÒ²¿ÉÒÔʹÓÃʱ¼ä´Á×÷Ϊ·ÖÊý£¬Ê¹ÓÃÓÐÐò¼¯´¦Àíʱ¼äÐòÁÐÊý¾Ý¡£
ʵʱ·ÖÎö-Redis ¿É×÷ΪÄÚ´æÖÐÊý¾Ý´æ´¢£¬ÓëÁ÷´¦Àíƽ̨£¨ÀýÈç Apache Kafka£©´îÅäʹÓã¬ÒÔÑǺÁÃ뼶ÑÓ³ÙÌáÈ¡¡¢´¦ÀíºÍ·ÖÎöʵʱÊý¾Ý¡£Redis ÊÇʵʱ·ÖÎöʹÓð¸ÀýµÄÀíÏëÑ¡Ôñ£¬ÀýÈçÉ罻ýÌå·ÖÎö¡¢¹ã¸æͶ·Å¡¢¸öÐÔ»¯¡£
Æß¡¢Ê¾Àý Redis »ù±¾ÃüÁî
ÏÂÃæÎÒ¼òµ¥½²½â Redis-CLI »ù±¾ÃüÁî²Ù×÷£¬Ä¬ÈÏÇé¿öÏ£¬Redis-CLIÔÚ¶Ë¿Ú 6379 ÉÏÔËÐС£
SET (ÉèÖÃÃÜÔ¿)
127.0.0.1:6379> SET foo "Hello World"
OK // ÉèÖÃÃÜÔ¿
GET (»ñÈ¡ÃÜÔ¿)
127.0.0.1:6379> GET foo
"Hello World" // »ñÈ¡ÃÜÔ¿
DEL (ɾ³ýÃÜÔ¿)
127.0.0.1:6379> GET foo
"Hello World"
127.0.0.1:6379> DEL foo
(integer) 1 // ÃÜÔ¿¸Õ±»É¾³ý
127.0.0.1:6379> GET foo
(nil) // ÃÜÔ¿±»É¾³ý£¬½á¹ûΪnil¡£
SETEX (ÉèÖÃÓÐЧÆÚÏÞµÄÃÜÔ¿)
127.0.0.1:6379> SETEX foo 40 "I said, Hello World!"
OK //ÃÜÔ¿ÒÑÉèÖÃΪ40Ãëµ½ÆÚ
TTL (ÃÜÔ¿µÄÊ£Óàʱ¼ä)
127.0.0.1:6379> TTL foo
(integer) 36 //36Ã볬ʱ
PERSIST (ÃÜԿɾ³ýÆÚÏÞ)
127.0.0.1:6379> PERSIST foo
(integer) 1 //½«ÃÜԿתΪ³Ö¾Ã»¯£¨ÃÜÔ¿²»»á¹ýÆÚ£©
RENAME (ÖØÃüÃûµ±Ç°ÏÖÓÐÃÜÔ¿)
127.0.0.1:6379> RENAME foo bar
OK // ½«¼ü'foo'ÖØÃüÃûΪ 'bar'
FLUSHALL (Çå¿Õµ½Ä¿Ç°ÎªÖ¹±£´æµÄËùÓÐÄÚÈÝ)
127.0.0.1:6379> flushall
OK // ɾ¿âÅÜ·
°Ë¡¢Ð¡½á
Redis ÓÐ׿«Æä·á¸»µÄÊý¾ÝÀàÐͺͼ«¸ßÐÔÄÜ£¬ÐÔÄÜÉ϶ÁµÄËÙ¶ÈÊÇ110000´Î/s,дµÄËÙ¶ÈÊÇ81000´Î/s ¡£µ«ÊÇ Redis ²»ÊÇÍòÄܵģ¬Êܵ½ÎïÀíÄÚ´æµÄÏÞÖÆ,²»ÄÜÓÃ×÷º£Á¿Êý¾ÝµÄ¸ßÐÔÄܶÁд,Òò´Ë Redis Êʺϵij¡¾°Ö÷Òª¾ÖÏÞÔÚ½ÏСÊý¾ÝÁ¿µÄ¸ßÐÔÄܲÙ×÷ºÍÔËËãÉÏ¡£