StackExchange.Redis組件中未提供List<T>直接添加Redis.List的方法,須要手動循環加入。redis
var cacheName = string.Format(GameSalesSystemConsts.CacheDistrbution,userId.ToString(), type.ToString());
var idList = new List<long>();
RedisValue[] redisList = { };code
//翻頁 先判斷是否是第一頁
if (page == -1)
{
redisList = await _database.ListRangeAsync(cacheName);
}
else
{
redisList = await _database.ListRangeAsync(cacheName, page * 20, page * 20 + 20);
}orm
//若是redis中沒有數據則加入Redis
if (redisList.Count() <= 0)
{
var data = (await GetByUserIdAsync(userId, type)).Select(p=>p.SourceUserId).ToList();
foreach (var item in data)
{
_database.ListRightPush(cacheName, item);
}
redisList = await _database.ListRangeAsync(cacheName);
}blog
//從redis中循環取出來List
foreach (var item in redisList)
{
var i = Newtonsoft.Json.JsonConvert.DeserializeObject<long>(item);
idList.Add(i);
}string
//IdList取出對應的數據it
var amount = await GetAmountBySourceUserId(idList);
var name = await _userService.GetUserNameDescAsync(idList);
var profile = await _userService.GetUserImgDescAsync(idList);io
//返回數據結果class
List<DistributionOutPut> list = new List<DistributionOutPut>();foreach
for (int i = 0; i < idList.Count; i++)
{
DistributionOutPut output = new DistributionOutPut()
{
rank = i+1,
amount = amount[i].ToString(),
img = profile[i],
name = name[i]
};
list.Add(output);
}List
return list;