[英]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.