RedisÊý¾ÝÀàÐÍÖ®LISTÀàÐÍ(¶þ)

2015-07-24 08:04:12 ¡¤ ×÷Õß: ¡¤ ä¯ÀÀ: 7
OP mylist "three" 127.0.0.1:6379[15]> LRANGE mylist 0 -1 1) "one" 2) "two"

BLPOP
BLPOP key [key ¡­] timeout
BLPOP ÊÇÁбíµÄ×èÈûʽ (blocking) µ¯³öÔ­Óï¡£
ËüÊÇLPOP ÃüÁîµÄ×èÈû°æ±¾£¬µ±¸ø¶¨ÁбíÄÚûÓÐÈκÎÔªËØ¿É¹©µ¯³öµÄʱºò£¬Á¬½Ó½«±»BLPOP ÃüÁî×èÈû£¬Ö±µ½µÈ´ý³¬Ê±»ò·¢Ïֿɵ¯³öÔªËØÎªÖ¹¡£
µ±¸ø¶¨¶à¸ö key ²ÎÊýʱ£¬°´²ÎÊý key µÄÏȺó˳ÐòÒÀ´Î¼ì²é¸÷¸öÁÐ±í£¬µ¯³öµÚÒ»¸ö·Ç¿ÕÁбíµÄÍ·ÔªËØ¡£·Ç×èÈûÐÐΪµ±BLPOP ±»µ÷ÓÃʱ£¬Èç¹û¸ø¶¨ key ÄÚÖÁÉÙÓÐÒ»¸ö·Ç¿ÕÁÐ±í£¬ÄÇôµ¯³öÓöµ½µÄµÚÒ»¸ö·Ç¿ÕÁбíµÄÍ·ÔªËØ£¬²¢ºÍ±»µ¯³öÔªËØËùÊôµÄÁбíµÄÃû×ÖÒ»Æð£¬×é³É½á¹û·µ»Ø¸øµ÷ÓÃÕß¡£
µ±´æÔÚ¶à¸ö¸ø¶¨ key ʱ£¬BLPOP °´¸ø¶¨ key ²ÎÊýÅÅÁеÄÏȺó˳Ðò£¬ÒÀ´Î¼ì²é¸÷¸öÁÐ±í¡£
¼ÙÉèÏÖÔÚÓÐ job ¡¢command ºÍ request Èý¸öÁÐ±í£¬ÆäÖÐ job ²»´æÔÚ£¬command ºÍ request ¶¼³ÖÓзǿÕÁÐ±í¡£¿¼ÂÇÒÔÏÂÃüÁ
BLPOP job command request 0
BLPOP ±£Ö¤·µ»ØµÄÔªËØÀ´×Ô command£¬ÒòΪËüÊǰ´¡± ²éÕÒ job -> ²éÕÒ command -> ²éÕÒ request ¡°ÕâÑùµÄ˳Ðò£¬µÚÒ»¸öÕÒµ½µÄ·Ç¿ÕÁÐ±í¡£

127.0.0.1:6379[15]> DEL job command request (integer) 0 127.0.0.1:6379[15]> LPUSH command "update system..." (integer) 1 127.0.0.1:6379[15]> LPUSH request "visit page" (integer) 1 127.0.0.1:6379[15]> BLPOP job command request 0 1) "command" 2) "update system..."

