protected async Task StoreAsync(string key, string json, ITokenMetadata token, TimeSpan expiresIn) { var tokenKey = keyGenerator.GetKey(tokenType, key); if (!string.IsNullOrEmpty(token.SubjectId)) { var setKey = keyGenerator.GetSetKey(tokenType, token); var setKeyforSubject = keyGenerator.GetSetKey(tokenType, token.SubjectId); var ttlOfSet = await this.database.KeyTimeToLiveAsync(setKeyforSubject).ConfigureAwait(false); var transaction = this.database.CreateTransaction(); transaction.StringSetAsync(tokenKey, json, expiresIn); transaction.SetAddAsync(setKey, tokenKey); transaction.SetAddAsync(setKeyforSubject, tokenKey); transaction.KeyExpireAsync(setKey, expiresIn); if ((ttlOfSet ?? TimeSpan.Zero) <= expiresIn) { transaction.KeyExpireAsync(setKeyforSubject, expiresIn); } await transaction.ExecuteAsync().ConfigureAwait(false); } else { await this.database.StringSetAsync(tokenKey, json, expiresIn).ConfigureAwait(false); } }
internal string GetSetKey(TokenType tokenType, ITokenMetadata token) => $"{keyPrefix}{((short)tokenType).ToString()}:{token.SubjectId}:{token.ClientId}";