예제 #1
0
        /// <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);
            }
        }