У меня есть распределенная система, в которой в одном месте я вставляю около 10000 элементов в список redis, а затем вызываю мой многократный захват приложений для обработки элементов. мне нужно иметь некоторый тип меток ListLeftPop с количеством элементов. Он должен удалить элементы из списка redis и вернуться к моему вызывающему приложению.Redis Pop list item По номерам позиций
Я использую Stackexchange.Resis.extension
Мой текущий метод только для ГЭТ (не поп) является
public static List<T> GetListItemRange<T>(string key, int start, int chunksize) where T : class
{
List<T> obj = default(List<T>);
try
{
if (Muxer != null && Muxer.IsConnected && Muxer.GetDatabase() != null)
{
var cacheClient = new StackExchangeRedisCacheClient(Muxer, new NewtonsoftSerializer());
var redisValues = cacheClient.Database.ListRange(key, start, (start + chunksize - 1));
if (redisValues.Length > 0)
{
obj = Array.ConvertAll(redisValues, value => JsonConvert.DeserializeObject<T>(value)).ToList();
}
}
}
catch (Exception ex)
{
Logger.Fatal(ex.Message, ex);
}
return obj;
}
Для поп-музыки и получить у меня есть найти фрагмент
var cacheClient = new StackExchangeRedisCacheClient(Muxer, new NewtonsoftSerializer());
var redisValues = cacheClient.ListGetFromRight<T>(key);
Но это будет сделано только для одного элемента
Итак, вы хотите, чтобы совать все элементы сразу из списка? –
Не все, но некоторые настраиваемые номера. Скажем, 100 за раз –
Попробовали var cacheClient = new StackExchangeRedisCacheClient (Muxer, new NewtonsoftSerializer()); var redisValues = cacheClient.ListGetFromRight (ключ); но он будет только поп один элемент –