。一个网页中不同区域的内容,自身更新频率和呈现及时度要求各不相同,如果为迁就频繁更新的区域,而使整个页面频繁重建缓存,则影响整体吞吐率。
。即使是采用局部动态缓存,如果局部区域过多,则会使得页面结构过于复杂,而且整合各个局部页面也存在不小的开销。
。有些计算是无法作为页面缓存的,比如有些动态内容中需要获取用户的登录状态,并根据不同用户呈现不同的内容。
。这些页面缓存都只是提高了读数据的速度,并没有提高写数据的速度。
数据项过期时间:
由于缓存空间是 有限的,一旦缓存区没有足够的空间存储新的数据项时,memcached便会想办法淘汰一些数据项来腾出空间,淘汰机制基于LRU(Least Recently Userd)算法,将最近不经常访问的数据项淘汰掉。
当然,我们更愿意为数据项设置过期时间,这样他可以很有面子的离开缓存区。至于过期时间的取值,这需要你根据自己的站点来把握平衡,他们的道理都是相似的。
对象序列化
基于序列化(Serialize)机制,我们可以将更高层次的抽象数据类型转化为二进制字符串,以便通过网络进入缓存服务器,同时,在读取这些数据的时候,二进制字符串又可以转换回原有的数据类型。
但是有一点需要清楚的是,当我们试图将一个类的对象(或类得实例)进行序列化时,对象的成员函数是不被序列化的,而被序列化存储的只是对象的数据成员。当需要从持久化数据中恢复对象(反序列化)时,我们首先会实例化另外一个新的对象,然后将之前持久化的数据成员依次赋值给新对象的相应数据成员。
这里说一下我们熟悉的JSON格式,便可以很好地应用在序列化中,任何数组和对象可以很容易地与JSON格式的字符串互相转换,而且转换所需的计算量并不大。