0 2 Redis學習 列表型別及主要命令列

2021-09-24 09:39:42 字數 4697 閱讀 6012

阻塞式命令

執行緒安全

前言

體能狀態先於精神狀態,習慣先於決心,聚焦先於喜好。

redis 官方完整的命令列文件

本文實驗 redis 版本為3.2.100

redis 列表型別簡介

redis 列表是對鍊錶結構的支援

redis 列表用以儲存有序的字串,字串可以重複

redis 支援對列表的兩端進行操作,新增或者刪除元素

redis支援對列表中某乙個序數的元素進行操作——序數需合法

redis支援對列表中指定序數區間的元素的集中獲取

redis列表無法儲存null值,「null」字串是可以的

redis支援用阻塞的方式經過有限時長等待獲取列表即將新增的元素-redis 列表可以用於實現訊息傳送和任務佇列(task queue)

列表的左右-將列表自上向下羅列,上就是所謂的左,下就是所謂的右,也可以叫隊首為左,隊尾為右

列表可以認為是一般資料結構中的list

常用命令行

基本操作

rpush key value [···] 以右為首 將一(多)個元素推入隊首

以右為隊首,新元素放到隊尾

127.0.0.1:6379> rpush rlist 001 002 003

(integer) 3

127.0.0.1:6379> lrange rlist 0 100

1) "001"

2) "002"

3) "003"

lpush key value [···] 以左為首 將一(多)個元素推入隊首
以左為隊首,新元素放到隊首

127.0.0.1:6379> lpush llist 001 002 003

(integer) 3

127.0.0.1:6379> lrange llist 0 100

「003」

「002」

「001」

lrange key start end 返回列表中偏移量自start至end的元素

以左為隊首,隊首為0開始

包含 start和end對應的元素

檢視 上面兩個命令列的案例

rpop key 以右為首 移除並返回列表隊首元素
127.0.0.1:6379> lrange llist 0 100

1) "003"

2) "002"

3) "001"

127.0.0.1:6379> rpop llist

"001"

127.0.0.1:6379> lrange llist 0 100

1) "003"

2) "002"

lpop key 以左為首 移除並返回列表隊首元素
127.0.0.1:6379> lrange rlist 0 100

1) "100"

2) "200"

3) "300"

127.0.0.1:6379> lpop rlist

"100"

127.0.0.1:6379> lrange rlist 0 100

1) "200"

2) "300"

lindex key offset 以左為首 返回列表中偏移量為offset的元素
從左端計數,以0為第乙個數

127.0.0.1:6379> lrange rlist 0 100

1) "200"

2) "300"

127.0.0.1:6379> lindex rlist 0

"200"

ltrim key start end 以左為首,修剪列表保留start到end區間的元素
從左端計數,以0開始

包含 start和end對應的元素

127.0.0.1:6379> lrange rlist 0 100

1) "200"

2) "300"

127.0.0.1:6379> ltrim rlist 1 1

ok127.0.0.1:6379> lrange rlist 0 100

1) "300"

lset key index value 以左為首,將元素指定偏移量的值進行替換
從左開始計數,以0開始

127.0.0.1:6379> lrange rlist 0 100

1) "300"

127.0.0.1:6379> lset rlist 0 400

ok127.0.0.1:6379> lrange rlist 0 100

1) "400"

rpoplpush source-key dest-key 從源列表右側隊首彈出元素推入目標列表左端隊首
source-key 源列表

dest-key 目標列表

用於在兩個列表之間移動元素

一次只能剪下乙個元素

127.0.0.1:6379> lpush llista 100 200 300

(integer) 3

127.0.0.1:6379> lrange llista 0 100

1) "300"

2) "200"

3) "100"

127.0.0.1:6379> rpoplpush llista llistb

"100"

127.0.0.1:6379> rpoplpush llista llistb

"200"

127.0.0.1:6379> lrange llistb 0 100

1) "200"

2) "100"

127.0.0.1:6379> lrange llista 0 100

1) "300"

127.0.0.1:6379>

阻塞式命令
block 阻塞,阻塞式命令以b開頭

blpop key[···] timeout 如果有元素則從左側彈出,無可彈元素阻塞等待n秒
如果列表左側有元素,則立即彈出元素,該元素將從列表去除

如果沒有元素,則等待n秒,n秒內有新元素加入則彈出

如果超時沒有元素彈出,則返回 (nil)

允許使用多個列表,多個列表按照先後順序,只要有乙個元素存在就彈出並停止

127.0.0.1:6379> lpush list 100 200 300

(integer) 3

127.0.0.1:6379> blpop list 3

1) "list"

2) "300"

127.0.0.1:6379> blpop list 10

1) "list"

2) "200"

127.0.0.1:6379> blpop list 10

1) "list"

2) "100"

127.0.0.1:6379> blpop list 3

(nil)

(3.09s)

brpop key[···] timeout 如果有元素則從右側彈出,無可彈元素阻塞等待n秒
如果列表右側有元素,則立即彈出元素,該元素將從列表去除

如果沒有元素,則等待n秒,n秒內有新元素加入則彈出

如果超時沒有元素彈出,則返回 (nil)

允許使用多個列表,多個列表按照先後順序,只要有乙個元素存在就彈出並停止

127.0.0.1:6379> lpush list 100 200 300

(integer) 3

127.0.0.1:6379> brpop list 3

1) "list"

2) "100"

127.0.0.1:6379> brpop list 3

1) "list"

2) "200"

127.0.0.1:6379> brpop list 3

1) "list"

2) "300"

127.0.0.1:6379> brpop list 3

(nil)

(3.04s)

brpoplpush source-key dest-key timeout 從源列表右側彈出推入目標列表左端,如果無可彈元素則阻塞n秒等待
source-key 源列表

dest-key 目標列表

用於在兩個列表之間移動元素

參考 rpoplpush source-key dest-key 比對,該命令增加了阻塞邏輯

127.0.0.1:6379> brpoplpush lista listb 3

"300"

127.0.0.1:6379> brpoplpush lista listb 3

(nil)

(3.02s)

執行緒安全

多執行緒模式下,rpush 並不是執行緒安全的。

Redis學習筆記02 Redis的安裝

安裝環境 ubuntu16虛擬機器,win7主機,securecrt遠端登入,redis 2.4.17.tar.gz 步驟1 步驟2,編譯源程式 解壓 tar zxvf redis 2.4.17.tar.gz 進入redis目錄 cd redis 2.4.17 makefile make 進入src...

Redis學習筆記 02 Redis基礎操作

一 啟動redis 有三種方法啟動redis 預設配置 執行配置 配置檔案啟動。1 預設配置 這種方法會使用redis的預設配置來啟動,下面就是redis server執行後輸出的相關日誌 可以看到直接使用redis server啟動redis後,會列印出一些日誌,通過日誌可以看到一些資訊,上例中可...

Redis系列 02 Redis五大資料型別

string型別是redis最基本的資料型別,因為string型別在redis中的存值是二進位制安全的,因此,只關心存值是否為二進位制的字串。hash型別是乙個hashmap的資料型別,field部分不可重複,重複會覆蓋原有資料。list型別是乙個字串雙向鍊錶,可以在左右兩端運算元據 set型別是乙...