我有一個很大的產品目錄樹,它目前包含〜36000個類別和〜1千萬個產品(即樹葉)。 (最大深度爲5),它的結構是這樣的:如何在Redis中存儲聚集的目錄樹搜索結果
Cat1
|_Cat11
| |_Cat111
| | |_Cat1111
| | | |_Product1
| | | |_...
| | |_Cat1112
| | | |_Product1
| | | |_...
| | |_Cat1113
| | | |_Product1
| | | |_...
| |_Cat112
| |_Cat1121
| | |_Product1
| | |_...
| |_Cat1122
| | |_Product1
| | |_...
| |_Cat1123
| |_Product1
| |_...
|_Cat12
| |_Cat121
| | |_Cat1211
| | |_Cat1212
| | |_Cat1213
| |_Cat122
| |_Cat1221
| |_Cat1222
| |_Cat1223
|_...
Cat2
|...
當搜索該目錄(使用SQL Server FreeText的搜索),我收到了一堆類別和產品的背面非常快。有些搜索可以獲得很多產品的點擊量。 我希望將結果彙總並顯示當前展開的每個類別的總點擊次數。像這樣(在不同級別2例):
**Ex1 (first level)**
Cat1(563)
|
Cat2(332)
|
Cat8(2)
**Ex2 (second level)**
Cat1
|_Cat12(102)
|_Cat14(201)
|_...
我迄今試圖將存儲在Redis的所有父/子關係(存儲爲套)。然後,爲了獲得彙總結果,我簡單地從產品(從搜索結果)到其父母,直到目前擴展的類別(或更確切地說,它的直接子女)遍歷,以找到要呈現的類別並計算匹配的產品數量搜索。如果我在搜索結果中有大約5000種產品,那麼這大約需要20秒。漫長的路要走。
什麼是更好的方法來實現這個目標?一種方法是將所有100萬種產品都彙總到每個類別上,但這需要3600萬個密鑰,並且可能需要大量內存。我目前已經使用500Mb。
你使用lua腳本來做這個搜索嗎?它不會,會有太多的網絡往返,以減慢搜索速度。你應該避免使用'keys'命令來匹配鍵。 – yinqiwen
我使用名爲ServiceStack的c#客戶端進行搜索。我不熟悉lua。它在Redis服務器上運行嗎?如果使用該腳本,我會將整個腳本發送到服務器嗎?我不使用keys命令(我認爲)。我只在客戶端使用「GetSet()」方法。也許它使用引擎蓋下的鑰匙,不知道。爲什麼那麼糟糕,該怎麼做呢? – Thomas