BlackHole开发日记-几种缓存方式性能测试

依然范特西╮ 提交于 2019-12-09 14:24:48

早上做了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缓存效率是相近的。

明天的任务是解析代理的响应,并做缓存。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!