1¡¢·þÎñ½éÉÜ
ÏÞʱÇÀ¹ºÓÖ³ÆÉÁ¹º£¬Ó¢ÎÄFlash sale£¬ÆðÔ´ÓÚ·¨¹úÍøÕ¾Vente Priv¨¦e¡£ÉÁ¹ºÄ£Ê½¼´ÊÇÒÔ»¥ÁªÍøÎªÃ½½éµÄB2Cµç×ÓÁãÊÛ½»Ò׻£¬ÒÔÏÞÊ±ÌØÂôµÄÐÎʽ£¬¶¨ÆÚ¶¨Ê±ÍƳö¹ú¼ÊÖªÃûÆ·ÅÆµÄÉÌÆ·£¬Ò»°ãÒÔÔ¼Û1-5Õ۵ļ۸ñ¹©×¨Êô»áÔ±ÏÞʱÇÀ¹º£¬Ã¿´ÎÌØÂôʱ¼ä³ÖÐø5-10Ìì²»µÈ£¬Ïȵ½ÏÈÂò£¬ÏÞʱÏÞÁ¿£¬ÊÛÍê¼´Ö¹¡£¹Ë¿ÍÔÚÖ¸¶¨Ê±¼äÄÚ£¨Ò»°ãΪ20·ÖÖÓ£©±ØÐ븶¿î£¬·ñÔòÉÌÆ·»áÖØÐ·ŵ½´ýÏúÊÛÉÌÆ·µÄÐÐÁÐÀï¡£
Ä£Ê½ÌØÕ÷£º
Æ·ÅÆ·á¸» ¡ª¡ª ÍÆ³ö¹úÄÚÍâÒ»¶þÏßÃûÅÆÉÌÆ·£¬¹©Ïû·ÑÕß¹ºÂòÑ¡Ôñ?/p>
ʱ¼ä¶ÌÔÝ ¡ª¡ª ÿ¸öÆ·ÅÆÍÆ³öʱ¼ä¶ÌÔÝ£¬Ò»°ãΪ5¡ª10Ì죬Ïȵ½ÏÈÂò£¬ÏÞÁ¿ÊÛÂô£¬ÊÛÍê¼´£»
ÕÛ¿Û³¬µÍ ¡ª¡ª ÒÔÉÌÆ·Ô¼Û1¡ª5Õ۵ļ۸ñÏúÊÛ£¬ÕÛ¿ÛÁ¦¶È´ó¡£
Õª×Ô¡¾°Ù¶È°Ù¿Æ¡¿£¬Í¨¹ýÕâ¶Î¼ò½éÏàÐŶÔÏÞʱÇÀ¹ºÓÐÁËÒ»¶¨µÄÁ˽⣬ÎÒÃÇÄÚ²¿³ÆÖ®ÎªÇÀ¹ºÏµÍ³¡£
¶ÔÓÚÇÀ¹ºÏµÍ³À´Ëµ£¬Ê×ÏÈÒªÓпÉÇÀ¹ºµÄ»î¶¯£¬¶øÇÒÕâЩ»î¶¯¾ßÓдÙÏúÐÔÖÊ£¬±ÈÈçÖ±½µ500Ôª¡£Æä´ÎÒªÇó¿ÉÇÀ¹ºµÄ»î¶¯ÀàÄ¿·á¸»£¬Óû§²ÅÓгä·ÖµÄÑ¡ÔñÐÔ¡£618£¨6.1-6.20£©ÆÚ¼äÔöÁ¿´ÙÏú»î¶¯Á¿·Ç³£¶à£¬¿ÉÄÜij¸ö»î¶¯Á¦¶ÈÌØ±ð´ó£¬´ó¶àÓû§¶¼ÔÚÇÀ£¬±ØÈ»¶ÔϵͳÊÇÒ»¸ö¿¼Ñé¡£ÕâÑùÇÀ¹ºÏµÍ³¾ßÓÐÃëÉ±ÌØÐÔ£¬²¢·¢·ÃÎÊÁ¿¸ß£¬Í¬Ê±Óû§Ò²¿ÉÑ¡¹º¶à¸öÏÞʱÇÀÉÌÆ·£¬ÓëÆÕͨÉÌÆ·Ò»Æð½ø¹ºÎï³µ½áËã¡£ÕâÖÖ´óÐͻµÄ¸ºÔØ¿ÉÄÜÊÇÆ½Ê±µÄ¼¸Ê®±¶£¬ËùÒÔͨ¹ýÔö¼ÓÓ²¼þ¡¢ÓÅ»¯Æ¿¾±´úÂëµÈÊÖ¶ÎÊǺÜÄѴﵽĿ±êµÄ£¬ËùÒÔÐèҪרÃÅÉè¼ÆµÄÇÀ¹ºÏµÍ³¡£
·þÎñÖ÷Òª¹¦ÄÜ
´´½¨´ÙÏú·þÎñ£º²ÉÏú´´½¨´ÙÏúºó£¬´ÙÏú¹ÜÀíϵͳÉóºËͨ¹ýºó£¬»áµ÷ÓÃÇÀ¹ºÏµÍ³´´½¨´ÙÏú£»
ÇÀ·þÎñ£ºÎª·ûºÏÌõ¼þµÄ¶©µ¥²Ù×÷Ê£ÓàÊý£¬Ö÷ÒªÊǿۼõÊ£ÓàÊý£»
Õë¶ÔÄÄЩSKU
ĿǰÖ÷ҪΪµ¥Æ·´ÙÏú£¬Ö±½µ»òÕßÒ»¿Ú¼Û£¬±ÈÈ磺

¡¡¡¡
Ö÷ÒªÇþµÀ£ºÒƶ¯APP¡¢Î¢ÐÅ¡¢ÊÖQºÍÖ÷Õ¾
ÏÞ¹ºÀàÐÍ£ºÏÞÊýÁ¿¡¢ÏÞip¡¢ÏÞpinºÍÏÞÖÆipÓëpin
2¡¢ÏµÍ³Éè¼ÆÒªµã
ÈçºÎʵÏÖʵʱ¿â´æ£¿
ÕâÀï˵µÄ¿â´æ²»ÊÇÕæÕýÒâÒåÉÏµÄ¿â´æ£¬ÆäʵÊǸôÙÏú¿ÉÒÔÇÀ¹ºµÄÊýÁ¿£¬ÕæÕýµÄ¿â´æÔÚ»ù´¡¿â´æ·þÎñ¡£Óû§µã»÷¡ºÌá½»¶©µ¥¡»°´Å¥ºó£¬ÔÚÇÀ¹ºÏµÍ³ÖлñÈ¡ÁË×ʸñºó²ÅÈ¥»ù´¡¿â´æ·þÎñÖпۼõÕæÕýµÄ¿â´æ£»¶øÇÀ¹ºÏµÍ³¿ØÖƵľÍÊÇ×ʸñ/Ê£ÓàÊý¡£´«Í³·½°¸ÀûÓÃÊý¾Ý¿âÐÐËø£¬µ«ÊÇÔÚ´ÙÏú¸ß·åÊý¾Ý¿âѹÁ¦¹ý´óµ¼Ö·þÎñ²»¿ÉÓã¬Ä¿Ç°²ÉÓÃRedis¼¯Èº£¨16·ÖƬ£©»º´æ´ÙÏúÐÅÏ¢£¬ÀýÈç´ÙÏúid¡¢´ÙÏúÊ£ÓàÊý¡¢ÇÀ´ÎÊýµÈ£¬ÇÀµÄ¹ý³ÌÖа´ÕÕ´ÙÏúidÉ¢Áе½¶ÔÓ¦·ÖƬ£¬ÊµÊ±¿Û¼õÊ£ÓàÊý¡£µ±Ê£ÓàÊýΪ0»ò´ÙÏúɾ³ý£¬¼Û¸ñ»Ö¸´Ô¼Û¡£
ÈçºÎÉè¼ÆÇÀ¹ºRedisÊý¾Ý½á¹¹£¿
²ÉÏúÈËÔ±·¢²¼´ÙÏúºó£¬ÔÚÇÀ¹ºRedisÖÐÉú³ÉÒ»±Ê¼Ç¼£¬¸øÇÀ·þÎñÌṩ»ù±¾ÐÅÏ¢¡£Ã¿Ò»¸ö´ÙÏú¶ÔÓ¦Ò»¸ö´ÙÏúid£¬´ÙÏúÐÅÏ¢ÊÇHashes½á¹¹¡£
ÀýÈç´ÙÏúA£¬¶ÔÓ¦µÄÀàÐÍΪµ¥Æ·´ÙÏú£¬ÎÒÃÇÔÝÇÒÈÏΪÀàÐÍֵΪ1£¬¶ÔÓ¦RedisÖеÄkeyΪC_A_1£¬Êý¾Ý½á¹¹ÄÚÈÝÀàËÆÓÚÈçÏ£º
¡¡
o: 100 // ÔʼÊýÁ¿ ¡¡¡¡b: 99 // ¿ÉÇÀ¹ºÊýÁ¿£¬¼ÙÈçÇÀ¹ºÁËÒ»¸öÊ£ÏÂÁË99 ¡¡¡¡c: 1 // ÇÀ¹º´ÎÊý¼Ç¼£¬ÓÃÀ´ÏÞÁ÷£¬ºóÃæ»á½éÉܵ½ |
ÈçºÎ±£Ö¤²»³¬Âô£¿
ÒòΪ¿Û¼õ×ʸñÊÇÒ»×é²Ù×÷£¬ÎÒÃÇÀûÓÃEVAL²Ù×÷RedisÊ£ÓàÊýʵÏÖÔ×Ó»¯²Ù×÷£¬Î±´úÂëÈçÏ£º
¡¡¡¡
local key = KEYS[1] ¡¡¡¡local tag = "b" ¡¡¡¡local num = tonumber(ARGV[1]); ¡¡¡¡local lastNum = redis.call('HINCRBY',key,tag,-num); ¡¡¡¡ifÒµÎñÐÔÅжÏortonumber(lastNum) == 0then ¡¡¡¡return lastNum ¡¡¡¡end |
ÈçÉÏ´úÂë»á·µ»ØÊ£ÓàÊý£¬Èç¹ûСÓÚµÈÓÚ0ÁË£¬ÔòûÓÐ¿â´æÁË¡£
ÈçºÎÌá¸ßÍÌÍÂÁ¿£¿
¼õÉÙÍøÂç½»»¥£¨Ò»´ÎÇÀÊý¾Ýͨ¹ý EVALSHA Ò»´ÎÐÔÌá½»¸øRedis¼¯Èº£©£»Êý¾Ý¿â²Ù×÷Òì²½»¯£¨Ê¹ÓÃJMQÒì²½¼Ç¼ÈÕÖ¾£©¡£
ÈçºÎ±£Ö¤¿ÉÓÃÐÔ£¿
²ÉÓÃJSF£¨¾©¶«ÄÚ²¿SOA¿ò¼Ü£©¶ÔÍ⿪·Å·þÎñ£¨ÇÀ·þÎñºÍ·¢²¼´ÙÏú·þÎñ£©£¬¿É½µ¼¶ÎªÏµÍ³×ÔÉíwebservice·þÎñ£»
ÇÀ¹ºÏµÍ³Ö÷ÒªÒÀÀµÓÚRedis¼¯Èº£¬Redis²ÉÓÃÒ»Ö÷Èý´Ó¼¯Èº·½°¸£¬²¿ÊðÔÚÁ½¸ö»ú·¿£¬Ã¿¸ö¼¯Èº16¸ö·ÖƬ£¬Ã¿Á½·ÖƬ¹²ÓÃһ̨ÎïÀí»ú£¬¿Éͨ¹ýÅäÖÃÖÐÐÄÇл»Ö÷´Ó£»
Èç¹ûRedis¹ÒµôÁË£¬ÈçºÎ»Ö¸´ÄØ£¿Í¨¹ý»ã×ÜMySQLÖеÄÇÀ¹ººÍÈ¡ÏûÁ÷Ë®ÈÕÖ¾£¬²¢»Ö¸´RedisµÄÇÀ¹ºÊýÁ¿¡£
3¡¢ÏµÍ³¼Ü¹¹
ÕâÀïÖ÷񻃾¼°ÇÀ·þÎñ¼Ü¹¹ÆÊÎö£¬ÒòΪËü¾ßÓеäÐ͵ĸ߲¢·¢ÌØÐÔ£¬ÏÂÃæÊÇ»ù±¾¼Ü¹¹¸Åͼ£º