BRPOP
BRPOP key [key ¡­] timeout
BRPOP ÊÇÁбíµÄ×èÈûʽ (blocking) µ¯³öÔ­Óï¡£
ËüÊÇRPOP ÃüÁîµÄ×èÈû°æ±¾£¬µ±¸ø¶¨ÁбíÄÚûÓÐÈκÎÔªËØ¿É¹©µ¯³öµÄʱºò£¬Á¬½Ó½«±»BRPOP ÃüÁî×èÈû£¬Ö± µ½µÈ´ý³¬Ê±»ò·¢Ïֿɵ¯³öÔªËØÎªÖ¹¡£
µ±¸ø¶¨¶à¸ö key ²ÎÊýʱ£¬°´²ÎÊý key µÄÏȺó˳ÐòÒÀ´Î¼ì²é¸÷¸öÁÐ±í£¬µ¯³öµÚÒ»¸ö·Ç¿ÕÁбíµÄβ²¿ÔªËØ¡£
¹ØÓÚ×èÈû²Ù×÷µÄ¸ü¶àÐÅÏ¢£¬Çë²é¿´BLPOP ÃüÁBRPOP ³ýÁ˵¯³öÔªËØµÄλÖúÍBLPOP ²»Í¬Ö®Í⣬ÆäËû±íÏÖÒ»Ö¡£
ʱ¼ä¸´ÔÓ¶È£º O(1)
·µ»ØÖµ£º
¡¡¡¡¼ÙÈçÔÚÖ¸¶¨Ê±¼äÄÚûÓÐÈκÎÔªËØ±»µ¯³ö£¬Ôò·µ»ØÒ»¸ö nil ºÍµÈ´ýʱ³¤¡£
¡¡¡¡·´Ö®£¬·µ»ØÒ»¸öº¬ÓÐÁ½¸öÔªËØµÄÁÐ±í£¬µÚÒ»¸öÔªËØÊDZ»µ¯³öÔªËØËùÊôµÄ key £¬µÚ¶þ¸öÔªËØÊDZ»µ¯³öÔªËØµÄÖµ¡£

127.0.0.1:6379[15]> LLEN course (integer) 0 127.0.0.1:6379[15]> RPUSH course algorithm001 (integer) 1 127.0.0.1:6379[15]> RPUSH course c++101 (integer) 2 127.0.0.1:6379[15]> BRPOP course 30 1) "course" 2) "c++101"

LINSERT
LINSERT key BEFORE|AFTER pivot value
½«Öµ value ²åÈëµ½Áбí key µ±ÖУ¬Î»ÓÚÖµ pivot ֮ǰ»òÖ®ºó¡£
µ± pivot ²»´æÔÚÓÚÁбí key ʱ£¬²»Ö´ÐÐÈκβÙ×÷¡£
µ± key ²»´æÔÚʱ£¬key ±»ÊÓΪ¿ÕÁÐ±í£¬²»Ö´ÐÐÈκβÙ×÷¡£
Èç¹û key ²»ÊÇÁбíÀàÐÍ£¬·µ»ØÒ»¸ö´íÎó¡£
ʱ¼ä¸´ÔÓ¶È: O(N)£¬N ΪѰÕÒ pivot ¹ý³ÌÖо­¹ýµÄÔªËØÊýÁ¿¡£
·µ»ØÖµ:
¡¡¡¡Èç¹ûÃüÁîÖ´Ðгɹ¦£¬·µ»Ø²åÈë²Ù×÷Íê³ÉÖ®ºó£¬ÁбíµÄ³¤¶È¡£
¡¡¡¡Èç¹ûûÓÐÕÒµ½ pivot £¬·µ»Ø -1 ¡£
¡¡¡¡Èç¹û key ²»´æÔÚ»òΪ¿ÕÁÐ±í£¬·µ»Ø 0 ¡£

127.0.0.1:6379[15]> RPUSH mylist "Hello" (integer) 1 127.0.0.1:6379[15]> RPUSH mylist "World" (integer) 2 127.0.0.1:6379[15]> LINSERT mylist BEFORE "World" "There" (integer) 3 127.0.0.1:6379[15]> LRANGE mylist 0 -1 1) "Hello" 2) "There" 3) "World" 127.0.0.1:6379[15]> LINSERT mylist BEFORE "go" "let's" (integer) -1 127.0.0.1:6379[15]> EXISTS fake_list (integer) 0 127.0.0.1:6379[15]> LINSERT fake_list BEFORE "nono" "gogogog" (integer) 0

