我想在单个调用中使用键列表从Redis获取所有集合。根据文档,Redis为此提供了SSCAN命令,但是由于我使用StackExchange.Redis作为Redis适配器,因此我猜想此命令在此适配器中没有任何此类方法。所以我要寻找两件事:
谢谢
在单个调用中获取许多SET的示例C#代码如下:我使用StackExchange.Redis作为Redis连接器:
using StackExchange.Redis; using System; using System.Text; namespace RedisGetMultipleKeys { /// <summary> /// Class to perofrme operations on SE.Redis /// </summary> class Program { /// <summary> /// Executes necessary pre-requisites /// </summary> /// <param name="args"></param> static void Main(string[] args) { //Connect Redis var _cache = Program.Connect(); //Store 10k Sets string prefix = "user"; StringBuilder keys = new StringBuilder(); for (int i = 0; i < 10000; i++) { keys.Append(" " + prefix + i); _cache.SetAdd(prefix + i, i); } var keyList = new RedisKey[10000]; //Generate keys array for (int i = 0; i < 10000; i++) { var key = new RedisKey(); key = prefix + i; keyList.SetValue(key, i); } var startTime = DateTime.Now; //Perform SUNION var values = _cache.SetCombine(SetOperation.Union, keyList); var endTime = DateTime.Now; TimeSpan diff = endTime.Subtract(startTime); Console.WriteLine("total time taken to read 10k keys = " + diff); Console.Read(); //TODO: to be changed accordingly to read Set values returned other than String foreach (var value in values) { Console.WriteLine(value.ToString()); } endTime = DateTime.Now; diff = endTime.Subtract(startTime); Console.WriteLine("total time taken to read 10k keys = " + diff); Console.Read(); } /// <summary> /// Connects to Redis db /// </summary> /// <returns>Returns an instance of Redis db</returns> private static IDatabase Connect() { string redisConnection = "localhost:6379,ssl=false,allowAdmin=true,ConnectRetry=3,ConnectTimeout=5000,defaultDatabase=1"; ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(redisConnection); return connection.GetDatabase(); } }
}
我希望它能帮助C#开发人员寻找解决方案。由于Mgravell从SE.Redis开发团队由他的建议帮助我。在GitHub上可以找到更多讨论,如何通过在单个调用中传递集合密钥列表来获取多个集合