Пример #1
0
        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
            });
        }
Пример #2
0
        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
            });
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
 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);
 }