LRANGE
LRANGE key start stop
·µ»ØÁбí key ÖÐÖ¸¶¨Çø¼äÄÚµÄÔªËØ£¬Çø¼äÒÔÆ«ÒÆÁ¿ start ºÍ stop Ö¸¶¨¡£
ϱê (index) ²ÎÊý start ºÍ stop ¶¼ÒÔ 0 Ϊµ×£¬Ò²¾ÍÊÇ˵£¬ÒÔ 0 ±íʾÁбíµÄµÚÒ»¸öÔªËØ£¬ÒÔ 1 ±íʾÁбíµÄµÚ¶þ¸öÔªËØ£¬ÒÔ´ËÀàÍÆ¡£
ÄãÒ²¿ÉÒÔʹÓøºÊýϱ꣬ÒÔ -1 ±íʾÁбíµÄ×îºóÒ»¸öÔªËØ£¬-2 ±íʾÁбíµÄµ¹ÊýµÚ¶þ¸öÔªËØ£¬ÒÔ´ËÀàÍÆ¡£
×¢Òâ LRANGE ÃüÁîºÍ±à³ÌÓïÑÔÇø¼äº¯ÊýµÄÇø±ð¼ÙÈçÄãÓÐÒ»¸ö°üº¬Ò»°Ù¸öÔªËØµÄÁÐ±í£¬¶Ô¸ÃÁбíÖ´ÐÐ LRANGE list 0 10 £¬½á¹ûÊÇÒ»¸ö°üº¬ 11 ¸öÔªËØµÄÁÐ±í£¬Õâ±íÃ÷ stopϱêÒ²ÔÚLRANGEÃüÁîµÄȡֵ·¶Î§Ö®ÄÚ (±ÕÇø¼ä)£¬ÕâºÍijЩÓïÑÔµÄÇø¼äº¯Êý¿ÉÄܲ»Ò»Ö£¬±ÈÈç Ruby µÄ Range.new ¡¢Array#slice ºÍ Python µÄ range() º¯Êý¡£
³¬³ö·¶Î§µÄϱêÖµ²»»áÒýÆð´íÎó¡£
Èç¹û start ϱê±ÈÁбíµÄ×î´óϱê end ( LLEN list ¼õÈ¥ 1 ) »¹Òª´ó£¬ÄÇôLRANGE ·µ»ØÒ»¸ö¿ÕÁÐ±í¡£
Èç¹û stop ϱê±È end ϱ껹Ҫ´ó£¬Redis ½« stop µÄÖµÉèÖÃΪ end ¡£
ʱ¼ä¸´ÔÓ¶È: O(S+N)£¬S ÎªÆ«ÒÆÁ¿ start £¬N Ϊָ¶¨Çø¼äÄÚÔªËØµÄÊýÁ¿¡£
·µ»ØÖµ: Ò»¸öÁÐ±í£¬°üº¬Ö¸¶¨Çø¼äÄÚµÄÔªËØ¡£

127.0.0.1:6379[15]> RPUSH fp-language lisp (integer) 1 127.0.0.1:6379[15]> LRANGE fp-language 0 0 1) "lisp" 127.0.0.1:6379[15]> RPUSH fp-language scheme (integer) 2 127.0.0.1:6379[15]> LRANGE fp-language 0 1 1) "lisp" 2) "scheme"

LREM
LREM key count value
¸ù¾Ý²ÎÊý count µÄÖµ£¬ÒƳýÁбíÖÐÓë²ÎÊý value ÏàµÈµÄÔªËØ¡£
count µÄÖµ¿ÉÒÔÊÇÒÔϼ¸ÖÖ£º
¡¡¡¡count > 0 : ´Ó±íÍ·¿ªÊ¼Ïò±íβËÑË÷£¬ÒƳýÓë value ÏàµÈµÄÔªËØ£¬ÊýÁ¿Îª count ¡£
¡¡¡¡count < 0 : ´Ó±íβ¿ªÊ¼Ïò±íÍ·ËÑË÷£¬ÒƳýÓë value ÏàµÈµÄÔªËØ£¬ÊýÁ¿Îª count µÄ¾ø¶ÔÖµ¡£
¡¡¡¡count = 0 : ÒÆ³ý±íÖÐËùÓÐÓë value ÏàµÈµÄÖµ¡£
ʱ¼ä¸´ÔÓ¶È£º O(N)£¬N ΪÁбíµÄ³¤¶È¡£
·µ»ØÖµ£º
¡¡¡¡±»ÒƳýÔªËØµÄÊýÁ¿¡£
¡¡¡¡ÒòΪ²»´æÔÚµÄ key ±»ÊÓ×÷¿Õ±í (empty list)£¬ËùÒÔµ± key ²»´æÔÚʱ£¬LREM ÃüÁî×ÜÊÇ·µ»Ø 0 ¡£

127.0.0.1:6379[15]> LPUSH greet "morning" (integer) 1 127.0.0.1:6379[15]> LPUSH greet "hello" (integer) 2 127.0.0.1:6379[15]> LPUSH greet "morning" (integer) 3 127.0.0.1:6379[15]> LPUSH greet "hello" (int