根据Aberdeen Group公司2008年的调查,页面的显示速度每延迟1秒,网站访问量就会降低11%,从而导致营业额或者注册减少7%,顾客满意度下降16%,类似的数据比比皆是,例如Google提到的“响应时间每延迟0.5秒,查询数将会减少20%”,Amazon提到的“响应时间延迟0.1秒,营业额下降1%”。可见响应速度是直接影响到用户行为和营业额的非常重要的指标。
如果要对多个表的数据进行计算,若使用关系型数据库,我们需要从每个表中取出数据然后进行最后的组合处理,或者每次都要使用JOIN等处理。虽然我们可以通过事前用批处理来制作数据来解决这个问题,但是这样又会增加需要管理的表,花费我们更多的精力。
由于准备数据本身需要关系型数据库花费几十秒到几分钟的时间才能计算出来,因此实时计算就会显得比较慢。memcached可以把从关系型数据库中读取出的数据保存到缓存中,所以即使是需要处理大量数据或者是访问非常集中的情况下,它也能非常快速地返回响应数据。这是因为memcached对于相同处理,只要发现有数据保存在缓存里,就不用通过关系型数据库而直接进行处理。
memcached利用简单的文本协议来进行数据通信,数据操作也只是类似于保存与键相对应的值这样的简单处理。因此,通过telnet连接memcached,就可以进行数据的保存和读取。但是,由于它利用的是文本协议,所以无法对构造体类型的数据进行操作,而只能对字符串类型的值进行操作。要把它们转换成序列化的字节(Byte)数组。通常情况下这些处理是在程序库内部进行的,因此不需要特别在意,但是需要在保存数据的时候进行序列化处理,读取数据的时候进行反序列化处理。
因为序列化依赖于开发语言,所以在某种开发语言环境下进行的序列化结果是无法在其他开发语言环境下使用的(由于法务进行适当的复原处理,数据往往会被破坏)。如果要进行这样的处理,就需要通过JSON或者MessagePack这样不存在语言依赖关系的格式化方法来进行明确的序列化和反序列化处理。