簡體   English   中英

ServiceStack.Redis SearchKeys

[英]ServiceStack.Redis SearchKeys

我在C#上使用ServiceStack.Redis客戶端。

我使用以下模式a :: name :: 1添加了大約500萬個type1記錄,並使用模式b :: RecId :: 1添加了 1100萬個type2記錄。

現在我正在使用redis類型的client作為client = redis.As<String> 我想檢索所有type2的鍵。 我正在使用以下模式:

var keys = client.SearchKeys("b::RecID::*");

但是檢索密鑰需要永久(大約3-5分鍾)。

有沒有更快,更有效的方法來做到這一點?

您應該努力工作,以避免需要掃描鍵空間。 KYES實際上是一個服務器停止器,但是即使您有可用的SCAN ,也不要這樣做 現在,你可以選擇維持你在一個地方集中可用的東西的鑰匙,但沒有SRANGE等-在第2,你不得不使用SMEMBERS ,它仍然會需要返回幾百萬條記錄-但至少它們將全部可用。 在更高版本的服務器中,您可以訪問SCAN (認為​​: KEYS )和SSCAN (認為​​: SMEMBERS ),但是最終您僅遇到想要數百萬行的問題,而這從來都不是免費的。

如果可能,可以通過使用主/從對並在從屬服務器上運行昂貴的操作來減輕影響。 至少在殺死服務器時,其他客戶端也可以執行某些操作。

Redis中的keys命令很慢(嗯,不是很慢,但是很耗時)。 它還阻止服務器在運行時接受任何其他命令。

如果您真的想遍歷所有鍵,請看一下scan命令,盡管對此我不了解ServiceStack。

您可以使用SCAN命令進行循環搜索,其中每次搜索都限於較小數量的鍵。 有關完整示例,請參閱本文: http : //blog.bossma.cn/csharp/nservicekit-redis-support-scan-solution/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM