描 述:缓存工厂类

     /// <summary>
     ///     描 述:缓存工厂类
     /// </summary>
     public class CacheFactory
     {

         /// <summary>
         ///     定义通用的Repository
         /// </summary>
         /// <returns></returns>
         public static ICacheService Cache()
         {
             var cacheType = Config.GetValue("CacheType");
             switch (cacheType)
             {
                 case "MemoryCache":
                     return new MemoryCacheService(null);

                 case "RedisCache":
                     return new RedisCacheService();

                 default:
                     return new MemoryCacheService(null);
             }
         }
     }

描 述:缓存接口

     public interface ICacheService
     {

         /// <summary>
         /// 验证缓存项是否存在
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         bool Exists(string key);

         /// <summary>
         /// 验证缓存项是否存在(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         //Task<bool> ExistsAsync(string key);

         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <returns></returns>
         bool Add(string key, object value);

         /// <summary>
         /// 添加缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <returns></returns>
         //Task<bool> AddAsync(string key, object value);

         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte);

         /// <summary>
         /// 添加缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         //Task<bool> AddAsync(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte);

         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <returns></returns>
         bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false);

         /// <summary>
         /// 添加缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <returns></returns>
         //Task<bool> AddAsync(string key, object value, TimeSpan expiresIn, bool isSliding = false);

         /// <summary>
         /// 删除缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         bool Remove(string key);

         /// <summary>
         /// 删除缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         //Task<bool> RemoveAsync(string key);

         /// <summary>
         /// 批量删除缓存
         /// </summary>
         /// <param name="key">缓存Key集合</param>
         /// <returns></returns>
         void RemoveAll(IEnumerable<string> keys);

         /// <summary>
         /// 批量删除缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key集合</param>
         /// <returns></returns>
         //Task RemoveAllAsync(IEnumerable<string> keys);

         /// <summary>
         /// 获取缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         T Get<T>(string key) where T : class;

         /// <summary>
         /// 获取缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         //Task<T> GetAsync<T>(string key) where T : class;

         /// <summary>
         /// 获取缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         object Get(string key);

         /// <summary>
         /// 获取缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         //Task<object> GetAsync(string key);

         /// <summary>
         /// 获取缓存集合
         /// </summary>
         /// <param name="keys">缓存Key集合</param>
         /// <returns></returns>
         IDictionary<string, object> GetAll(IEnumerable<string> keys);

         /// <summary>
         /// 获取缓存集合(异步方式)
         /// </summary>
         /// <param name="keys">缓存Key集合</param>
         /// <returns></returns>
         //Task<IDictionary<string, object>> GetAllAsync(IEnumerable<string> keys);

         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <returns></returns>
         bool Replace(string key, object value);

         /// <summary>
         /// 修改缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <returns></returns>
         //Task<bool> ReplaceAsync(string key, object value);

         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         bool Replace(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte);

         /// <summary>
         /// 修改缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         //Task<bool> ReplaceAsync(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte);

         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <returns></returns>
         bool Replace(string key, object value, TimeSpan expiresIn, bool isSliding = false);

         /// <summary>
         /// 修改缓存(异步方式)
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <returns></returns>
         //Task<bool> ReplaceAsync(string key, object value, TimeSpan expiresIn, bool isSliding = false);

     }

