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就是使用了垃圾桶的原理来提高性能。

Posted in 缓存 | Leave a comment

DNS的TXT记录有什么用?SPF记录怎么写?

在dns记录里面,除了最常见的a记录,cn记录,mx记录,还有不常见的txt记录。

txt记录用来保存域名的附加文本信息,txt记录的内容按照一定的格式编写,最常用的是spf格式,spf用于登记某个域名拥有的用来外发邮件的所有ip地址。mx记录的作用是给寄信者指明某个域名的邮件服务器有哪些,spf格式的txt记录的作用跟mx记录相反,它向收信者表明,哪些邮件服务器是经过某个域名认可会发送邮件的。spf的作用主要是反垃圾邮件,主要针对那些发信人伪造域名的垃圾邮件。

按照spf格式在dns中增加一条txt类型的记录,将提高该域名的信誉度,同时可以防止垃圾邮件伪造该域的发件人发送垃圾邮件。

spf格式比较复杂,一个最典型的spf格式的txt记录例子为“v=spf1 a mx ~all ”,表示只有这个域名的a记录和mx记录中的ip地址有权限使用这个域名发送邮件。其中v=spf1表示这条txt记录使用的是spf格式版本1;a和mx表示a记录或者mx记录;~all表示除了前面所指定的其他ip地址统统不认可。

openspf.org提供了一个spf向导用来生成spf。

txt记录除了保存spf之外,还有什么用途?Jonney在这里提供一个例子:假如你开发了一个有几百万用户的应用软件,这个软件每隔几个星期就会升级一次版本,这个软件每次启动的时候都要到你的服务器查询是否有新的版本,这样你必须维护一个或多个版本查询服务器。聪明且懒惰的同学就可以在这里偷懒了,在你的dns里面新增一条txt记录,用来保存软件的版本信息,比如在version.example.com增加一条txt记录version=1.2.5,生存周期为一天,软件启动的时候查询这个txt记录里面的版本信息,这样就省了维护版本查询服务器的成本。

Posted in dns | Leave a comment