/// <summary> /// Add an item to the store (or update it) /// </summary> /// <param name="key">The <see cref="StoreKey"/>.</param> /// <param name="eTag">The <see cref="ValidatorValue"/>.</param> /// <returns></returns> public Task SetAsync(StoreKey key, ValidatorValue eTag) { // store the validator value _store[key.ToString()] = eTag; // save the key itself as well, with an easily searchable stringified key _storeKeyStore[key.ToString()] = key; return(Task.FromResult(0)); }
public async Task SetAsync(StoreKey key, ValidatorValue eTag) { if (!ShouldCacheValue(key.Values.FirstOrDefault())) { return; } if (_redis == null) { _logger.LogError("Cannot find Redis database to set the storekey"); return; } var db = _redis.GetDatabase(); var hashValues = new [] { ETagKey, eTag.ETag.Value, ETagTypeKey, eTag.ETag.ETagType.ToString(), LastModifiedKey, eTag.LastModified.ToString("O", CultureInfo.InvariantCulture), SetByRegistryKey, false.ToString(CultureInfo.InvariantCulture) }; await db.ScriptEvaluateAsync(HmsetnxScript, new RedisKey[] { key.ToString() }, Array.ConvertAll(hashValues, value => (RedisValue)value), CommandFlags.FireAndForget); }
public async Task <ValidatorValue> GetAsync(StoreKey key) { if (!ShouldCacheValue(key.Values.FirstOrDefault())) { return(null); } _logger.LogDebug("Checking Redis for key '{key}'", key.ToString()); if (_redis == null) { _logger.LogError("Cannot find Redis database to get the storekey"); return(null); } var db = _redis.GetDatabase(); var redisValues = await db.HashGetAsync(key.ToString(), new RedisValue[] { ETagKey, ETagTypeKey, LastModifiedKey, SetByRegistryKey }, CommandFlags.PreferReplica); if (redisValues.Length != 4 || redisValues[0].IsNullOrEmpty || redisValues[1].IsNullOrEmpty || redisValues[2].IsNullOrEmpty || redisValues[3].IsNullOrEmpty) { return(null); } var setByRegistry = bool.Parse(redisValues[3].ToString()); if (!setByRegistry) { return(null); } var eTag = redisValues[0].ToString(); var eTagType = Enum.Parse <ETagType>(redisValues[1].ToString(), true); var lastModified = DateTimeOffset.ParseExact( redisValues[2].ToString(), "O", CultureInfo.InvariantCulture); return(new ValidatorValue(new ETag(eTagType, eTag), lastModified)); }
/// <summary> /// Remove an item from the store /// </summary> /// <param name="key">The <see cref="StoreKey"/>.</param> /// <returns></returns> public Task <bool> RemoveAsync(StoreKey key) { _storeKeyStore.TryRemove(key.ToString(), out _); return(Task.FromResult(_store.TryRemove(key.ToString(), out _))); }
public Task <ValidatorValue> GetAsync(StoreKey key) => GetAsync(key.ToString());
public Task SetAsync(StoreKey key, ValidatorValue eTag) => SetAsync(key.ToString(), eTag);