/// <summary>Generates a key.</summary>
 /// <param name="accessToken">The access token.</param>
 /// <returns>The key.</returns>
 protected string GenerateKey(RedisAccessToken accessToken)
 {
     return this.Configuration.AccessTokenPrefix + ":" + accessToken.Id;
 }
        /// <summary>
        /// Gets all access tokens that expires **after** the specified date. Called when authenticating
        /// an access token to limit the number of tokens to go through when validating the hash.
        /// </summary>
        /// <param name="expires">The expire date.</param>
        /// <returns>The access tokens.</returns>
        public async Task<IEnumerable<IAccessToken>> GetAccessTokens(DateTime expires)
        {
            var db = this.GetDatabase();

            var min = expires.ToUnixTime();
            var tokens = new List<IAccessToken>();

            var keys = db.SortedSetRangeByScore(this.Configuration.AccessTokenPrefix, min, DateTimeMax);

            foreach (var key in keys)
            {
                var hashedId = key.ToString().Substring(this.Configuration.AccessTokenPrefix.Length + 1);

                var hashEntries = await db.HashGetAllAsync(key.ToString());

                if (hashEntries.Any())
                {
                    var token = new RedisAccessToken(hashEntries) { Id = hashedId };

                    tokens.Add(token);
                }
            }

            return tokens;
        }