/// <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); } }
/// <summary> /// 取得名单列表(分页) /// </summary> /// <param name="rosterType">名单类型</param> /// <param name="api">API</param> /// <param name="policy">策略</param> /// <param name="policyKey">策略Key</param> public async Task <(long count, IEnumerable <ListItem> items)> GetRosterListAsync(RosterType rosterType, string api, Policy policy, string policyKey, long skip, long take) { var key = FromatRosterKey(rosterType, api, policy, policyKey); //取得件数 var count = await _db.ZCardAsync(key); if (count == 0) { return(0, new List <ListItem>()); } //取得数据 var data = await _db.ZRangeWithScoresAsync(key, 0, -1); return(count, data.Select(x => new ListItem { Value = x.member, ExpireTicks = x.score })); }