/// <summary> /// 取得名单列表 /// </summary> public async Task <IEnumerable <ListItem> > GetRosterListAsync(RosterType rosterType, string api, Policy policy, string policyKey) { var key = FromatRosterKey(rosterType, api, policy, policyKey); //判断是否存在key if (await _db.ExistsAsync(key)) { //取得数据 var data = await _db.ZRangeWithScoresAsync(key, 0, -1); return(data.Select(x => new ListItem { Value = x.member, ExpireTicks = x.score })); } else { var data = (await _storage.GetRosterListAsync(rosterType, api, policy, policyKey)).ToList(); //Ip地址转换 if (policy == Policy.Ip) { foreach (var item in data) { item.Value = CommonHelper.IpToNum(item.Value); //保存 await _db.ZAddAsync(key, (item.ExpireTicks, item.Value)); } } //设置缓存过期时间 await _db.ExpireAsync(key, expiry.Value); return(data); } }