Ejemplo n.º 1
0
        /// <summary>
        ///     使用 <see cref="RedisCacheValue" /> 包装 缓存值,并返回序列化后的结果。
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="absoluteExpiration"></param>
        /// <param name="slidingExpiration"></param>
        /// <returns></returns>
        protected virtual byte[] ParseValue(string key, object value, DateTime?absoluteExpiration,
                                            TimeSpan?slidingExpiration)
        {
            var cacheValue = new RedisCacheValue
            {
                Key = key,
                AbsoluteExpiration = absoluteExpiration,
                SlidingExpiration  = slidingExpiration,
                Value = value
            };

            return(Serialize(cacheValue));
        }
Ejemplo n.º 2
0
 /// <summary>
 ///     检查缓存值的过期时间,并做相应处理。
 ///     实际上我们只需要处理 滑动过期,我们通过比较滑动过期时间与插入时间,过期了则移除缓存项,在滑动时间范围内则重新插入缓存。
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 protected virtual bool CheckCacheValue(RedisCacheValue value)
 {
     if (value.SlidingExpiration.HasValue)
     {
         // 通常情况下在 滑动时间到期时 RedisCache 会自动移除缓存项。
         if (value.SlidingExpiration.Value < DateTime.Now - value.InsertTime)
         {
             Remove(value.Key);
             return(false);
         }
         Set(value.Key, value.Value, value.SlidingExpiration.Value);
     }
     return(true);
 }
Ejemplo n.º 3
0
 /// <summary>
 ///     反序列化。
 /// </summary>
 /// <param name="data"></param>
 /// <param name="object"></param>
 /// <returns></returns>
 protected virtual bool TryDeserialize(byte[] data, out RedisCacheValue @object)
 {
     @object = default(RedisCacheValue);
     if (data == null)
     {
         return(false);
     }
     try
     {
         var result = _serializableService.Deserialize(data);
         @object = (RedisCacheValue)result;
         if (!CheckCacheValue(@object))
         {
             @object = null;
             return(false);
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }