/// <summary> /// 添加名单 /// </summary> /// <param name="rosterType">名单类型</param> /// <param name="policy">策略</param> /// <param name="policyKey">策略Key</param> /// <param name="expiry">过期时间</param> /// <param name="item">项目</param> /// <remarks>因为要保存过期时间,所以名单通过Redis 有序集合(sorted set)来存储,score来存储过期时间Ticks</remarks> public async Task AddRosterAsync(RosterType rosterType, string api, Policy policy, string policyKey, TimeSpan?expiry, params string[] item) { if (item == null || item.Length == 0) { return; } //过期时间计算 double score = expiry == null ? double.PositiveInfinity : DateTime.Now.Add(expiry.Value).Ticks; var key = FromatRosterKey(rosterType, api, policy, policyKey); //保存 await _db.ZAddAsync(key, (score, item)); //删除过期名单数据 await _db.ZRemRangeByScoreAsync(key, 0, DateTime.Now.Ticks); }