2013-10-04 60 views
1

我想知道這樣的事情是否可行。我有一個Redis的清單工作,並想知道如果我可以從列表中移動項目列表的這樣的頂部:Redis將項目從列表中間移到頂部

LPUSH MYLIST「這」

LPUSH mylist "is" 
LPUSH mylist "a" 
LPUSH mylist "Test" 

Somehow Move "a" to top 

LRANGE mylist 

1. "a" 
2. "This" 
3. "Is" 
4."Test" 

感謝幫助!

回答

4

Redis列表使用Linked lists實現,並且鏈接列表不適合這種用途(即隨機訪問和高效索引)。

你將不得不存儲所有的元素,直到「一」(含)的地方,然後從列表中使用LTRIM刪除它們,然後在你想要的順序(再次把他們即後RPOP荷蘭國際集團的最後一個元素和LPUSH它)。從Redis supports開箱即用,您可以使用嵌入式Lua腳本執行此操作。

但是,如果您希望每個單詞只在您的列表中出現一次,則可以使用Sorted Set高效完成此操作。您必須將特定元素的分數更新爲比所有其他分數更高的分數(ZADD)。然後你會做一個ZRANGEBYSCORE來檢索重新排序的集合。

但是,使用排序集有其折衷,主要是元素的插入/刪除比從列表中推入/彈出值(即在常量時間內發生)要慢(即發生在對數時間內)。這一切都取決於你的問題,你應該權衡不同的方法(Redis文檔提供了每個操作的時間複雜度)並選擇適合你的問題的方法。

相關問題