/// <summary>
        /// 设置值
        /// </summary>
        public void Put(TKey key, TValue value, TimeSpan keepTime)
        {
            // 如果以前序列化失败过,直接使用备用的缓存
            if (SerializeFailedTypes.ContainsKey(typeof(TKey)) ||
                SerializeFailedTypes.ContainsKey(typeof(TValue)))
            {
                FallbackCache.Put(key, value, keepTime);
                return;
            }
            // 尝试序列化key和value,失败时使用备用的缓存
            string keyJson, valueJson;

            try {
                keyJson = JsonConvert.SerializeObject(key);
            } catch {
                SerializeFailedTypes[typeof(TKey)] = true;
                FallbackCache.Put(key, value, keepTime);
                return;
            }
            try {
                valueJson = JsonConvert.SerializeObject(value);
            } catch {
                SerializeFailedTypes[typeof(TValue)] = true;
                FallbackCache.Put(key, value, keepTime);
                return;
            }
            // 保存到Redis
            var db = RedisConnectionFactory.GetDatabase();

            db.StringSet(UniquePrefix + keyJson, valueJson, keepTime);
        }
        /// <summary>
        /// 获取值
        /// </summary>
        public bool TryGetValue(TKey key, out TValue value)
        {
            // 先从备用的缓存获取
            if (FallbackCache.TryGetValue(key, out value))
            {
                return(true);
            }
            // 不存在时尝试序列化key,失败时返回false
            string keyJson;

            try {
                keyJson = JsonConvert.SerializeObject(key);
            } catch {
                SerializeFailedTypes[typeof(TKey)] = true;
                return(false);
            }
            // 从Redis获取
            var db         = RedisConnectionFactory.GetDatabase();
            var redisValue = db.StringGet(UniquePrefix + keyJson);

            if (!redisValue.HasValue)
            {
                return(false);
            }
            // 反序列化值,失败时返回false
            try {
                value = JsonConvert.DeserializeObject <TValue>(redisValue.ToString());
            } catch {
                SerializeFailedTypes[typeof(TValue)] = true;
                return(false);
            }
            return(true);
        }
Example #3
0
        /// <summary>
        /// 删除文件
        /// </summary>
        public void Delete()
        {
            var db = RedisConnectionFactory.GetDatabase();

            db.KeyDelete(FileKeyPrefix + FullPath);
            Body = null;
        }
Example #4
0
        /// <summary>
        /// 更新文件内容
        /// </summary>
        internal void UpdateBody(RedisFileBody body)
        {
            var db = RedisConnectionFactory.GetDatabase();

            db.StringSet(FileKeyPrefix + FullPath, JsonConvert.SerializeObject(body));
            Body = body;
        }
        /// <summary>
        /// 删除文件夹
        /// </summary>
        public void Delete()
        {
            var db = RedisConnectionFactory.GetDatabase();

            foreach (var endpoint in RedisConnectionFactory.GetEndPoints())
            {
                var server = RedisConnectionFactory.GetServer(endpoint);
                foreach (var key in server.Keys())
                {
                    if (key.ToString().StartsWith(RedisFileEntry.FileKeyPrefix + FullPath + "/"))
                    {
                        db.KeyDelete(key);
                    }
                }
            }
        }
        /// <summary>
        /// 删除所有缓存值
        /// </summary>
        public void Clear()
        {
            var db = RedisConnectionFactory.GetDatabase();

            foreach (var endpoint in RedisConnectionFactory.GetEndPoints())
            {
                var server = RedisConnectionFactory.GetServer(endpoint);
                foreach (var key in server.Keys())
                {
                    if (key.ToString().StartsWith(UniquePrefix))
                    {
                        db.KeyDelete(key);
                    }
                }
            }
            FallbackCache.Clear();
        }
        /// <summary>
        /// 删除值
        /// </summary>
        public void Remove(TKey key)
        {
            // 先从备用的缓存删除
            FallbackCache.Remove(key);
            // 尝试序列化key
            string keyJson;

            try {
                keyJson = JsonConvert.SerializeObject(key);
            } catch {
                SerializeFailedTypes[typeof(TKey)] = true;
                return;
            }
            // 从Redis删除
            var db = RedisConnectionFactory.GetDatabase();

            db.KeyDelete(UniquePrefix + keyJson);
        }
        /// <summary>
        /// 枚举文件
        /// </summary>
        public IEnumerable <IFileEntry> EnumerateFiles()
        {
            var db = RedisConnectionFactory.GetDatabase();

            foreach (var endpoint in RedisConnectionFactory.GetEndPoints())
            {
                var server = RedisConnectionFactory.GetServer(endpoint);
                foreach (var key in server.Keys())
                {
                    var keyStr = key.ToString();
                    if (keyStr.StartsWith(RedisFileEntry.FileKeyPrefix + FullPath + "/"))
                    {
                        var path           = keyStr.Substring(RedisFileEntry.FileKeyPrefix.Length);
                        var childPathParts = path.Substring(FullPath.Length + 1).Split('/');
                        if (childPathParts.Length == 1)
                        {
                            yield return(new RedisFileEntry(RedisConnectionFactory, path, false));
                        }
                    }
                }
            }
        }
Example #9
0
 public IDatabase GetDatabase(int index)
 {
     return(_redisConnectinFactory.GetDatabase(index));
 }