2016-09-27 22 views

回答

3

您需要lrangeLTRIM結合起來,實現這一目標發送。

http://redis.io/commands/ltrim

要檢索和刪除列表中的第一個100個元素。

lrange list 0 100 
ltrim list 0 100 
+0

只有ltrim不夠嗎? – Prem

+1

Ltrim的回覆是正確的。如果你想得到你需要的值,在得到它之後,你可以發佈ltrim從列表中刪除它們。將它們組合在一個lua中以使其成爲原子 –

+1

這在幾個層面上是不正確的。首先要獲得你想要做的前100件商品'LRANGE list 0 99',然後就是LTRIM對你所說的話進行相反的處理,它會留下前100個項目並刪除其他所有項目。如果你想刪除前100個項目,你需要做'LTRIM列表100 -1'(即保留從項目100開始的一切) 但更重要的是,這是非常不安全的,因爲這個操作不是原子的,所以列表可能在第一個和第二個語句之間改變 - 你需要弄清楚如何使它成爲原子 – mlasevich

1

據我所知,沒有預定義的命令來彈出列表中的一系列項目。 你必須發送一系列的rpop命令到redis。 Redis通常會發送很多短命令,因此連續發送100個(甚至1000個)rpop命令並不是問題。 爲了提高性能,您可以使用「流水線」在一個操作中發送多個命令。確切的做法取決於你的驅動程序。

另一種方式是寫一個Lua腳本,並使用eval