阻塞式命令
執行緒安全
前言
體能狀態先於精神狀態,習慣先於決心,聚焦先於喜好。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 [···] 以左為首 將一(多)個元素推入隊首以左為隊首,新元素放到隊首「003」127.0.0.1:6379> lpush llist 001 002 003
(integer) 3
127.0.0.1:6379> lrange llist 0 100
「002」
「001」
lrange key start end 返回列表中偏移量自start至end的元素
以左為隊首,隊首為0開始rpop key 以右為首 移除並返回列表隊首元素包含 start和end對應的元素
檢視 上面兩個命令列的案例
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型別是乙...