016 进程内缓存和进程外缓存的对比
2018-03-27 本文已影响174人
夏大王2019
对比redis缓存和本地内存
这两者是什么,
在java应用中,对于访问频率比较高,又不怎么变化的数据,常用的解决方案是把这些数据加入缓存。相比DB,缓存的读取效率快好不少。java应用缓存一般分两种,一是进程内缓存,就是使用java应用虚拟机内存的缓存;另一个是进程外缓存,现在我们常用的各种分布式缓存。相比较而言,进程内缓存比进程外缓存快很多,而且编码也简单;但是,进程内缓存的存储量有限,使用的是java应用虚拟机的内存,而且每个应用都要存储一份,有一定的资源浪费。进程外缓存相比进程内缓存,会慢些,但是,存储空间可以横向扩展,不受限制。
进程内缓存和进程外缓存,各有优缺点,针对不同场景,可以分别采用不同的缓存方案。对于数据量不大的,我们可以采用进程内缓存。或者只要内存足够富裕,都可以采用,但是不要盲目以为自己富裕,不然可能会导致系统内存不够。
数据访问时间的数量级别
事件 | 时间 | |
---|---|---|
1 | 从数据库中读取一条数据(有索引) | 十几毫秒 |
2 | 从远程分布式缓存读取一条数据 | 0.5毫秒 |
3 | 从内存中读取1MB数据 | 十几微妙 |
插入一组数据做位参考
平均单次请求的时间,机器配置相关(i5 8GB的pc)
使用的缓存 | t=某次的数据,测试的共次数,av=平均数 ns | |
---|---|---|
本地缓存 | t=285907391ns,times=2500,av=468464138 | |
redis缓存 | t=465590284ns,times=2653,av=961629872 | |
结论 | 单次请求的时间 本地缓存小于redis 缓存 |
测试的方法:
50个线程,每个线程中连续请求10次
使用的缓存 | ||
---|---|---|
本地缓存 | 请求500,返回500,时间9748ms | |
redis缓存 | 请求500,返回437,时间 12000ms | |
结论 | 支持的并发请求数 本地缓存大于 使用redis缓存 |