你的位置:首页 > 软件开发 > ASP.net > 缓存碎语一

缓存碎语一

发布时间:2015-03-11 18:00:33
如果按存储的地方来分类,缓存分为哪些? 分为本地缓存和分布式缓存。本地缓存就是把数据保存应用程序所在的那台机器的内存中;而分布式缓存是把数据放在缓存服务器中,这个缓存服务器有可能是和应用服务器在同一台机器,这时候的是跨进程访问,如果缓存服务器和应用程序服务器不在同一台机器 ...

如果按存储的地方来分类,缓存分为哪些?

 

分为本地缓存和分布式缓存。本地缓存就是把数据保存应用程序所在的那台机器的内存中;而分布式缓存是把数据放在缓存服务器中,这个缓存服务器有可能是和应用服务器在同一台机器,这时候的是跨进程访问,如果缓存服务器和应用程序服务器不在同一台机器,这时候就可能会设计到跨域跨进程访问了。

 

缓存通过何种方式来找到缓存中的数据?

 

表面上是通过键来找到对象,实际是通过对象的引用在内存中查找到数据对象的。

 

修改缓存对象和修改数据库数据是一回事吗?

 

千万不要认为修改缓存对象就是修改了数据库中对应的数据。如果修改的是本地缓存对象,那只是修改更新了内存的那个缓存对象。而对于分布式缓存,在应用程序中修改完缓存对象,还需要把新的对象数据传给跨域、跨进程之外的缓存服务器。

 

有哪些分布式缓存机制?

 

比如memcached,AppFabric......

 

分布式缓存保存和读取数据的大致过程是怎样的?

 

缓存数据的时候,使用API,在应用程序服务器上把数据序列化为字节,再把这些字节发送给缓存服务器,让其保存;读取缓存数据的时候,缓存服务器把对象对应的字节发送给应用程序,在应用程序服务器上的对应类库再把字节转换成对象。

 

.NET本地缓存有哪几种方式?

 

一种是给类打上Serializable特性,不过这种方式由于其内部使用了反射机制,会比较耗CPU,特别是处理大对象的时候;另一种方式是给类打上Serializable特新,并且还让这个类实现ISerializable接口,这种方式没有使用反射,效率是上一种方式的几百倍。

 

什么是缓存大对象?

 

当缓存对象占用的内存大于85K的时候,就把其认为是缓存大对象。注意,大于85*1024个字节是大对象,一个对集合的引用,比如List<Person> list = new List<Person>(),其中list只是指向托管堆上的一个引用,不是大对象。

 

大对象与内存碎片,内存碎片是如何产生的?

 

大对象是被放在托管堆上的大堆上的,当GC进行垃圾回收后,大堆是不会被压缩的。内存碎片的产生大致这样:

→产生大对象

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:缓存碎语一

关键词:缓存

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。