ASP.NET缓存之误区(四)

         又到了缓存时间,铛铛铛~~ 之前写的都不是很好,今天争取好好write一篇,为什么这么说?可能是那天听了浩田关于“MemCache”讲课,It's as if I'm terrified,同样是缓存、浩田大神做得很棒,我就有点像 是在应付公事尴尬,不说废话了,进入主题,今天总结一下:使用缓存的误区,就目前 流行的说法来说,这个世界上缓存大概有9大误区:

1、太过于依赖.NET默认的序列化机制
2、缓存大对象
3、使用缓存机制在线程间进行数据的共享
4、认为调用缓存API之后,数据会被立刻缓存起来
5、缓存大量的数据集合,而读取其中一部分
6、缓存大量具有图结构的对象导致内存浪费
7、缓存应用程序的配置信息
8、使用很多不同的键指向相同的缓存项
9、没有及时的更新或者删除再缓存中已经过期或者失效的数据


 PS:在说这个误区之前先来点水货——缓存主要有两种形式:

       本地内存缓存:

              应用程序把数据缓存到本机的内存中,需要的时候直接获取;

              对.NET应用而言,通过对象的引用去内存中查找数据对象;修改时,修改的是缓存对象。

       分布式缓存:

              缓存数据放在缓存服务器中,应用程序需要跨进程去访问分布式缓存服务器;缓存数据发送到缓存服务器之前先被序列化,当要用缓存数据时,程序接收到序列化的数据会将其反序列化,序列化与反序列化是非常消耗CPU操作的,这便是很多问题的所在;

               在程序中我们虽然修改了 获取到的数据,但是缓存服务器中原先得数据没有修改的,除非我们再次将数据保存到缓存服务器中,这和内地缓存时不一样的。


  1、太过于依赖.NET默认的序列化机制

        序列化

               将对象状态信息转换成可以储存、传输的形式;

               序列化期间,对象将当前状态写入存储区;

               简单说 序列化即 将数据结构 或 对象 转换成 二进制串 的过程;

             反序列化

               简单地来说 即:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。


     跨进程缓存机制,数据被缓存在应用程序之外,当存数据时缓存API把数据序列化为字节形式后将其发送给服务器保存,再次应用时,缓存服务器将缓存字节发送给应用程序,缓存客户端接受字节后反序列化,转换为需要的对象。

     序列化、反序列化发生在应用程序服务器上,缓存服务器负责保存;

     .NET默认使用的序列化机制要使用特别耗CPU的反射机制(采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义),当站点访问量大时、访问公共的缓存数据,其结果……不过人类智慧无穷尽,可以让对象自己实现ISerializable接口(允许对象以控制其自己的序列化和反序列化。)来减少对CPU的使用;

2、缓存大对象

      大对象:占用的内存大于85K,

          前面我们提到对象缓存和读取要进行序列化、反序列化——消耗CPU,对象越大消耗越多;

          在.NET中大对象分配在大对象托管堆上面,大堆在分配时需要找适合的内存空间,这样就容易出现内存碎片,导致内存不足,so移动大对象的成本has a little 昂贵;;  这涉及到.NET垃圾回收方面的知识,详情请点我:

3、使用缓存机制在线程间进行数据的共享

         多个线程在访问缓存数据时 会产生竞争,本地内存缓存指将客户机本地的物理内存划分出一部分空间用来缓冲客户机回写到服务器的数据)和分布式缓存(由一个服务端实现管理和控制,有多个客户端节点存储数据,可以进一步提高数据的读取速率)竞争情况不同,对于分布式缓存情况就不明朗了,因为数据的修改经过了一个跨进程的过程,不是立刻发生在本机的内存中的;某些缓存模块已经实现了加锁的方式来解决这个问题,如AppFabric。


       

       

 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 44
    评论
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值