描 述 :MemoryCache

  public class MemoryCacheService : ICacheService
     {
         protected IMemoryCache Cache;
         public MemoryCacheService(IMemoryCache _cache)
         {
             Cache = _cache;
         }

         /// <summary>
         /// 验证缓存项是否存在
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         public bool Exists(string key)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             object cached;
             return Cache.TryGetValue(key, out cached);
         }
         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <returns></returns>
         public bool Add(string key, object value)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             if (value == null)
             {
                 throw new ArgumentNullException(nameof(value));
             }
             Cache.Set(key, value);
             return Exists(key);
         }
         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         public bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             if (value == null)
             {
                 throw new ArgumentNullException(nameof(value));
             }
             Cache.Set(key, value,
                     new MemoryCacheEntryOptions()
                     .SetSlidingExpiration(expiresSliding)
                     .SetAbsoluteExpiration(expiressAbsoulte)
                     );

             return Exists(key);
         }
         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <returns></returns>
         public bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             if (value == null)
             {
                 throw new ArgumentNullException(nameof(value));
             }
             if (isSliding)
                 Cache.Set(key, value,
                     new MemoryCacheEntryOptions()
                     .SetSlidingExpiration(expiresIn)
                     );
             else
                 Cache.Set(key, value,
                 new MemoryCacheEntryOptions()
                 .SetAbsoluteExpiration(expiresIn)
                 );

             return Exists(key);
         }
         /// <summary>
         /// 删除缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         public bool Remove(string key)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             Cache.Remove(key);

             return !Exists(key);
         }
         /// <summary>
         /// 批量删除缓存
         /// </summary>
         /// <param name="key">缓存Key集合</param>
         /// <returns></returns>
         public void RemoveAll(IEnumerable<string> keys)
         {
             if (keys == null)
             {
                 throw new ArgumentNullException(nameof(keys));
             }

             keys.ToList().ForEach(item => Cache.Remove(item));
         }

         /// <summary>
         /// 获取缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         public T Get<T>(string key) where T : class
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             return Cache.Get(key) as T;
         }
         /// <summary>
         /// 获取缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         public object Get(string key)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             return Cache.Get(key);
         }
         /// <summary>
         /// 获取缓存集合
         /// </summary>
         /// <param name="keys">缓存Key集合</param>
         /// <returns></returns>
         public IDictionary<string, object> GetAll(IEnumerable<string> keys)
         {
             if (keys == null)
             {
                 throw new ArgumentNullException(nameof(keys));
             }

             var dict = new Dictionary<string, object>();

             keys.ToList().ForEach(item => dict.Add(item, Cache.Get(item)));

             return dict;
         }

         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <returns></returns>
         public bool Replace(string key, object value)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             if (value == null)
             {
                 throw new ArgumentNullException(nameof(value));
             }
             if (Exists(key))
                 if (!Remove(key)) return false;

             return Add(key, value);

         }
         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         public bool Replace(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             if (value == null)
             {
                 throw new ArgumentNullException(nameof(value));
             }
             if (Exists(key))
                 if (!Remove(key)) return false;

             return Add(key, value, expiresSliding, expiressAbsoulte);
         }
         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <returns></returns>
         public bool Replace(string key, object value, TimeSpan expiresIn, bool isSliding = false)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             if (value == null)
             {
                 throw new ArgumentNullException(nameof(value));
             }
             if (Exists(key))
                 if (!Remove(key)) return false;

             return Add(key, value, expiresIn, isSliding);
         }

         public void Dispose()
         {
             if (Cache != null)
                 Cache.Dispose();
             GC.SuppressFinalize(this);
         }

     }

