redis队列批量获取
? ? ? ? 一般情況下,從 list 中獲取數(shù)據(jù)可以是 lpop 或者 rpop,每執(zhí)行一次,如果有數(shù)據(jù)就返回?cái)?shù)據(jù),如果沒(méi)有就返回空。
? ? ? ? 在此基礎(chǔ)上又有兩個(gè)優(yōu)化后的命令 blpop 和?brpop,也是每次只取一條記錄,但碰到 list 為空時(shí),就陷入阻塞狀態(tài),直到有數(shù)據(jù)為止。
? ? ? ? 以上四個(gè)命令都是單條記錄獲取,事實(shí)上 redis 還提供了 lrange 和 ltrim 兩個(gè)命令,可搭配使用使得批量獲取 list 中數(shù)據(jù)。
? ? ? ? lrange 返回 list 中指定區(qū)間內(nèi)的元素,區(qū)間范圍通過(guò)偏移量 start 和 end 確定。如往隊(duì)列 chars 塞入26個(gè)英文字母:
127.0.0.1:6379> rpush chars a b c d e f g h i j k l m n o p q r s t u v w x y z (integer) 26 127.0.0.1:6379> llen chars (integer) 26? ? ? ? 如果查看隊(duì)列 chars 中前 10 條數(shù)據(jù):
127.0.0.1:6379> lrange chars 0 91) "a"2) "b"3) "c"4) "d"5) "e"6) "f"7) "g"8) "h"9) "i" 10) "j" 127.0.0.1:6379> llen chars (integer) 26? ? ? ? 注意,此時(shí)雖然能獲取到 list 中數(shù)據(jù),但是數(shù)據(jù)并沒(méi)有從 list 中刪除,從執(zhí)行 llen 命令顯示還有 26 條記錄也能看出來(lái)。這時(shí)候就要派上 ltrim 命令了。
? ? ? ? ltrim 命令是對(duì)一個(gè) list 進(jìn)行裁剪,只獲取指定區(qū)間內(nèi)的元素,區(qū)間范圍也由偏移量 start 和 end 確定。如果 end 值為 -1,則保留到最后一個(gè)元素。
? ? ? ? 由于已經(jīng)拿到 list 中前 10 條數(shù)據(jù),現(xiàn)在只需要保留從第 11 個(gè)元素開(kāi)始及后面的所有數(shù)據(jù)。
127.0.0.1:6379> ltrim chars 10 -1 OK 127.0.0.1:6379> llen chars (integer) 16 127.0.0.1:6379> lrange chars 0 -11) "k"2) "l"3) "m"4) "n"5) "o"6) "p"7) "q"8) "r"9) "s" 10) "t" 11) "u" 12) "v" 13) "w" 14) "x" 15) "y" 16) "z"? ? ? ? 在執(zhí)行 ltrim 命令后可以看到隊(duì)列 chars 中只剩下 16 條數(shù)據(jù),并且刪除的數(shù)據(jù)恰好就是前面通過(guò) lrange 獲取的 10 條數(shù)據(jù)。
? ? ? ? 至此就實(shí)現(xiàn)了批量獲取 redis 隊(duì)列中數(shù)據(jù),相對(duì)逐條獲取 rpop 和 brpop,效率要高得多。
?
?
總結(jié)
以上是生活随笔為你收集整理的redis队列批量获取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AI平台、AI中台架构
- 下一篇: 写标流程学习总结