早上做了ehcache的benchmark,set和get一个40k的字符串(压缩到19k)到ehcache。10000次set和get操作,每次都使用不同的key。
ehcache的测试结果(10000次):
<table> <tr> <td width="100">Operation</td> <td width="100">Total(ms)</td> <td>Average(ms)</td> </tr> <tr> <td>set</td> <td>34</td> <td>0.0034</td> </tr> <tr> <td>get</td> <td>6</td> <td>0.00065</td> </tr> </table>
结果相当令人满意。
作为对比,使用JDK提供的简单Cache类型WeakHashMap做一个测试(10000次):
<table> <tr> <td width="100">Operation</td> <td width="100">Total(ms)</td> <td>Average(ms)</td> </tr> <tr> <td>set</td> <td>4</td> <td>4e-4</td> </tr> <tr> <td>get</td> <td>5</td> <td>5e-4</td> </tr> </table>
可以看到,ehcache的set比WeakHashMap耗时提升了10倍,但是get的效率是差不多的。因为cache的使用场景,一般都是读远大于写,所以ehcache是一个胜任的进程内缓存。回去需要调研一下昨天失败的原因。
出于兴趣,又使用memcached做了一个测试。spy的客户端似乎会将字符串做压缩,最后将40k的字符串压缩到19k,但是结果仍然是毫秒级的,这也证明了涉及到网络IO的操作,会慢上几个数量级。
memcached的测试结果(1000次):
<table> <tr> <td width="100">Operation</td> <td width="100">Total(ms)</td> <td>Average(ms)</td> </tr> <tr> <td>set</td> <td>4796</td> <td>4.796</td> </tr> <tr> <td>get</td> <td>1726</td> <td>1.726</td> </tr> </table>
开始调研DNS协议。尝试输出DNS query的UDP包内容,发现不是文本编码,看来得研究一下了。
晚上到家,尝试将MX记录也伪造一下,方法是在domain前面加上mail.,并且把mail.domain记录到A记录列表,下次将这个mail.domain直接指向配置好的IP地址。queryperf真是个好东西。
晚上使用dig查看了一些知名网站的TTL,发现都在几百到几千之间。后来尝试了一下MacOX下对TTL的应对策略,发现不会又TTL设置那么长,但是绝对跟TTL有关系。
突然有个想法,可以将BlackHole内置缓存,并且可以主动刷新!这样子就很方便了,因为如果是本地搭建BlackHole,实际上本地做缓存和使用BlackHole缓存效率是相近的。
明天的任务是解析代理的响应,并做缓存。
来源:oschina
链接:https://my.oschina.net/u/190591/blog/96889