¡¡¡¡
¡¡¡¡×¢£º´Ë´¦µÄ¿â´æÊÇ¿ÉÇÀ¹ºÊýÁ¿ÉèÖ㬻òÕß½Ð×ö×ʸñ/Ê£ÓàÊý£¬²¢·ÇÕæÕýµÄʵ¼Ê¿â´æ¡£
4¡¢ÇÀ·þÎñÁ÷³Ì
RedisʹÓõ¥¸öLua½âÊÍÆ÷È¥ÔËÐÐËùÓнű¾£¬²¢ÇÒRedisÒ²±£Ö¤½Å±¾»áÒÔÔ×ÓÐÔ(atomic)µÄ·½Ê½Ö´ÐУºµ±Ä³¸ö½Å±¾ÕýÔÚÔËÐеÄʱºò£¬²»»áÓÐÆäËû½Å±¾»òRedisÃüÁî±»Ö´ÐС£ÕâÖÖÌØÐԺܺõؽâ¾öÁËÇÀ·þÎñÁ÷³ÌÖв¢·¢´øÀ´µÄÎÊÌâ¡£
¡¡¡¡
¡¡¡¡
Redis+LuaÇÀ¹º×ÓÁ÷³Ì:
´ËÁ÷³Ìͨ¹ýlua ½Å±¾ÊµÏÖ£¬ÎÒÃÇÔÝʱÃüÃûΪq.lua£¨Ö÷Òª¹¦ÄÜÏÞÁ÷ºÍ¿Û¼õ´ÙÏú»î¶¯Ê£ÓàÊý£©¡£ÕâÑù°ÑÇÀ¹ºÁ÷³ÌÓë½Å±¾½áºÏ£¬Ò»´ÎÐÔÌá½»¸øRedis¼õÉÙÍøÂç½»»¥£¬Ê¹µÃÐÔÄÜ´ó´óÌáÉý¡£
¡¡¡¡
q.luaα´úÂ룺 ¡¡¡¡--[[ ¡¡¡¡--!@brief ´ÙÏúIdÏÂÏÞÁ÷£º¿ÉÒÔ·Àֹij¸ö´ÙÏú¹ýÈȵ¼Ö·þÎñ²»¿ÉÒÔÓà ¡¡¡¡--]] ¡¡¡¡local function limited() ¡¡¡¡-- todo: ʵÏÖ ¡¡¡¡end ¡¡¡¡--[[ ¡¡¡¡--!@brief ÏÞÖÆÂß¼(ipºÍpin)£º±ÈÈçÓеĴÙÏúÊÇÏÞÖÆip,ÕâÀïУÑéipÊÇ·ñ´æÔÚ,Èç¹ûΪÏÞipÀàÐÍÇÀ¹º»î¶¯, ´æÔÚÅ׳öÒì³£¸æÖªipÒѾ´æÔÚ²»ÄÜÇÀ¹º ¡¡¡¡--]] ¡¡¡¡local function check_ip_pin() ¡¡¡¡-- todo: ʵÏÖ ¡¡¡¡end ¡¡¡¡--[[ ¡¡¡¡--!@brief ¼Ç¼¶©µ¥ºÅ£ºÖ÷ҪĿµÄʵÏÖÇÀ·½·¨ÃݵÈÐÔ,µ÷Ó÷½ÍøÂ糬ʱ¿ÉÒÔÖØ¸´µ÷ÓÃ,´æÔÚ¶©µ¥ºÅÖ±½Ó·µ»ØÇÀ¹º³É¹¦,²»ÖÁÓÚ³¬Âô ¡¡¡¡--]] ¡¡¡¡local function record_order_id() ¡¡¡¡-- todo: ʵÏÖ ¡¡¡¡end ¡¡¡¡--[[ ¡¡¡¡--!@brief ¿Û¼õÊ£ÓàÊý ¡¡¡¡--]] ¡¡¡¡local function scalebuy() ¡¡¡¡-- ¡¡¡¡local lastNum = redis.call('HINCRBY',key,tag,-num); ¡¡¡¡-- ¡¡¡¡end ¡¡¡¡-- µ÷ÓÃ˳Ðò²»¿Éµ÷Õû ¡¡¡¡-- 1 ÏÞÁ÷ ¡¡¡¡local status,msg = limited() ¡¡¡¡if status == 0then ¡¡¡¡return msg ¡¡¡¡end ¡¡¡¡-- 2 УÑé ¡¡¡¡status,msg = check_ip_pin() ¡¡¡¡if status == 0 then ¡¡¡¡return msg ¡¡¡¡end ¡¡¡¡-- 3 ¼Ç¼¶©µ¥ ¡¡¡¡status,msg = record_order_id() ¡¡¡¡if status == 0 then ¡¡¡¡return msg ¡¡¡¡end ¡¡¡¡-- 4 ¿Û¼õÊ£ÓàÊý ¡¡¡¡status,msg = scalebuy() ¡¡¡¡if status == 0 then ¡¡¡¡return msg ¡¡¡¡end ¡¡¡¡-- 5 ·µ»Ø³É¹¦±êʾ ¡¡¡¡return 1 |
×ÓÁ÷³Ì¾ßÌåÈçÏ£º
1¡¢½âÎöÇëÇó²ÎÊý£¬¸ù¾Ý´ÙÏúId°´ÕÕJedisÖÐMurmurHashËã·¨»ñÈ¡·ÖƬ£¬È»ºó°´ÕÕ·ÖÆ¬°ü×°PipelineÅúÁ¿·¢ËÍÇëÇó²ÎÊýargList£»
2¡¢»ñȡϵͳ³õʼ»¯Ê± LOAD¼ÓÔØq.lua·µ»ØµÄ´®shaValue£»
3¡¢Ö´ÐÐEVALSHA£¬Î±´úÂëÈçÏ£º
¡¡
// ÆäËû²Ù×÷ ¡¡¡¡Pipeline p; ¡¡¡¡// ³õʼ»¯p ¡¡¡¡p.evalsha(shaValue,keyList, argList); ¡¡¡¡// ÆäËû²Ù×÷ |
4¡¢´¦Àí·µ»Ø½á¹û£¬Ö»ÒªÓÐÒ»¸ö·ÖƬʧ°Ü£¬±¾´ÎÇÀ¹º¾Íʧ°Ü¡£
²¹³ä£ºÏêϸ²Ù×÷¿ÉÒԲο¼JedisÖÐingCommandsTest¡£
JMQ·¢ËÍ×ÓÁ÷³Ì£º
Ö´ÐÐRedis+LuaÇÀ¹º×ÓÁ÷³Ì³É¹¦½ö½ö´ú±í×ŲÙ×÷Redis³É¹¦£¬·¢ËÍJMQ£¨¾©¶«MQ»ù´¡·þÎñ£©³É¹¦£¨ºó¶ËÒì²½½«ÊµÊ±¿â´æ¸üе½MySQL£©²ÅËãÒ»±ÊÇÀ¹º³É¹¦£¬·ñÔòËãÇÀ¹ºÊ§°Ü¡£ÕâôÉè¼ÆµÄÔÒòÖ÷ÒªÊDZ£Ö¤ÇÀ¹ºRedisºÍMySQL¼Ç¼×îÖÕÒ»Ö£¬·¢ËÍʧ°ÜÐèÒª»Ø¹öRedis+LuaÇÀ¹º×ÓÁ÷³Ì£¨»Ö¸´RedisµÄ¿â´æºÍÇÀ¹º×ʸñ£©¡£µ±È»Òª¿¼Âǽµ¼¶£¬JMQ²»¿ÉÓÃʱ£¬Ö±½ÓÇе½JSF·þÎñÄ£ÄâJMQ£¬Ò²¾ÍÊÇÖ±½ÓдMySQL¿â£¬Ç°ÌáÊÇÏÞÁ÷´ÎÊýµ÷С£¬·ñÔòÊý¾Ý¿âÓÐѹÁ¦¹ý´óµÄ·çÏÕ¡£ÕâÑùËäÈ»Óû§ÌåÑéϽµÁË£¬µ«ÊÇ·þÎñÒÀÈ»¿ÉÓ᣿ª¹Ø¶¼ÔÚÅäÖÃÖÐÐIJÙ×÷£¬Ò»·ÖÖÓÄÚÉúЧ¡£
×ʸñ»Ø¹ö×ÓÁ÷³Ì£º
·¢ËÍJMQʧ°Ü±ØÐë»Ø¹ö£¬·ñÔò¾Í³öÏÖÁ˳¬ÂôÏÖÏ󣬾ßÌåÁ÷³ÌͬRedis+LuaÇÀ¹º×ÓÁ÷³ÌÀàËÆ£¬ÊÇËüµÄÄæÏòÁ÷³Ì£¬Ö»²»¹ýÔËÐнű¾²»Í¬°ÕÁË¡£
ÏÞÁ÷´¦Àí
·½·¨¼¶ÏÞÁ÷£¬ÏÞÁ÷ãÐֵͨ¹ýÅäÖÃÖÐÐÄÅäÖã¬Ò»·ÖÖÓÉúЧ£¬Î±´úÂëÈçÏ£º
¡¡
private static AtomicInteger atomic = new AtomicInteger(0); ¡¡¡¡public void test() { ¡¡¡¡try { ¡¡¡¡// ÏÞÁ÷ ¡¡¡¡int limitNum = XXX.getLimitNum(); ¡¡¡¡int nowConcurrent = atomic.incrementAndGet(); ¡¡¡¡if(nowConcurrent > limitNum) { ¡¡¡¡// Òì³£´¦Àí ¡¡¡¡} ¡¡¡¡// Õý³£ÒµÎñÂß¼ ¡¡¡¡} catch(Exception e) { ¡¡¡¡// Òì³£´¦Àí ¡¡¡¡} finally { ¡¡¡¡atomic.decrementAndGet(); ¡¡¡¡} ¡¡¡¡} |
q.luaÖдÙÏú¼¶±ðµÄÏÞÁ÷£¬Ö÷ÒªÀûÓÃC_A_1ÖÐcµÄÇÀ´ÎÊýºÍãÐÖµ±È¶Ô¡£±ÈÈç´ÙÏúA£¬60ÃëÄÚÖ»ÄÜÇÀ60000´Î£¬³¬¹ýãÐÖµ60000¸Ã´ÙÏú¾Í»áÇÀ¹ºÊ§°Ü¡£
µ½´ËÇÀ¹ºÏµÍ³µÄºËÐÄÂß¼¾Í½éÉÜÍêÁË£¬ÕâÀï±ß»¹ÓÐһЩϸ½ÚÎÊÌâÐèÒª´ó¼ÒÔÚÉè¼ÆÊ±Ë¼¿¼£¬ÈçÏÞ¹º£¨Èçÿ¸öÈËÏÞ¹º2¸ö£©¡¢ÕæÊµ¿â´æ²»×ãÈ¡Ïû¡¢Óû§È¡Ïû¶©µ¥¹é»¹×ʸñ¡¢Redis¹ÒÁ˻ָ´Êý¾Ý¡¢Í£´ÙÏú£¨Ê±¼ä¹ýÆÚÍ£¡¢¿â´æ²»×ãÍ££©µÈµÈ¡£
|