描 述: RedisCache

  public class RedisCacheService : ICacheService
     {
         public RedisCacheService(/*RedisCacheOptions options, int database = 0*/)
         //这里可以做成依赖注入,但没打算做成通用类库,所以直接把连接信息直接写在帮助类里
         {
             RedisCacheOptions options = new RedisCacheOptions
             {
                 Configuration = "127.0.0.1:6379",
                 InstanceName = "RedisCacheService_u48H4GU583hyehdH43"
             };
             //RedisConfig.Connection;
             // RedisConfig.InstanceName;
             ; //RedisConfig.DefaultDatabase;
             _connection = ConnectionMultiplexer.Connect(options.Configuration);
             Cache = _connection.GetDatabase(database);
             _instance = options.InstanceName;
         }
         protected IDatabase Cache;
         private readonly ConnectionMultiplexer _connection;
         private readonly string _instance;

         //public RedisCacheService(RedisCacheOptions options, int database = 0)
         //{
         //    _connection = ConnectionMultiplexer.Connect(options.Configuration);
         //    Cache = _connection.GetDatabase(database);
         //    _instance = options.InstanceName;
         //}
         public string GetKeyForRedis(string key)
         {
             return _instance + key;
         }

         /// <summary>
         /// 验证缓存项是否存在
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         public bool Exists(string key)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             return Cache.KeyExists(GetKeyForRedis(key));
         }

         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <returns></returns>
         public bool Add(string key, object value)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             return Cache.StringSet(GetKeyForRedis(key), Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)));
         }
         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间,Redis中无效)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         public bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             return Cache.StringSet(GetKeyForRedis(key), Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)), expiressAbsoulte);
         }
         /// <summary>
         /// 添加缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间,Redis中无效)</param>
         /// <returns></returns>
         public bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }

             return Cache.StringSet(GetKeyForRedis(key), Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(value)), expiresIn);
         }/// <summary>
          /// 删除缓存
          /// </summary>
          /// <param name="key">缓存Key</param>
          /// <returns></returns>
         public bool Remove(string key)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }
             return Cache.KeyDelete(GetKeyForRedis(key));
         }
         /// <summary>
         /// 批量删除缓存
         /// </summary>
         /// <param name="key">缓存Key集合</param>
         /// <returns></returns>
         public void RemoveAll(IEnumerable<string> keys)
         {
             if (keys == null)
             {
                 throw new ArgumentNullException(nameof(keys));
             }

             keys.ToList().ForEach(item => Remove(GetKeyForRedis(item)));
         }

         /// <summary>
         /// 获取缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         public T Get<T>(string key) where T : class
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }

             var value = Cache.StringGet(GetKeyForRedis(key));

             if (!value.HasValue)
             {
                 return default(T);
             }

             return JsonConvert.DeserializeObject<T>(value);
         }
         /// <summary>
         /// 获取缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <returns></returns>
         public object Get(string key)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }

             var value = Cache.StringGet(GetKeyForRedis(key));

             if (!value.HasValue)
             {
                 return null;
             }

             return JsonConvert.DeserializeObject(value);
         }
         /// <summary>
         /// 获取缓存集合
         /// </summary>
         /// <param name="keys">缓存Key集合</param>
         /// <returns></returns>
         public IDictionary<string, object> GetAll(IEnumerable<string> keys)
         {
             if (keys == null)
             {
                 throw new ArgumentNullException(nameof(keys));
             }
             var dict = new Dictionary<string, object>();

             keys.ToList().ForEach(item => dict.Add(item, Get(GetKeyForRedis(item))));

             return dict;
         }
         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <returns></returns>
         public bool Replace(string key, object value)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }

             if (Exists(key))
                 if (!Remove(key))
                     return false;

             return Add(key, value);

         }
         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <param name="expiressAbsoulte">绝对过期时长</param>
         /// <returns></returns>
         public bool Replace(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }

             if (Exists(key))
                 if (!Remove(key))
                     return false;

             return Add(key, value, expiresSliding, expiressAbsoulte);
         }
         /// <summary>
         /// 修改缓存
         /// </summary>
         /// <param name="key">缓存Key</param>
         /// <param name="value">新的缓存Value</param>
         /// <param name="expiresIn">缓存时长</param>
         /// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
         /// <returns></returns>
         public bool Replace(string key, object value, TimeSpan expiresIn, bool isSliding = false)
         {
             if (key == null)
             {
                 throw new ArgumentNullException(nameof(key));
             }

             if (Exists(key))
                 if (!Remove(key)) return false;

             return Add(key, value, expiresIn, isSliding);
         }
         public void Dispose()
         {
             if (_connection != null)
                 _connection.Dispose();
             GC.SuppressFinalize(this);
         }

     }

C# 缓存工厂类的更多相关文章

  1. 缓存工厂之Redis缓存

    这几天没有按照计划分享技术博文,主要是去医院了,这里一想到在医院经历的种种,我真的有话要说:医院里的医务人员曾经被吹捧为美丽+和蔼+可亲的天使,在经受5天左右相互接触后不得不让感慨:遇见的有些人员在挂 ...

  2. 利用Spring.Net技术打造可切换的分布式缓存读写类

    利用Spring.Net技术打造可切换的Memcached分布式缓存读写类 Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具 ...

  3. spring源码分析系列 (8) FactoryBean工厂类机制

    更多文章点击--spring源码分析系列 1.FactoryBean设计目的以及使用 2.FactoryBean工厂类机制运行机制分析 1.FactoryBean设计目的以及使用 FactoryBea ...

  4. Executor框架(五)Executors工厂类

    Executors 简介 Executors 是一个工厂类,其提供的是Executor.ExecutorService.ScheduledExecutorService.ThreadFactory 和 ...

  5. Executor(二)ThreadPoolExecutor、ScheduledThreadPoolExecutor 及 Executors 工厂类

    Executor(二)ThreadPoolExecutor.ScheduledThreadPoolExecutor 及 Executors 工厂类 Java 中的线程池类有两个,分别是:ThreadP ...

  6. 3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...

  7. 对业务类进行构造的工厂类BLLFactory

    using System; using System.Collections.Generic; using System.Text; using System.Collections; using W ...

  8. 【Java 多线程】Java线程池类ThreadPoolExecutor、ScheduledThreadPoolExecutor及Executors工厂类

    Java中的线程池类有两个,分别是:ThreadPoolExecutor和ScheduledThreadPoolExecutor,这两个类都继承自ExecutorService.利用这两个类,可以创建 ...

  9. php : 工厂类演示

    工厂类的目的: 通过类名, 动态创建该类的对象实例 <?php /* * 工厂类演示 */ class A{} class B{} // 工厂类: 有一个静态方法,通过该方法,能够获得指定类的对 ...

随机推荐

  1. BZOJ5465: [APIO 2018] 选圆圈(K-D Tree)

    题意 题目链接 Sol 下面是错误做法,正解请看这里 考虑直接用K-D tree模拟.. 刚开始想的是维护矩形最大最小值,以及子树中最大圆的位置,然后... 实际上最大圆的位置是不用维护的,直接把原序 ...

  2. ES6框架的搭建

    1.引入traceur.js  http://google.github.io/traceur-compiler/bin/traceur.js 2.将Traceur编译器用于网页 new traceu ...

  3. 毕向东_Java基础视频教程第19天_IO流(01~05)

    第19天-01-IO流(BufferedWriter) 字符流的缓冲区 缓冲区的出现提高了对数据的读写效率. 对应类缓冲区要结合流才可以使用. BufferedWriter BufferedReade ...

  4. 有关平台支持的从经典部署模型到 Azure Resource Manager 的迁移的技术深入探讨

    本文将深入探讨如何从 Azure 经典部署模型迁移到 Azure Resource Manager 部署模型. 本文将介绍资源和功能级别的资源,让用户了解 Azure 平台如何在两种部署模型之间迁移资 ...

  5. HTML5新增的标签和属性归纳

    收集总结的HTML5的新特性,基本除了IE9以下都可以使用. HTML5语法 大部分延续了html的语法 不同之处:开头的 <!DOCTYPE html> <html lang=&q ...

  6. Python实例---基于页面的后台管理[简单版]

    后台管理菜单 + 母板[css/content/js] 向后台提交数据[2种]:       1.  模态对话框(数据少操作,且Js复杂):        form表单 :优点:简单,前端提交后后台处 ...

  7. Exchange 2010 服务器邮件传输配额设置详解

    在企业的邮件系统管理中,传输邮件的大小配额关系到邮件队列.邮件传输速度以及关系到该附件是否能正常发送,直接关系到用户体验.为此,传输邮件大小的设置,也经常是企业邮件管理员比较迷惑的地方.如下: 1)  ...

  8. SVN There are unfinished transactions detected

    在ECLIPSE中报这个错,不能提交和更新代码和clean up 解决办法:关闭ECLIPSE,使用工具对SVN执行 clean up. 重新启动ECLIPSE,解决冲突文件,可以正常使用SVN

  9. Anaconda安装及pygame的安装

    python有很多版本,还是Anaconda最好用啦,因为它有强大而方便的包管理与环境管理的功能... Pygame是Python最经典的2D游戏开发第三方库,也支持3D游戏开发,,最近课余开始学这个 ...

  10. lock与sychronized关键字

    1. lock与sychronized关键字的区别 (1) Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现.(2 ...