2016-09-15 18 views
0

是否有任何方法在「Redis ServiceStack客戶端」中批量創建密鑰(SETS)?當然,沒有把for循環。在Redis中批量創建密鑰 - ServiceStack C#

有在Redis的一個命令,它做到這一點:MSET,但在ServiceStack.Redis客戶我找不到這個命令的任何實現。

例:

MSET key1 "val1" key2 "val2" 

UPDATE:
@mythz建議一種方式來創建多組但具有單個構件SETALL()
此外,我發現了一種散裝由AddRangeToSet(string setId, List items)

成員添加到一組不過,有沒有什麼辦法,而批量創建SETS我可以添加多個成員。 喜歡的東西

XXXCOMMAND key1 "val11","val12","val13" key2 "val21","val22" 
+0

是不是隻是方法'SetAll()',如這裏列出https://github.com/ServiceStack/ServiceStack.Redis/wiki/IRedisClient? – kiziu

+0

此命令在內部執行for循環https://github.com/ServiceStack/ServiceStack.Redis/blob/16cdeda7b54776d62fc11f0ec29cb615bb3e87b3/src/ServiceStack.Redis/BasicRedisClientManager.cs – JerryGoyal

+0

我無法看到(https: //github.com/ServiceStack/ServiceStack.Redis/blob/16cdeda7b54776d62fc11f0ec29cb615bb3e87b3/src/ServiceStack.Redis/RedisClient.cs#L251)。首先,創建字節數組,然後與命令MSET合併,然後發送。我假設,通過循環你的意思是在每個鍵的循環中運行命令。 – kiziu

回答

1

可以在ServiceStack.Redis使用SetValuesSetAll的API,其batches all keys into a single MSET operation,如:

var map = new Dictionary<string,string> { 
    {"key1","val1"}, 
    {"key2","val2"}, 
    {"key3","val3"}, 
}; 

redis.SetAll(map); 
在ServiceStack.Redis是採取集合

大多數操作都在一個單一的發操作或當它不存在於流水線中並作爲單個網絡寫入發送時。

+0

這是很好的批量添加單個成員每套..有沒有辦法將多個memebers批量添加到多個集?類似MSADD key1「val11」,「val12」,「val13」key2「val21」,「val22」,「val23」 – JerryGoyal

+0

@JerryGoyal這不會添加到任何SET,它將使用Redis MSET bulk命令添加多個鍵/值。 MSADD不是有效的Redis命令和[不存在SET命令存在](http://redis.io/commands#set),它將成員添加到多個集合中。您可以使用事務或管道在單個管道中調用'AddRangeToSet()'。 – mythz