redis實戰 Redis命令之列表

2021-09-22 20:17:00 字數 4521 閱讀 7940

列表的主要優點在於它可以包含多個字串值,使得使用者可以將資料集中在同乙個地方。redis允許使用者從序列的兩端推入或者彈出元素,獲取列表元素,以及執行各種常見的列表操作。

命令用例

描述注意

rpush

rpush key value [value …]

從右端推入乙個或多個值

多個值用空格隔開

lpush

lpush key value [value …]

從左端推入乙個或多個值

多個值用空格隔開

rpop

rpop key

移除最右端的元素

如果列表已經為空,則返回nil

lpop

lop key

移除最左端的元素

如果列表已經為空,則返回nil

lindex

lindex key offset

查詢偏移量為offset的元素

如果offset不存在,則返回nil

lrange

lrange key start end

查詢偏移量在start和end之間的元素

包含start和end的元素,0為第乙個,-1為最後乙個

ltrim

ltrim key start end

對列表進行修剪,只保留start和end偏移量之間的元素

包含start和end,0為第乙個,-1為最後乙個

示例

右端推入

127.0.0.1:6379> rpush list1 s1 s2

(integer) 2

檢視元素

127.0.0.1:6379> lrange list1 0 -1

1) "s1"

2) "s2"

移除最右端元素,如果列表已經為空,則返回nil

127.0.0.1:6379> rpop list1

"s2"

127.0.0.1:6379> rpop list1

"s1"

127.0.0.1:6379> rpop list1

(nil)

左端推入

127.0.0.1:6379> lpush list1 s1

(integer) 1

127.0.0.1:6379> lrange list1 0 -1

1) "list1"

127.0.0.1:6379> lpush list1 s2 s3 s4 s5

(integer) 2

根據偏移量offset查詢元素,如果偏移量不存在,則返回nil

127.0.0.1:6379> lindex list1 0

"list1"

127.0.0.1:6379> lindex list1 6

(nil)

修剪列表

127.0.0.1:6379> lrange list1 0 -1

1) "s5"

2) "s4" -- start=1

3) "s3" -- end=2

4) "s2"

5) "s1"

127.0.0.1:6379> ltrim list1 1 2

ok127.0.0.1:6379> lrange list1 0 -1

1) "s4"

2) "s3"

例如列表元素為: str5l str4 str3 str2 str101

234-5

-4-3

-2-1

str5

str4

str3

str2

str1

用lindex驗證偏移量為0和-1的值是否等

127.0.0.1:6379> lrange list1 0 -1

1) "list5"

2) "list4"

3) "list3"

4) "list2"

5) "list1"

127.0.0.1:6379> lindex list1 0

"str5"

127.0.0.1:6379> lindex list1 1

"str4"

127.0.0.1:6379> lindex list1 2

"str3"

127.0.0.1:6379> lindex list1 3

"str2"

127.0.0.1:6379> lindex list1 4

"str1"

127.0.0.1:6379> lindex list1 -1

"str1"

127.0.0.1:6379> lindex list1 -2

"str2"

127.0.0.1:6379> lindex list1 -3

"str3"

127.0.0.1:6379> lindex list1 -4

"str4"

127.0.0.1:6379> lindex list1 -5

"str5"

ltrim和lrange可以構建出乙個在功能上類似於lpop和rpop,但是可以一次彈出多個元素的操作。

可以實現: 命令

用例描述

blpop

blpop key [key …] timeout

彈出乙個或多個列表最左端的元素,或者在timeout秒內阻塞直到有可彈出的元素出現

brpop

brpop key [key …] timeout

彈出乙個或多個列表最右端的元素,或者在timeout秒內阻塞直到有可彈出的元素出現

rpoplpush

rpoplpush source-key dest-key

從列表source右端彈出並從列表dest的左端推入, 並向使用者返回這個元素

brpoplpush

brpoplpush source-key dest-key timeout

從列表source右端彈出並從列表dest的左端推入, 並向使用者返回這個元素, 如果source為空那麼會在timeout秒內阻塞並等待可彈出的元素出現

例如:阻塞彈出元素

127.0.0.1:6379> lrange list1 0 -1

1) "s4"

2) "s3"

127.0.0.1:6379> blpop list1 10

1) "list1"

2) "s4"

127.0.0.1:6379> lrange list1 0 -1

1) "s3"

127.0.0.1:6379> blpop list1 10000

1) "list1"

2) "s3"

阻塞等待要彈出的元素

客戶端1:

127.0.0.1:6379> lrange list1 0 -1

(empty list or set)

127.0.0.1:6379> blpop list1 10000

新開啟客戶端2,並lpush乙個新元素

~ redis-cli

127.0.0.1:6379> lpush list1 newstr

(integer) 1

客戶端1的變化:

127.0.0.1:6379> blpop list1 10000

1) "list1"

2) "newstr"

(82.76s)

列表間轉移元素

127.0.0.1:6379> lrange list1 0 -1

1) "v3"

2) "v2"

3) "v1"

127.0.0.1:6379> lrange list2 0 -1

1) "s2"

2) "s1"

# 將list1 的元素轉移到list2中

127.0.0.1:6379> rpoplpush list1 list2

"v1"

127.0.0.1:6379> rpoplpush list1 list2

"v2"

127.0.0.1:6379> rpoplpush list1 list2

"v3"

127.0.0.1:6379> rpoplpush list1 list2

(nil)

# 結果

127.0.0.1:6379> lrange list1 0 -1

(empty list or set)

127.0.0.1:6379> lrange list2 0 -1

1) "v3"

2) "v2"

3) "v1"

4) "s2"

5) "s1"

redis實戰 Redis命令之集合

redis的集合以無序的方式儲存多個各不相同的元素,使用者可以快速對集合執行新增元素 移除元素以及檢查元素是否存在於集合中的操作。命令用例 描述注意 sadd sadd key item item 將乙個或多個元素插入到集合中,並返回被新增元素當中原本不存在於集合中的數量 srem srem key...

Redis 命令(十) 之 Redis 指令碼

redis 指令碼使用 lua 直譯器來執行指令碼。redis 2.6 版本通過內嵌支援 lua 環境。執行指令碼的常用命令為 eval。語法 eval 命令的基本語法如下 redis 127.0.0.1 6379 eval script numkeys key key arg arg 例項 以下例...

redis學習之redis命令(一)

redis命令用於在redis服務上執行操作。要在redis服務上執行命令需要乙個redis客戶端。redis客戶端在redis安裝包中。redis客戶端基本語法為 redis cli啟動客戶端,連線本地的redis服務 redis cli redis 127.0.0.1 6379 redis 12...