【发布时间】:2016-10-13 09:40:18
【问题描述】:
我有一个分布式系统,我在一个地方在一个 redis 列表中插入大约 10000 个项目,然后调用我的多个应用程序挂钩来处理项目。我需要的是有一些带有项目数量的 ListLeftPop 类型的方法。它应该从 redis 列表中删除项目并返回到我的调用应用程序。
我正在使用 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;
}
对于 Pop 和 get 我找到了一个 sn-p
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);但它只会弹出单个项目 -
是队列还是堆栈?我的意思是 lpush lpop(队列)或 lpush rpop(堆栈)。
标签: c# caching redis stackexchange.redis .net-4.5.2