馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 猸?List 绫诲瀷聽猸?/h2>
馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼馃巼
寮曡█
缁т笂绡囨枃绔犵殑 hash 绫诲瀷锛岃繖閲屼粙缁?Redis 涓殑鍒楄〃鐨勫熀鏈懡浠ゅ拰浣跨敤浠ュ強瀹為檯搴旂敤銆傚垪琛紙List锛夋槸 Redis 鎻愪緵鐨勪竴绉嶅父鐢ㄧ殑鏁版嵁缁撴瀯锛岄潪甯搁€傚悎鐢ㄦ潵澶勭悊涓€绯诲垪鏈夊簭鐨勬暟鎹€?/p>
1. 浠€涔堟槸 Redis 鍒楄〃锛?/h2>
Redis 鍒楄〃鏄竴绉嶅彲浠ュ瓨鍌ㄥ涓湁搴忓瓧绗︿覆鐨勬暟鎹被鍨嬨€備綘鍙互鎶婂畠鎯宠薄鎴愪竴涓畝鍗曠殑娓呭崟锛屾瘮濡傝喘鐗╂竻鍗曟垨鑰呭緟鍔炰簨椤瑰垪琛ㄣ€傚湪杩欎釜鍒楄〃閲岋紝姣忎釜鏉$洰閮芥槸涓€涓瓧绗︿覆锛屽苟涓斿畠浠寜鐓ф坊鍔犵殑椤哄簭鎺掑垪銆備綘鍙互鍦ㄥ垪琛ㄧ殑涓ょ杩涜鎻掑叆鎴栫Щ闄ゆ搷浣滐紝涔熷彲浠ヤ粠鍒楄〃涓幏鍙栨寚瀹氫綅缃殑鏁版嵁銆?/p>
鐗圭偣锛?/strong>
- 鏈夊簭鎬?/strong>锛氬垪琛ㄤ腑鐨勫厓绱犳槸鎸夌収娣诲姞椤哄簭鎺掑垪鐨勩€?/li>
- 璁块棶鏂瑰紡锛氬彲浠ラ€氳繃鏁板瓧绱㈠紩鏉ヨ闂垪琛ㄤ腑鐨勫厓绱狅紝绱㈠紩鍙互浠庡乏鍒板彸锛?, 1, 2...锛夋垨鑰呬粠鍙冲埌宸︼紙-1, -2, -3...锛夈€?/li>
- 鍏佽閲嶅锛氬垪琛ㄤ腑鐨勫厓绱犲彲浠ラ噸澶嶅嚭鐜般€?/li>
2. 濡備綍鎿嶄綔 Redis 鍒楄〃锛?/h2>
LPUSH mylist "banana" "cherry"
(integer) 3

杩欎釜鍛戒护灏?"banana"
鍜?"cherry"
渚濇娣诲姞鍒?mylist
鐨勬渶宸﹁竟锛岀粨鏋滄槸 ["cherry", "banana", "apple"]
銆?/p>
RPUSH
鍛戒护锛氬湪鍒楄〃鐨勫彸渚э紙灏鹃儴锛夋坊鍔犱竴涓垨澶氫釜鍏冪礌銆備緥濡傦細
redis> RPUSH mylist "date"
(integer) 4
redis> RPUSH mylist "elderberry" "fig"
(integer) 6
杩欎釜鍛戒护灏?"date"
銆?code>"elderberry" 鍜?"fig"
渚濇娣诲姞鍒?mylist
鐨勬渶鍙宠竟锛岀粨鏋滄槸 ["cherry", "banana", "apple", "date", "elderberry", "fig"]
銆?/p>
LPUSHX
鍜?RPUSHX
鍛戒护锛氳繖浜涘懡浠ょ被浼间簬 LPUSH
鍜?RPUSH
锛屼絾鍙湁褰撻敭宸茬粡瀛樺湪鏃舵墠浼氭墽琛屾彃鍏ユ搷浣溿€備緥濡傦細
redis> LPUSHX myotherlist "grape"
(integer) 0
redis> RPUSHX mylist "grape"
(integer) 7
濡傛灉 myotherlist
涓嶅瓨鍦紝鍒欎笉浼氭坊鍔犱换浣曞厓绱狅紱鑰?mylist
宸茬粡瀛樺湪锛屾墍浠ヤ細鍦ㄥ叾宸︿晶娣诲姞 "grape"
锛岀粨鏋滄槸 ["grape", "cherry", "banana", "apple", "date", "elderberry", "fig"]
銆?/p>
鑾峰彇鍏冪礌
-
LRANGE
鍛戒护锛氳幏鍙栧垪琛ㄤ腑鐗瑰畾鑼冨洿鍐呯殑鎵€鏈夊厓绱犮€備緥濡傦細redis> LRANGE mylist 0 2 1) "grape" 2) "cherry" 3) "banana" redis> LRANGE mylist -3 -1 1) "date" 2) "elderberry" 3) "fig"
绗竴涓懡浠よ繑鍥炰簡浠庣 1 涓埌绗?3 涓殑鎵€鏈夊厓绱狅紝绗簩涓懡浠よ繑鍥炰簡鏈€鍚庝笁涓厓绱犮€?/p>
-
LINDEX
鍛戒护锛氳幏鍙栧垪琛ㄤ腑鏌愪釜鐗瑰畾浣嶇疆鐨勫厓绱犮€備緥濡傦細redis> LINDEX mylist 2 "banana" redis> LINDEX mylist -1 "fig"
绗竴涓懡浠よ繑鍥炰簡浣嶄簬绗?3 浣嶇殑鍏冪礌
"banana"
锛岀浜屼釜鍛戒护杩斿洖浜嗘渶鍚庝竴涓厓绱?"fig"
銆?/p>
鍒犻櫎鍏冪礌
绉婚櫎浜?"grape"
锛屾柊鐨勫垪琛ㄤ负 ["cherry", "banana", "apple", "date", "elderberry", "fig"]
銆?/p>
RPOP
鍛戒护锛氫粠鍒楄〃鐨勫彸渚хЩ闄ゅ苟杩斿洖鏈€鍚庝竴涓厓绱犮€備緥濡傦細
redis> RPOP mylist
"fig"
绉婚櫎浜?"fig"
锛屾柊鐨勫垪琛ㄤ负 ["cherry", "banana", "apple", "date", "elderberry"]
銆?/p>
LREM
鍛戒护锛氬垹闄ゅ垪琛ㄤ腑涓庣粰瀹氬€肩浉鍖归厤鐨勫厓绱犮€備緥濡傦細
redis> LREM mylist 1 "apple"
(integer) 1
redis> LREM mylist 0 "banana"
(integer) 1
绗竴涓懡浠ょЩ闄や簡绗竴涓嚭鐜扮殑 "apple"
锛岀浜屼釜鍛戒护绉婚櫎浜嗘墍鏈?"banana"
鍏冪礌锛屾柊鐨勫垪琛ㄤ负 ["cherry", "date", "elderberry"]
銆?/p>
鎻掑叆鍏冪礌
LINSERT
聽鍛戒护锛氬湪鐗瑰畾浣嶇疆鎻掑叆鍏冪礌銆備緥濡傦細
绗竴涓懡浠ゅ湪聽redis> LINSERT mylist BEFORE "date" "avocado" (integer) 4 redis> LINSERT mylist AFTER "cherry" "blueberry" (integer) 5
"date"
聽涔嬪墠鎻掑叆浜喡?code>"avocado"锛岀浜屼釜鍛戒护鍦?code>"cherry"聽涔嬪悗鎻掑叆浜喡?code>"blueberry"锛屾柊鐨勫垪琛ㄤ负聽["cherry", "blueberry", "avocado", "date", "elderberry"]
銆?/li>
鏌ヨ闀垮害
LLEN
聽鍛戒护锛氳幏鍙栧垪琛ㄧ殑闀垮害銆備緥濡傦細redis> LLEN mylist (integer) 5
闃诲寮忔搷浣?/h6>
BLPOP
聽鍜屄?code>BRPOP聽鍛戒护锛氳繖浜涘懡浠ゆ槸聽LPOP
聽鍜屄?code>RPOP聽鐨勯樆濉炵増鏈€傚綋鍒楄〃涓虹┖鏃讹紝杩欎簺鍛戒护涓嶄細绔嬪嵆杩斿洖绌虹粨鏋滐紝鑰屾槸绛夊緟涓€娈垫椂闂达紝鐩村埌鏈夋柊鐨勫厓绱犺娣诲姞鍒板垪琛ㄤ腑銆備緥濡傦細
redis> BLPOP mylist 0
1) "cherry"
2) "blueberry"
redis> BRPOP mylist 0
1) "mylist"
2) "elderberry"
濡傛灉聽mylist
聽涓虹┖锛?code>BLPOP聽鍜屄?code>BRPOP聽浼氫竴鐩寸瓑寰咃紝鐩村埌鏈夋柊鍏冪礌琚坊鍔犮€?/p>
LPUSH queue "message2"
(integer) 2
redis> BRPOP queue 0
1) "queue"
2) "message2"
redis> BRPOP queue 0
1) "queue"
2) "message1"
绀句氦濯掍綋鏃堕棿绾?/h6>
瀵逛簬绀句氦濯掍綋骞冲彴鏉ヨ锛岀敤鎴风殑鍔ㄦ€佹洿鏂伴€氬父鎸夌収鏃堕棿椤哄簭灞曠ず銆傞€氳繃浣跨敤 Redis 鍒楄〃锛屾垜浠彲浠ヨ交鏉惧湴缁存姢姣忎釜鐢ㄦ埛鐨勬椂闂寸嚎銆傛瘡褰撶敤鎴峰彂甯冩柊鍐呭鏃讹紝灏卞皢鍏舵坊鍔犲埌鍒楄〃椤堕儴锛涜€屽綋鐢ㄦ埛娴忚鏃讹紝鍒欐寜闇€鍔犺浇鏈€鏂扮殑鍑犳潯鍔ㄦ€併€?/p>
瀵逛簬绀句氦濯掍綋骞冲彴鏉ヨ锛岀敤鎴风殑鍔ㄦ€佹洿鏂伴€氬父鎸夌収鏃堕棿椤哄簭灞曠ず銆傞€氳繃浣跨敤 Redis 鍒楄〃锛屾垜浠彲浠ヨ交鏉惧湴缁存姢姣忎釜鐢ㄦ埛鐨勬椂闂寸嚎銆傛瘡褰撶敤鎴峰彂甯冩柊鍐呭鏃讹紝灏卞皢鍏舵坊鍔犲埌鍒楄〃椤堕儴锛涜€屽綋鐢ㄦ埛娴忚鏃讹紝鍒欐寜闇€鍔犺浇鏈€鏂扮殑鍑犳潯鍔ㄦ€併€?/p>
绀轰緥锛?/p>
- 鍙戝竷鏂板井鍗氾細
redis> LPUSH user:1:timeline "tweet1" (integer) 1 redis> LPUSH user:1:timeline "tweet2" (integer) 2
- 鏌ョ湅鏈€鏂?10 鏉″井鍗氾細
redis> LRANGE user:1:timeline 0 9 1) "tweet2" 2) "tweet1"
浠诲姟璋冨害
鍦ㄦ煇浜涘悗鍙扮郴缁熶腑锛屽彲鑳介渶瑕佸畾鏈熸墽琛屼竴浜涗换鍔°€傝繖鏃跺氨鍙互鎶婂嵆灏嗚鎵ц鐨勪换鍔℃斁杩涗竴涓垪琛ㄩ噷锛岀劧鍚庤缃畾鏃跺櫒閫愪釜鍙栧嚭骞舵墽琛岃繖浜涗换鍔°€?/p>
绀轰緥锛?/p>
- 娣诲姞浠诲姟锛?
redis> RPUSH tasks "task1" (integer) 1 redis> RPUSH tasks "task2" (integer) 2
- 鎵ц浠诲姟锛?
redis> LPOP tasks "task1" redis> LPOP tasks "task2"
4. 鍐呴儴鏈哄埗绠€浠?/h2>
涓轰簡鎻愰珮鏁堢巼锛孯edis 浼氭牴鎹垪琛ㄧ殑瀹為檯澶у皬閫夋嫨涓嶅悓鐨勫唴閮ㄨ〃绀烘柟娉曪細
- 鍘嬬缉鍒楄〃锛坺iplist锛?/strong>锛氬鏋滃垪琛ㄤ腑鐨勫厓绱犱笉澶氫笖姣忎釜鍏冪礌閮藉緢灏忥紝閭d箞 Redis 浼氶€夋嫨涓€绉嶅彨鍋氬帇缂╁垪琛ㄧ殑鏂瑰紡鏉ュ瓨鍌紝杩欐牱鍙互鑺傜渷鍐呭瓨绌洪棿銆?/li>
- 閾捐〃锛坙inkedlist锛?/strong>锛氬綋鍒楄〃鍙樺緱寰堝ぇ鎴栬€呭寘鍚ぇ閲忓ぇ灏哄鐨勫厓绱犳椂锛孯edis 浼氳浆鑰屼娇鐢ㄩ摼琛ㄦ潵琛ㄧず杩欎釜鍒楄〃锛屼粠鑰屼繚鎸佹搷浣滄€ц兘涓嶅彈褰卞搷銆?/li>
涓轰簡鎻愰珮鏁堢巼锛孯edis 浼氭牴鎹垪琛ㄧ殑瀹為檯澶у皬閫夋嫨涓嶅悓鐨勫唴閮ㄨ〃绀烘柟娉曪細
- 鍘嬬缉鍒楄〃锛坺iplist锛?/strong>锛氬鏋滃垪琛ㄤ腑鐨勫厓绱犱笉澶氫笖姣忎釜鍏冪礌閮藉緢灏忥紝閭d箞 Redis 浼氶€夋嫨涓€绉嶅彨鍋氬帇缂╁垪琛ㄧ殑鏂瑰紡鏉ュ瓨鍌紝杩欐牱鍙互鑺傜渷鍐呭瓨绌洪棿銆?/li>
- 閾捐〃锛坙inkedlist锛?/strong>锛氬綋鍒楄〃鍙樺緱寰堝ぇ鎴栬€呭寘鍚ぇ閲忓ぇ灏哄鐨勫厓绱犳椂锛孯edis 浼氳浆鑰屼娇鐢ㄩ摼琛ㄦ潵琛ㄧず杩欎釜鍒楄〃锛屼粠鑰屼繚鎸佹搷浣滄€ц兘涓嶅彈褰卞搷銆?/li>
绀轰緥锛?/p>
- 浣跨敤鍘嬬缉鍒楄〃锛?
redis> RPUSH smalllist "a" "b" "c" (integer) 3 redis> OBJECT ENCODING smalllist "ziplist"
- 浣跨敤閾捐〃锛?
redis> RPUSH biglist "a" "b" "c" ... (瓒呰繃 512 涓厓绱? (integer) 513 redis> OBJECT ENCODING biglist "linkedlist"
5. 鍛戒护灏忕粨
鎿嶄綔绫诲瀷 | 鍛戒护 | 鏃堕棿澶嶆潅搴?/th> |
---|---|---|
娣诲姞 | RPUSH key value [value ...] | O(k)锛宬 鏄厓绱犱釜鏁?/td> |
LPUSH key value [value ...] | O(k)锛宬 鏄厓绱犱釜鏁?/td> | |
`LINSERT key BEFORE | AFTER pivot value` | |
鏌ユ壘 | LRANGE key start end | O(s+n)锛宻 鏄?start 鍋忕Щ閲忥紝n 鏄?start 鍒?end 鐨勮寖鍥?/td> |
LINDEX key index | O(n)锛宯 鏄储寮曠殑鍋忕Щ閲?/td> | |
LLEN key | O(1) | |
鍒犻櫎 | LPOP key | O(1) |
RPOP key | O(1) | |
LREM key count value | O(k)锛宬 鏄厓绱犱釜鏁?/td> | |
LTRIM key start end | O(k)锛宬 鏄厓绱犱釜鏁?/td> | |
淇敼 | LSET key index value | O(n)锛宯 鏄储寮曠殑鍋忕Щ閲?/td> |
闃诲鎿嶄綔 | BLPOP key [key ...] timeout | O(1) |
BRPOP key [key ...] timeout | O(1) |
浠ヤ笂灏辨槸鏈夊叧 Redis 鐨勫垪琛ㄧ殑鐭ヨ瘑锛屽悗缁細缁х画鏇存柊锛屾劅璋㈤槄瑙堬紒锛?/strong>