public async Task SetAsync(string key, byte[] value, IDistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken)) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } token.ThrowIfCancellationRequested(); await ConnectAsync(token); var creationTime = DateTimeOffset.UtcNow; var absoluteExpiration = GetAbsoluteExpiration(creationTime, options); await _db.ScriptEvaluateAsync(SetScript, new RedisKey[] { key }, new RedisValue[] { absoluteExpiration?.Ticks ?? NotPresent, options.SlidingExpiration?.Ticks ?? NotPresent, GetExpirationInSeconds(creationTime, absoluteExpiration, options) ?? NotPresent, value }); }
public void Set(string key, byte[] value, IDistributedCacheEntryOptions options) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } Connect(); var creationTime = DateTimeOffset.UtcNow; var absoluteExpiration = GetAbsoluteExpiration(creationTime, options); var redisKeys = new RedisKey[] { key }; var result = _db.ScriptEvaluate(SetScript, redisKeys, new RedisValue[] { absoluteExpiration?.Ticks ?? NotPresent, options.SlidingExpiration?.Ticks ?? NotPresent, GetExpirationInSeconds(creationTime, absoluteExpiration, options) ?? NotPresent, value }); }
public void SetHash <TKey, TVal>(string key, Dictionary <TKey, TVal> value, IDistributedCacheEntryOptions options) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } Connect(); var creationTime = DateTimeOffset.UtcNow; var absoluteExpiration = GetAbsoluteExpiration(creationTime, options); RedisKey redisKey = key; var fields = value.Select( pair => new HashEntry(pair.Key.ToString(), pair.Value.ToString())) .Concat(new List <HashEntry>( new[] { new HashEntry(AbsoluteExpirationKey, absoluteExpiration?.Ticks ?? NotPresent), new HashEntry(SlidingExpirationKey, options.SlidingExpiration?.Ticks ?? NotPresent) })).ToArray(); // var result = _db.ScriptEvaluate(SetScript, redisKeys, // new RedisValue[] // { // absoluteExpiration?.Ticks ?? NotPresent, // options.SlidingExpiration?.Ticks ?? NotPresent, // GetExpirationInSeconds(creationTime, absoluteExpiration, options) ?? NotPresent, // fields // }); _db.HashSet(redisKey, fields); }
public void SetAdd(string key, RedisValue value, IDistributedCacheEntryOptions options) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } Connect(); RedisKey redisKey = key; _db.SetAdd(redisKey, value); }
public void SetHashes(string key, IEnumerable <HashEntry> hashElements, IDistributedCacheEntryOptions options) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } Connect(); RedisKey redisKey = key; _db.HashSet(redisKey, hashElements.ToArray(), CommandFlags.FireAndForget); }
private static DateTimeOffset?GetAbsoluteExpiration(DateTimeOffset creationTime, IDistributedCacheEntryOptions options) { if (options.AbsoluteExpiration.HasValue && options.AbsoluteExpiration <= creationTime) { throw new ArgumentOutOfRangeException( nameof(DistributedCacheEntryOptions.AbsoluteExpiration), options.AbsoluteExpiration.Value, "The absolute expiration value must be in the future."); } var absoluteExpiration = options.AbsoluteExpiration; if (options.AbsoluteExpirationRelativeToNow.HasValue) { absoluteExpiration = creationTime + options.AbsoluteExpirationRelativeToNow; } return(absoluteExpiration); }
private static long?GetExpirationInSeconds(DateTimeOffset creationTime, DateTimeOffset?absoluteExpiration, IDistributedCacheEntryOptions options) { if (absoluteExpiration.HasValue && options.SlidingExpiration.HasValue) { return((long)Math.Min( (absoluteExpiration.Value - creationTime).TotalSeconds, options.SlidingExpiration.Value.TotalSeconds)); } else if (absoluteExpiration.HasValue) { return((long)(absoluteExpiration.Value - creationTime).TotalSeconds); } else if (options.SlidingExpiration.HasValue) { return((long)options.SlidingExpiration.Value.TotalSeconds); } return(null); }