<th id="v9g6b"><track id="v9g6b"></track></th>

  • <em id="v9g6b"><acronym id="v9g6b"></acronym></em>
    <progress id="v9g6b"><pre id="v9g6b"></pre></progress>
    <tbody id="v9g6b"></tbody>
    <button id="v9g6b"><acronym id="v9g6b"></acronym></button>
    <rp id="v9g6b"><ruby id="v9g6b"></ruby></rp>

        <dd id="v9g6b"></dd>

        <em id="v9g6b"></em>

          web开发缓存技术之B/S开发框架objectcache缓存管理(二)

          B/S开发框架缓存管理分为.net自带objectcache非分布式缓存和Redis第三方结构性缓存,都是保留在Web开发框架管理的内存中,增、删、改、查是数据操作常见的几大类型,缓存技术也不除外。

          B/S开发框架objectcache缓存

          web开发框架 缓存的作用是只在数据第一次被访问时才从数据库中读取数据,将数据放在内存中,以后查询相同的数据则直接从内存中返回,这样速度有明显的提升。Web开发框架在数据更改时更改内存数据,同时或者规定的延时内更改数据库对应的数据,从而实现缓存和数据库数据同步。基本原理是用空间换时间,我们重点看下下面代码如何做的。

          B/S开发框架objectcache代码如下:

           public class CacheManage:IDisposable
              {
                  private static ICacheStrategy _cacheStrategy;
                  private static volatile CacheManage instance = null;
                  private static object lockHelper = new object();
          
                  /// <summary>
                  /// 默认缓存存活期
                  /// </summary>
                  protected int _timeOut = 3600;
          
                  /// <summary>
                  /// 期相对时间[单位: 秒] 
                  /// </summary>
                  public int TimeOut
                  {
                      set { _timeOut = value > 0 ? value : 0; }
                      get { return _timeOut; }
                  }
                  
                  /// <summary>
                  /// 管理器
                  /// </summary>
                  private CacheManage()
                  {
                      lock (lockHelper)
                      {
                          string cacheStrategy = Config.GetStr("CacheStrategy");
                          switch (cacheStrategy)
                          {
                              case "Redis":
                                  _cacheStrategy = new RedisStrategy();
                                  break;
                              default:
                                  _cacheStrategy = new DefaultStrategy();
                                  break;
                          }
                      }
                  }
          
                  /// <summary>
                  /// 当前类的实例
                  /// </summary>
                  /// <returns></returns>
                  public static CacheManage GetCacheService()
                  {
                      if (instance == null)
                      {
                          lock (lockHelper)
                          {
                              if (instance == null)
                              {
                                  instance = new CacheManage();
                              }
                          }
                      }
                      return instance;
                  }
          
                  /// <summary>
                  /// 
                  /// </summary>
                  /// <param name="key"></param>
                  /// <param name="obj"></param>
                  public void Add(string key, object obj)
                  {
                      Add(key, obj, _timeOut);
                  }
          
                  /// <summary>
                  /// 添加进缓存
                  /// </summary>
                  /// <typeparam name="T"></typeparam>
                  /// <param name="obj"></param>
                  public void Add<T>(T obj) where T : class,ICacheObject
                  {
                      if (obj == null)
                      {
                          return;
                      }
                      Add<T>(obj, _timeOut);
                  }
          
                  /// <summary>
                  /// 添加缓存
                  /// </summary>
                  /// <typeparam name="T"></typeparam>
                  /// <param name="obj"></param>
                  public void Add<T>(T obj, int expire) where T : class,ICacheObject
                  {
                      if(obj==null)
                      {
                          return;
                      }
                      string key = obj.GetCacheKey();
                      Add(key, obj, expire);
                  }
          
                  /// <summary>
                  /// 向缓存加入新的对象
                  /// </summary>
                  /// <param name="key"></param>
                  /// <param name="obj"></param>
                  /// <param name="expire">到期时间,单位:秒</param>
                  public virtual void Add(string key, object obj, int expire)
                  {
                      if (_timeOut > 0)
                      {
                          lock (lockHelper)
                          {
                              _cacheStrategy.Add(key, obj, expire);
                          }
                      }
                  }
          
                  /// <summary>
                  /// 取得数据
                  /// </summary>
                  /// <param name="key"></param>
                  /// <returns></returns>
                  public object Retrieve(string key)
                  {
                      return _cacheStrategy.Retrieve(key);
                  }
          
                  /// <summary>
                  /// 取得数据
                  /// </summary>
                  /// <typeparam name="T"></typeparam>
                  /// <param name="key"></param>
                  /// <returns></returns>
                  public T Retrieve<T>(string key) where T : class,ICacheObject
                  {
                      return _cacheStrategy.Retrieve<T>(key);
                  }
          
                  /// <summary>
                  /// 删除缓存中的对象
                  /// </summary>
                  /// <param name="key"></param>
                  public void Remove(string key)
                  {
                      lock (lockHelper)
                      {
                          //移除相应的缓存项
                          _cacheStrategy.Remove(key);
                      }
                  }
          
                  /// <summary>
                  /// 清空缓存
                  /// </summary>
                  public void FlushAll()
                  {
                      _cacheStrategy.FlushAll();
                  }
          
                  /// <summary>
                  /// 清理
                  /// </summary>
                  public void Dispose()
                  {
                      //清空缓存
                      FlushAll();
                  }
              }

          web开发框架中为什么要使用缓存?缓存是载体,数据保留在内存中的载体,内存和数据库哪个更好哪个更快,当然是内存,所以缓存可以提升速度,数据在缓存中操作了,当然不会频繁的访问数据库,这样也减少了数据库访问频次,减少开销。

          如果B/S开发框架程序将数据库数据读取后又丢弃,并不放到哪儿保留,方便下次快速读取,整个数据库服务器都在不停的运转,高IO吞吐,高CPU占用率,对资源消耗会异常的大,使得请求并发量稍微大点,系统就会假死,甚至崩掉。

          标签: Web开发框架SqlServer专辑标签

          网站&系统开发技术学习交流群:463167176

          本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
          转载请注明:文章转载自:软件开发框架 ? web开发缓存技术之B/S开发框架objectcache缓存管理(二)
          本文标题:web开发缓存技术之B/S开发框架objectcache缓存管理(二)
          本文地址:http://www.sajuice.com/OrgTec/DB/0014.html

          相关文章: web开发缓存技术之B/S开发框架Redis分布式缓存管理

          电话
          电话 18718672256

          扫一扫
          二维码
          本港台开奖 <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>