我有一个分布式系统在一个地方我插入约10000项在redis列表中然后调用我的多个应用程序钩来处理项目。我需要的是有一些ListLeftPop类型的方法与项目的数量。它应该从redis列表中删除项目并返回到我的调用应用程序。Redis流行列表项目按项目数量
我使用Stackexchange.Resis.extension
我目前的方法只是GET(不是POP)是
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;
}
POP和得到我有找到一个片段
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(key);但它只会弹出单个项目 –