Пример #1
0
        /*以字符串的格式缓存数据,用途最广*/
        /// <summary>
        /// 通过键取缓存值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public object GetCache(string key)
        {
            object value = null;
            // 通过key以字符串格式取值
            var redisValue = Db.StringGet(key);

            if (!redisValue.HasValue)
            {
                return(null);
            }
            // 执行JSON序列化
            ValueInfoEntity valueInfo = JsonConvert.DeserializeObject <ValueInfoEntity>(redisValue.ToString());

            // 判断值的类型,如果是字符串类型,直接调用value得到结果, 如果不是,接着使用它本身的类型序列化JSON
            if (valueInfo.TypeName == typeof(string).AssemblyQualifiedName)
            {
                value = valueInfo.Value;
            }
            else
            {
                value = JsonConvert.DeserializeObject(valueInfo.Value, Type.GetType(valueInfo.TypeName));
            }

            // 过期时间的判断,如果是相对过期时间,需要再次保存到Redis,就可以延续缓存数据的过期时间
            if (valueInfo.ExpireTime != null && valueInfo.ExpireType == ExpireType.Relative)
            {
                SetKeyExpire(key, valueInfo.ExpireTime.Value);
            }

            return(value);
        }
Пример #2
0
        /// <summary>
        /// 写入缓存
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <param name="tiemout">过期时间</param>
        /// <param name="expireType">过期时间类型</param>
        public void SetCache(string key, object value, TimeSpan?timeout, ExpireType?expireType)
        {
            // 由于此处使用的是字符串格式缓存,为了能构支持对象缓存,使用JSON序列化存储
            string jsonStr = string.Empty;

            // 如果要缓存的值是string就直接缓存,如果不是则序列化JSON
            if (value is string)
            {
                jsonStr = value as string;
            }
            else
            {
                jsonStr = JsonConvert.SerializeObject(value);
            }
            // 初始化下面的对象,保存缓存值的状态
            ValueInfoEntity valueInfo = new ValueInfoEntity
            {
                Value      = jsonStr,
                TypeName   = value.GetType().AssemblyQualifiedName,
                ExpireTime = timeout,
                ExpireType = expireType
            };
            // 将上面的对象序列化,缓存到Redis
            string theValue = JsonConvert.SerializeObject(valueInfo);

            // 如果没有过期时间,直接缓存
            if (timeout == null)
            {
                Db.StringSet(key, theValue);
            }
            else
            {
                Db.StringSet(key, theValue, timeout);
            }
        }