<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开发框架Redis分布式缓存管理

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



          B/S开发框架Redis分布式缓存

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

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


          /// <summary>
              /// 
              /// </summary>
              public class RedisStrategy:ICacheStrategy
              {
                  IDatabase _database;
                  IServer _server;
          
                  public RedisStrategy()
                  {
                      string host = Config.GetStr("CacheHost");
                      if (string.IsNullOrEmpty(host))
                      {
                          throw new Exception("CacheHost Is Error");
                      }
                      ConnectionMultiplexer connect = ConnectionMultiplexer.Connect(host);
                      _database = connect.GetDatabase();
                      _server = connect.GetServer(host);
                  }
          
                  /// <summary>
                  /// 
                  /// </summary>
                  /// <param name="key"></param>
                  /// <param name="obj"></param>
                  /// <param name="expire"></param>
                  public void Add(string key, object obj, int expire)
                  {
                      if (key == null || key.Length == 0 || obj == null)
                      {
                          return;
                      }
                      //永不过期
                      if (expire == 0)
                      {
                          _database.StringSet(key, Serialize(obj));
                      }
                      else
                      {
                          _database.StringSet(key, Serialize(obj), new TimeSpan(0, 0, expire));
                      }
                  }
          
                  /// <summary>
                  /// 
                  /// </summary>
                  /// <param name="key"></param>
                  public void Remove(string key)
                  {
                      _database.KeyDelete(key);
                  }
          
                  /// <summary>
                  /// 
                  /// </summary>
                  /// <param name="key"></param>
                  /// <returns></returns>
                  public object Retrieve(string key)
                  {
                      object value = _database.StringGet(key);
                      return value;
                  }
          
                  /// <summary>
                  /// 
                  /// </summary>
                  /// <typeparam name="T"></typeparam>
                  /// <param name="key"></param>
                  /// <returns></returns>
                  public T Retrieve<T>(string key) where T : class
                  {
                      return Deserialize<T>(_database.StringGet(key));
                  }
          
                  /// <summary>
                  /// 
                  /// </summary>
                  public void FlushAll()
                  {
                      _server.FlushDatabase();
                  }
          
                  /// <summary>
                  /// 序列化对象
                  /// </summary>
                  /// <param name="obj"></param>
                  /// <returns></returns>
                  private byte[] Serialize(object obj)
                  {
                      if (obj == null)
                      {
                          return null;
                      }
                      BinaryFormatter binaryFormatter = new BinaryFormatter();
                      using (MemoryStream memoryStream = new MemoryStream())
                      {
                          binaryFormatter.Serialize(memoryStream, obj);
                          byte[] objectDataAsStream = memoryStream.ToArray();
                          return objectDataAsStream;
                      }
                  }
          
                  /// <summary>
                  /// 反序列化对象
                  /// </summary>
                  /// <typeparam name="T"></typeparam>
                  /// <param name="stream"></param>
                  /// <returns></returns>
                  private T Deserialize<T>(byte[] stream)
                  {
                      if (stream == null)
                      {
                          return default(T);
                      }
                      BinaryFormatter binaryFormatter = new BinaryFormatter();
                      using (MemoryStream memoryStream = new MemoryStream(stream))
                      {
                          T result = (T)binaryFormatter.Deserialize(memoryStream);
                          return result;
                      }
                  }
              }

          web开发框架中为什么要使用Redis分布式缓存?

          B/S开发平台Redis分布式缓存

          如果B/S开发框架程序将数据库数据读取后又丢弃,并不放到哪儿保留,方便下次快速读取,整个数据库服务器都在不停的运转。高IO吞吐,高CPU占用率,对资源消耗会异常的大,使得请求并发量稍微大点,系统就会假死,甚至崩掉。并且在大型软件开发系统中,多子业务系统是正常的,为了适应各个子业务系统的数据高并发,分布式缓存就派上用场了,Redis、membercache等成熟nosql结果型数据库都是分布式B/S开发平台不错的选择。

          标签: B/S开发框架缓存技术系列

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

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

          相关文章: 深入MVC框架--EF中的导航属性优势与弊端(一)

          电话
          电话 18718672256

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