Cache和Buffer的区别

缓存技术里面,一般指的都是cache,很多人容易把cache和buffer混淆,虽然有时候cache和buffer的中文名都叫“缓存”。

先举两个例子来说明什么是cache什么是buffer。

cache:假设你是一个图书管理员,坐在桌子帮边帮助读者找到他想要的书,读者说要xx书,你就要跑到书架上去找到xx书,拿回来给读者,你觉得走到书架那里要走很远,而且很多人要的是相同的书,所以你想偷懒,找了个装书的小推车,当读者把书还给你的时候,你就把书先放在小推车上,当另外一个读者再次需要这本相同的书,你就不需要再走到书架那里去拿书了,直接在小推车上拾起来(真轻松)。如果你在小推车上找不到读者要的书,你还是得走远路去书架那里找书(好烦)。不管怎么说,你的工作量减少了很多。读者要的书越扎堆,你就轻松。要是每个读者要的书都是不一样的,那你的小推车就不会发挥作用了。在这里,小推车正是起到了cache的作用:(1)小推车里面的书就是cache的数据;(2)你必须根据书名去找书;(3)读者要的书越扎堆,cache的命中率越高;(4)小推车的容量不会比书架的书多(谁会搞个比书架还大的小推车啊?)。

buffer:家家户户都会有垃圾桶,有垃圾就往垃圾桶里扔,等到垃圾桶满了才拿出去倒。在这里,垃圾桶起到了buffer的作用:(1)垃圾桶里的垃圾就是buffer的数据;(2)等垃圾桶满了才会倒垃圾;(3)不管你要扔的垃圾是塑料袋还是菜叶还是纸片,不分种类,尽管往垃圾桶扔;(4)垃圾桶不能太大(你拖不动),垃圾桶也不能太小(太小的垃圾桶一天要倒很多次)。

如果你学过数据结构,可能会发现,cache和buffer跟两种数据结构很相似:cache正如mapbuffer正如list。实际就是这样的,流行的缓存服务器软件memcache就是把整台服务器当做一个大大的map,通过局域网传输数据。在Java里面,java.io.BufferedInputStream和java.io.BufferedOutputStream就是使用了垃圾桶的原理来提高性能。

This entry was posted in 缓存. Bookmark the permalink.

One Response to Cache和Buffer的区别

  1. 姜利阳 says:

    Good,例子很恰当

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>