/// <summary> /// 保存调用记录 /// </summary> public async Task AddApiRecordAsync(string api, Policy policy, string policyKey, string policyValue, DateTime now, int duration) { var key = FromatApiRecordKey(api, policy, policyKey, policyValue); await _db.ZAddAsync(key, (now.Ticks, now.Ticks.ToString())); //设置过期时间 await _db.ExpireAsync(key, TimeSpan.FromSeconds(duration)); }
/// <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); }